커뮤니티
예스스팟 Q&A
답변완료
문의드립니다
스팟에서 복합주기(일봉, 분봉)의 확장차트 생성법이 있을까요?
수식작성에서 복합주기의 경우 참조데이터로 매매하는 방법에 대해 답변받앗는데
스팟에서 참조데이터 확장차트 생성법을 몰라서 테스트를 못하고 잇네요
2018-07-24
2480
글번호 224531
답변완료
확장차트 현재 몇개까지 만들수있는지요?
확장차트 현재 몇개까지 만들수있는지요?
2018-07-23
2237
글번호 224530
doilzul 님에 의해서 삭제되었습니다.
2018-07-22
4
글번호 224529
하늘북 님에 의해서 삭제되었습니다.
2018-07-21
33
글번호 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
2109
글번호 224527
답변완료
문의
예를 들어,매수주문 발생으로 설정된 3계약이 체결되었고 2계약이 매도 익절된 상태에서
손절신호가 발생되었다고 할 때
현재 포지션인 매수 1계약이 청산되어 무포지션 상태가 되어야 되는데,
현재 포지션 잔량이 인식되지 않아
매수 3계약을 청산하여 포지션이 2계약 매도 상태가 됩니다
손절신호시 현재 포지션 수량에 대해서만 반대신호가 나가도록 하고
또 미체결 포지션을 취소하거나 정정하는 해결 방안 알려주시면 감사하겠읍니다.
2018-07-19
2147
글번호 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
2257
글번호 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
2311
글번호 224520
파일럿 님에 의해서 삭제되었습니다.
2018-07-18
11
글번호 224519
답변완료
문의 드립니다.
예스스팟으로 개별종목을 검색한 후
일정시간동안 일정수량을 일정 간격으로 매수 후 매도하는 로직을 돌리려고 합니다.
예를들어 10시에 조건에 맞는 어떤종목이 검색되어
10시부터 11시까지 1시간동안 2분(120초) 간격으로 10주씩 매수한다고 했을때
매수 간격을 정확히 120초가 아닌 110초~130초 간격으로 매회 랜덤하게 변화를 주고 싶습니다.
그냥 타이머로는 매수간격 변화를 줄 수 없어 고민중입니다.
스팟에서 특정범위(위의 경우 110~130초)내에서 랜덤한 매수간격 구현이 가능한지 도움요청 드립니다.
2018-07-15
2369
글번호 224518