커뮤니티
글번호 228046의 추가문의
2025-11-17 19:03:23
156
글번호 228128
답변내용에 더해서 시장가주문을 냈으나 특별한 이벤트 발생해서 주문거부나 주문자체가 없어진 경우 30초 뒤에 2차 시장가 주문 하고 역시 미체결이면 30초뒤 다시 3차 시장가 주문 을 내는 식을 추가해서 부탁드립니다.(3차까지 나가면 거의 체결될듯 합니다.)
답변 2
예스스탁 예스스탁 답변
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);
}
}
}
즐거운 하루되세요
산수유
2025-11-18 15:32:37
감사드립니다. 앞으로는 예스스팟에 올리겠습니다.
다음글
이전글