답변완료
문의드립니다
안녕하세요
현재 예스스팟을 사용하여 시험주문을 넣어보고있습니다.
아래와 같은 코드로 주문을 넣고있는데
옵션종목 매도면 GetBidByCode 를 사용하고 옵션종목 매수면 GetAskByCode를 사용하고있습니다
예)
var BxCallPrice = Option1.GetBidByCode(buycallcode,5);
var BxPutPrice = Option1.GetAskByCode(buyputcode,5);
Account1.OrderSell(buyputcode, putQuantity, BuyPutPrice, 1);
첨부파일에도 보시면 아시겠지만 주문가격이 모두 0.00으로 표기되고있고 주문상태는 오류발생으로 표기되고있습니다.
다른 곳에서는 주문상태는 시험적용으로 되어있는데 주문가격은 0.00으로 표기가 되고있습니다.
저함수를 써서 주문을 넣었는데 왜 주문상태에서는 0.00으로 표기되는지 궁금합니다
var Start
var buycallcode
var buyputcode
var sellcallcode
var sellputcode
var UNum; var LNum;
var CallCode; var CallPrice;
var PutCode; var PutPrice;
var CC; var PP;
var callQuantity; var putQuantity;
var buyQuantity = 3000000;
var sellQuantity = 1;
function Main_OnStart()
{
Main.MessageLog("시작");
Start = 1;
}
function Chart1_OnRiseSignal(Signal)
{
Main.MessageLog("신호완성/" + Signal.signalKind);
//매수진입
if(Signal.signalKind ==1)
{
UNum = Option1.uppersATM;
LNum = Option1.lowersATM;
CallPrice = new Array(UNum + LNum + 1);
CallCode = new Array(UNum + LNum + 1);
PutPrice = new Array(UNum + LNum + 1);
PutCode = new Array(UNum + LNum + 1);
for(var i = -LNum; i <= UNum; i++)
{
if(Option1.GetCurrent(0,i) <= 2.0)
{
CallPrice[i+LNum] = Option1.GetCurrent(0, i);
CallCode[i+LNum] = Option1.GetATMCallRecent(i);
}
else
{
CallPrice[i+LNum] = -1;
CallCode[i+LNum] = -1;
}
}
for (var ii = -UNum; ii <= LNum; ii++)
{
if (Option1.GetCurrent(1, ii) <= 2.5)
{
PutPrice[ii+UNum] = Option1.GetCurrent(1, ii);
PutCode[ii+UNum] = Option1.GetATMPutRecent(ii);
}
else
{
PutPrice[ii+UNum] = -1;
PutCode[ii+UNum] = -1;
}
}
CC = -1;
buycallcode = -1;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (CallPrice[iii+LNum] > CC)
{
CC = CallPrice[iii+LNum];
buycallcode = CallCode[iii+LNum]
}
}
PP = -1;
buyputcode = -1;
for (var iiii = -UNum; iiii <= LNum; iiii++)
{
if (PutPrice[iiii+UNum] > PP)
{
PP = PutPrice[iiii+UNum];
buyputcode = PutCode[iiii+UNum];
}
}
Start = 1;
var BuyCallPrice = Option1.GetAskByCode(buycallcode,5);
callQuantity = Math.round(buyQuantity / BuyCallPrice / 250000);
Account1.OrderBuy(buycallcode, callQuantity, BuyCallPrice, 1);
var BuyPutPrice = Option1.GetBidByCode(buyputcode,5);
putQuantity = sellQuantity;
Account1.OrderSell(buyputcode, putQuantity, BuyPutPrice, 1);
Main.MessageLog("선물매수");
}
//매수청산
if(Start == 1 && Signal.signalKind == 2)
{
var BxCallPrice = Option1.GetBidByCode(buycallcode,5);
var BxPutPrice = Option1.GetAskByCode(buyputcode,5);
Account1.OrderSell(buycallcode, callQuantity, BxCallPrice, 1);
Account1.OrderBuy(buyputcode, putQuantity, BxPutPrice, 1);
Main.MessageLog("선물매수청산");
}
//매도진입
if(Signal.signalKind ==3)
{
UNum = Option1.uppersATM;
LNum = Option1.lowersATM;
CallPrice = new Array(UNum + LNum + 1);
CallCode = new Array(UNum + LNum + 1);
PutPrice = new Array(UNum + LNum + 1);
PutCode = new Array(UNum + LNum + 1);
for(var i = -LNum; i <= UNum; i++)
{
if(Option1.GetCurrent(0,i) <= 2.0)
{
CallPrice[i+LNum] = Option1.GetCurrent(0, i);
CallCode[i+LNum] = Option1.GetATMCallRecent(i);
}
else
{
CallPrice[i+LNum] = -1;
CallCode[i+LNum] = -1;
}
}
for (var ii = -UNum; ii <= LNum; ii++)
{
if (Option1.GetCurrent(1, ii) <= 2.5)
{
PutPrice[ii+UNum] = Option1.GetCurrent(1, ii);
PutCode[ii+UNum] = Option1.GetATMPutRecent(ii);
}
else
{
PutPrice[ii+UNum] = -1;
PutCode[ii+UNum] = -1;
}
}
CC = -1;
buycallcode = -1;
for (var iii = -LNum; iii <= UNum; iii++)
{
if (CallPrice[iii+LNum] > CC)
{
CC = CallPrice[iii+LNum];
buycallcode = CallCode[iii+LNum]
}
}
PP = -1;
buyputcode = -1;
for (var iiii = -UNum; iiii <= LNum; iiii++)
{
if (PutPrice[iiii+UNum] > PP)
{
PP = PutPrice[iiii+UNum];
buyputcode = PutCode[iiii+UNum];
}
}
Start = 1;
var BuyCallPrice = Option1.GetBidByCode(buycallcode,5);
callQuantity = sellQuantity;
Account1.OrderSell(buycallcode, callQuantity, BuyCallPrice, 1);
var BuyPutPrice = Option1.GetAskByCode(buyputcode,5);
putQuantity = Math.round(buyQuantity / BuyPutPrice / 250000);
Account1.OrderBuy(buyputcode, putQuantity, BuyPutPrice, 1);
Main.MessageLog("선물매도");
}
//매도청산
if(Start == 1 && Signal.signalKind == 4)
{
var BxCallPrice = Option1.GetAskByCode(buycallcode, 5);
Account1.OrderBuy(buycallcode, callQuantity, BxCallPrice, 1);
var BxPutPrice = Option1.GetBidByCode(buyputcode,5);
Account1.OrderSell(buyputcode, putQuantity, BxPutPrice, 1);
Main.MessageLog("선물매도청산");
}
}
2018-07-20
2016
글번호 224527
답변완료
문의
function Main_OnStart()
{
Main.MessageLog("시작") ;
Main.SetTimer(5, 3000);
a1.Refresh() ;
}
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)
{
if (lUp*dateID == 30000)
{
OrderCode = Main.GetOrderCode(order1.code);
a1.SetBalance(OrderCode, 0) ;
if (a1.Balance.position != 1 && a1.Balance.position != 2 )
{
Position = 0 ;
cnt = 0 ;
Main.MessageLog("무포지션");
}
if (a1.Balance.position == 1 )
{
Position = -1 ;
cnt = 1 ;
Main.MessageLog("매도포지션");
}
if (a1.Balance.position == 2 )
{
Position = 1 ;
cnt = 1 ;
Main.MessageLog("매수포지션");
}
}
}
위수식으로 하이투자증권과 nh선물에서 같이 사용하고 있는데
디버깅 내용이 틀리게 나오는 이유가 원지요 ?
위의 평션 메인업데이트어카운트 내용은 원래 평션 메인온스타트에 삽입하여 사용되었는데
에러 수정한 예스스탁의 회신된 내용으로 수정한 부분입니다.
원래식에서 매매식은 타이머로 작성해서 매매는 작동하였는데(계좌잔고수량 인신은 오류) 평션 메인업데이트어카운트로 수정한 다음부터는 매매식이 작동을 않하는 이유는 뭔가요 ?
그리고 스팟에서 종목명을 연결선물지수로 지정했는데 어떤경우에는 체결메세지에 kp200 f 1809로 표시되는 이유는 뭔지요 ?
추가 질문입니다. 온타이머 펑션으로 엑셀 셋데이타를 업로드해서 사용하는데
딜레이 없이 실시간으로 업데이트 하려면 어떤게 해야 하나요 ? 온타이머로 하니까
스팟은 작동하는데 키가 먹지 않더군요. 딜레이도 딜레이지만,,,,
2018-07-25
2162
글번호 224524
답변완료
선물차트 적용 미니선물 거래 피라미딩 예스스팟 로직오류..
아까 전화로 문의드렸었습니다. 3개의 시스템 전부 선물에 적용하고 미니선물로 거래하는 피라미딩 로직입니다. 계좌명은 동일하게 설정하였습니다. 진입은 3개의 시스템 전부 멀쩡하게 들어갔는데, 청산이 되지 않았습니다. 예전에 1개의 시스템 가지로 테스트 했을 때에는 문제 없이 진행되는 것을 확인했었습니다. 코드 자체에 오류가 있는건가요? 한번봐주시길 부탁드립니다. 날씨가 더운데 수고하세요.
var Position;
var OrderCode;
var BID;
var SID;
var Bnum;
var Snum;
var BuyCnt;
var SellCnt;
function Main_OnStart()
{A1.Balance
Main.MessageLog("시작");
Position = 0;
BuyCnt = 0;
SellCnt = 0;
OrderCode = Main.GetOrderCode(miniKP.code)
}
function C1_OnRiseSignal(Signal)
{
Main.MessageLog("신호완성/" + Signal.signalKind);
if (Signal.signalKind == 1)
{
Position = 1;
BID = A1.OrderBuy(OrderCode, Signal.count, miniKP.Ask(5), 0)
Main.MessageLog("미니선물 매수");
}
if (Position==1 && Signal.signalKind == 2)
{
if (BuyCnt>0)
{
A1.OrderSell(OrderCode, BuyCnt, miniKP.Bid(5), 0)
Main.MessageLog("미니선물 매수 청산");
BuyCnt = 0;
}
}
if (Signal.signalKind == 3)
{
Position=-1;
A1.OrderSell(OrderCode, Signal.count, miniKP.Bid(5), 0)
Main.MessageLog("미니선물 매도");
}
if (Position==-1 && Signal.signalKind == 4)
{
if (SellCnt>0)
{
A1.OrderBuy(OrderCode, SellCnt, miniKP.Ask(5), 0)
Main.MessageLog("미니선물 매도 청산");
SellCnt = 0;
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (Position == 1 && OrderResponse.orderID == BID)
{
BNum = OrderResponse.orderNum;
}
if (Position == -1 && OrderResponse.orderID == SID)
{
SNum = OrderResponse.orderNum;
}
}
function Main_OnNotifyFill(NotifyFill)
{
if (Position == 1 && NotifyFill.orderNum == BNum)
{
BuyCnt = BuyCnt + 1;
}
if (Position == -1 && NotifyFill.orderNum == SNum)
{
SellCnt = SellCnt + 1;
}
}
2018-07-17
2230
글번호 224520
답변완료
수식에 오류가 발생했습니다. 수정 부탁합니다.
안녕하세요.
고생이 많습니다.
문의번호 1722번 문의 관련입니다.
보내주신 수식을 예스트레이드로 돌려보니
아래와 같은 에러가 발생되네요.
수정부탁 드립니다.
<에러발생내역>
1. 줄번호 193 ReferenceError: count5 is not defined ->첨부파일1
2. 종목1(코스닥150인버스)첫매도시간을 외부변수에 지정된 시간(15:00시)에 매도가 되어야 하는데 매도가 되지않고 매수가됨 -> 첨부파일 2
3. 분활매수 횟수 및 매도횟수는 외부변로 지정하여 초기값이 3회분할매수 및 분할매도
하게끔되어 있으나 1또는 2회만 분할 매수 및 분할매도가 실행됨 -> 첨부파일2, 3
4. 첨부파일4는 보내주신 스팟코딩 자료입니다.
수정부탁합니다
<전략>
1. 장시작과 동시에 코덱스코스닥150선물 인버스 매수(251340) --> 인버스매수시간 외부변수로 지정, 인버스 분할매수횟수 외부변수로 지정
2. 매수한 코스닥150선물인버스를 15:00 에 매도 -> 매도시간 외부변수로 지정, 매도시 분할매도횟수 외부변수로 지정
3. 코덱스코스닥150레버리지(233740) 15:01에 매수 -> 코덱스코스닥150레버리지 매수시간 외부 변수로 지정, 분할매수횟수 외부변수로 지정
4. 매수한 코스닥150 레버리지 익일 시가에 매도 -> 매도시간 외부변수로 지정, 분할매도횟수 외부변수로 지정
5. 주식계좌에서 etf 매매비중(%)을 외부변수로 지정-> 예) 주식계좌에 1000만원 있을 때 500만원만 etf로 매매시의 비중
2018-07-09
2356
글번호 224509