답변완료
문의드립니다.
노고에 감사드립니다.
1. 문의
NH트레이더를 사용하고 있습니다.
설정창에서 "계좌비밀번호 설정시 가원장 생성"에 체크한 상태입니다.
아래1.의 수식을 적용하였습니다.
"매수청산실행"이라는 문구가 나오는것을 보아 수식은 정상적으로 작동하는듯 하나
실제 매수청산이 실행되지 않습니다.
컴퓨터 설정의 문제인지, 예스스팟 자체의 문제인지 알수 없어
당사의 컴퓨터로 예스스팟 로직을 실행하여 실제주문이 나가는지 확인하여 주셨으면 합니다.
2. 문의
아래2.의 수식을 적용하였습니다.
실제 종목 수는 10종목 입니다. 실제 매수가 진행되지 않습니다.
매수 조건이 충족되지 않은 경우 일지도 모른다는 생각에
if (BalanceCode.length > 99 && OrderAble == false )
{
Main.MessageLog("잔고확인");
}
라는 조건을 추가 해봤지만, 실행 창에 "매수진입" 또는 "잔고확인"이라는 문구가 나타나지 않습니다.
메뉴얼을 살펴보며 수식을 확인해 보았지만, 올바른 수식인 듯하여 혼란스럽습니다.
잘못된 점을 살펴봐 주시기 바랍니다.
아래1.
var Position;
var BID;
var Bnum;
var BuyFill;
var LOANDATE;
function Main_OnStart()
{
Main.MessageLog("시작");
Position = 0;
}
function C1_OnRiseSignal(Signal)
{
if (Position == 0 && Signal.signalKind == 1 )
{
Position = 1;
BID = A1.OrderBuy(Signal.code, Signal.count,0, 1, 1);
Main.MessageLog("매수진입");
BuyFill = 0;
}
//매수청산신호가 발생하고
if (Position == 1 && Signal.signalKind == 2 )
{
//체결확인값이 1이면
if (BuyFill == 1)
{
//계좌 refresh
A1.Refresh();
//Position변수는 2
Position = 2;
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (Position == 1 && OrderResponse.orderID == BID)
{
Bnum = OrderResponse.orderNum;
}
}
function Main_OnNotifyFill(NotifyFill)
{
if (Position == 1 && NotifyFill.orderNum == Bnum)
{
BuyFill = 1;
LOANDATE = NotifyFill.loanDate;
}
}
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)//*제거
{
//잔고 refresh완료
if (sAccntNum == A1.number && lUp*dateID == 30000)//*제거
{
//잔고 전체 종목중
//차트종목과 같고 대출종류는 1이고, 대출일이 LOANDATE와 같은 잔고가 있으면 매도
var num = A1.GetTheNumberOfBalances();
for (i = 0; i < num; i++)
{
A1.SetBalance(i);
if (A1.Balance.code == Main.GetOrderCode(C1.GetCode(1))
&& A1.Balance.loanKind == 1
&& A1.Balance.loanDate == LOANDATE)
A1.OrderSell(A1.Balance.code,A1.Balance.count,0, 1, A1.Balance.loanKind,A1.Balance.loanDate);
Main.MessageLog("매수청산실행");
}
//Position변수는 0
Position = 0;
}
}
2.
var Position;
var BID;
var BuyFill;
function C1_OnRiseSignal(Signal)
{
if (Position == 0 && Signal.signalKind == 1 )
{
Position = 1;
// 보유종목수 산정(동일종목코드 1개로 처리)
var num = A1.GetTheNumberOfBalances();
var BalanceCode = [];//잔고에서 중복코드 제외하고 종목코드를 저장할 배열변수
var OrderAble = false;//보유중인 종목인지 판단변수
for (i = 0; i < num; i++)
{
A1.SetBalance(i);
var hold = false;
if (A1.Balance.count > 0 && A1.Balance.position == 2)
{
for (y = 0; y < BalanceCode.length; y++)
{
if (A1.Balance.code == BalanceCode[i])
{
hold = true;
}
}
if (hold == false)
{
BalanceCode.push(A1.Balance.code);
}
if (A1.Balance.code == Main.GetOrderCode(Signal.code))
{
OrderAble = true;
}
}
}
if (BalanceCode.length < 100 || OrderAble == true )
{
BID = A1.OrderBuy(Signal.code, Signal.count,0, 1, 1);
Main.MessageLog("매수진입");
BuyFill = 0;
}
if (BalanceCode.length > 99 && OrderAble == false )
{
Main.MessageLog("잔고확인");
}
}
}
2016-03-28
2219
글번호 223870