커뮤니티
예스스팟 Q&A
하늘북 님에 의해서 삭제되었습니다.
2018-07-21
32
글번호 224528
답변완료
문의드립니다
안녕하세요
현재 예스스팟을 사용하여 시험주문을 넣어보고있습니다.
아래와 같은 코드로 주문을 넣고있는데
옵션종목 매도면 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
2058
글번호 224527
답변완료
문의
예를 들어,매수주문 발생으로 설정된 3계약이 체결되었고 2계약이 매도 익절된 상태에서
손절신호가 발생되었다고 할 때
현재 포지션인 매수 1계약이 청산되어 무포지션 상태가 되어야 되는데,
현재 포지션 잔량이 인식되지 않아
매수 3계약을 청산하여 포지션이 2계약 매도 상태가 됩니다
손절신호시 현재 포지션 수량에 대해서만 반대신호가 나가도록 하고
또 미체결 포지션을 취소하거나 정정하는 해결 방안 알려주시면 감사하겠읍니다.
2018-07-19
2099
글번호 224525
답변완료
문의
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
2206
글번호 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
2266
글번호 224520
파일럿 님에 의해서 삭제되었습니다.
2018-07-18
11
글번호 224519
답변완료
문의 드립니다.
예스스팟으로 개별종목을 검색한 후
일정시간동안 일정수량을 일정 간격으로 매수 후 매도하는 로직을 돌리려고 합니다.
예를들어 10시에 조건에 맞는 어떤종목이 검색되어
10시부터 11시까지 1시간동안 2분(120초) 간격으로 10주씩 매수한다고 했을때
매수 간격을 정확히 120초가 아닌 110초~130초 간격으로 매회 랜덤하게 변화를 주고 싶습니다.
그냥 타이머로는 매수간격 변화를 줄 수 없어 고민중입니다.
스팟에서 특정범위(위의 경우 110~130초)내에서 랜덤한 매수간격 구현이 가능한지 도움요청 드립니다.
2018-07-15
2322
글번호 224518
답변완료
스팟식 문의
초보단계임을 감안해주시기 바라며 문의드립니다.
매수 3개를 주문했는데 2개가 체결되고 1개가 미체결 상태라면 신규 매수는 않되도록 하고 나머지 1개가 매수조건에 만족하면 체결되거나, 매도 조건이 되면 매도 조건에 따라 지정한 수량으로 매수된 수량한도내에서 청산되도록 하고,다른 예로 매도 3개 체결된 상태에서 청산조건이 되어 2개는 매수청산되고 1개는 매수 청산대기 상태에서 신규 매수조건에 만족되더라도 매수대기상태 즉 미체결 주문이 있다면 신규 매수주문이 않되도톡 하는 참조수식 부탁드립니다
2018-07-13
2218
글번호 224517
답변완료
사용자 정의 모듈 작성 화면 크기 좀 늘려주세요
창이 너무 작아서 코드가 조금만 길어져도 코드 보기가 너무 불편합니다
창크기 조절 기능이나 전체화면 기능 추가해주시면 감사하겠습니다
2018-07-11
2408
글번호 224513
답변완료
전종목 백테스팅 방법 문의드립니다
전략A를 만들고 전체 종목에 차례대로 백테스트하고 각 종목 수익률을 뽑고자합니다.
수식을 어떻게 짜야하는지 문의드립니다.
2018-07-11
2280
글번호 224512