예스스탁
예스스탁 답변
2025-11-18 14:51:28
안녕하세요
예스스탁입니다.
예스스팟 도움말과 수식 충분히 숙지하고 사용하셔야 합니다.
이후 수정이나 보완은 예스스팟 Q&A로 글 올려주시기 바랍니다.
var 초 = 30;
var 차수 = 3;
var OC,pst;
var BID, SID, BNUM, SNUM, BV, SV;
var bcnt,scnt;
function Main_OnStart()
{
Main.MessageList("Start");
//차트종목 종목코드
OC = Main.GetOrderCode(Chart1.GetCode(1));
pst = 0;
}
function Chart1_OnRiseSignal(Signal)
{
//매수진입신호 발생
if (Signal.signalKind == 1)
{
//포지션은 1
pst = 1;
//신호수량 저장
BV = Signal.count;
//매수주문 집행(신호수량, 시장가)
BID = Account1.OrderBuy(OC,BV,0,1);
Main.SetTimer(1, 1000*초);
bcnt = 0;
Main.MessageList("매수진입신호:",BV);
}
//스팟에서 매수진입 이후에 매수청산 신호 발생
if (pst == 1 && Signal.signalKind == 2)
{
//진입매수주문 미체결 객체 셋팅
Account1.SetUnfillOrderNumber(BNUM);
//미체결이 있으면
if ( Account1.Unfill.count > 0 )
{
Main.KillTimer(1);
//진입수량에서 미체결수량 차감
BV = BV-Account1.Unfill.count;
//미체결 주문 취소
Account1.OrderCancel(BNUM);
}
Main.MessageList("매수청산:",BV);
//매수진입수량에서 미체결수량 차감후 0이 아니면(진입전량 체결이나 일부체결)
if (BV > 0)
{
//청산을 위해 매도주문 집행(수량은 BV, 시장가)
Account1.OrderSell(OC, BV,0,1);
}
}
//매도진입신호 발생
if (Signal.signalKind == 3)
{
//포지션은 -1
pst = -1;
//신호수량 저장
SV = Signal.count;
//매도주문 집행(신호수량, 시장가)
SID = Account1.OrderSell(OC, SV,0,1);
Main.SetTimer(3, 1000*초);
scnt = 0;
Main.MessageList("매도진입신호:",SV);
}
//스팟에서 매도진입 이후에 매도청산 신호 발생
if (pst == -1 && Signal.signalKind == 4)
{
Main.KillTimer(3);
//진입매도주문 미체결 객체 셋팅
Account1.SetUnfillOrderNumber(SNUM);
//미체결이 있으면
if ( Account1.Unfill.count > 0 )
{
//진입수량에서 미체결수량 차감
SV = SV-Account1.Unfill.count;
//미체결 주문 취소
Account1.OrderCancel(SNUM);
}
Main.MessageList("매도청산:",SV);
//매도진입수량에서 미체결수량 차감후 0이 아니면(진입전량 체결이나 일부체결)
if (SV > 0)
{
//청산을 위해 매수주문 집행(수량은 SV,시장가)
Account1.OrderBuy(OC, SV,0,1);
}
}
}
//주문응답
function Main_OnOrderResponse(OrderResponse)
{
//매수진입주문에 대한 응답
if (OrderResponse.orderID == BID)
{
//정상접수
if (OrderResponse.isNormal == true)
{
Main.KillTimer(1);
pst = 1;
//주문번호 저장
BNUM = OrderResponse.orderNum;
}
else //주문거부면 pst를 11로 변경하여 매수청산신호시 주문하지 않음
{
pst = 11;
}
}
//매도진입주문에 대한 응답이 오면
if (OrderResponse.orderID == SID)
{
//정상접수
if (OrderResponse.isNormal == true)
{
Main.KillTimer(3);
pst = 1;
//주문번호 저장
SNUM = OrderResponse.orderNum;
}
else //주문거부면 pst를 -11로 변경하여 매도청산신호시 주문하지 않음
pst = -11;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1 && pst == 11)
{
BID = Account1.OrderBuy(OC,BV,0,1);
bcnt = bcnt+1;
if (bcnt == 차수)
{
Main.KillTimer(1);
}
}
if (nEventID == 3 && pst == -11)
{
SID = Account1.OrderSell(OC,SV,0,1);
scnt = scnt+1;
if (scnt == 차수)
{
Main.KillTimer(3);
}
}
}
즐거운 하루되세요