예스스탁
예스스탁 답변
2021-07-27 13:12:58.0
안녕하세요
예스스탁입니다.
아래 가이드 수식 참고하셔서 수정보완해 사용하시기 바랍니다.
스크립트 객체설정
차트객체추가 --> 속성에서 객체명은 Chart1, 차트와 아이디 연결
좀옥객체추가 --> 속성에서 객체명은 MarketData1, 차트동일종목으로 지정
계좌객체추가 --> 속성에서 객체명은 Account1, 주문낼 계좌번호 지정
var BEID,BTID,BXID,SEID,STID,SXID;
var BENUM,BTNUM,BXNUM,SENUM,STNUM,SXNUM;
function Main_OnStart()
{
Main.MessageList("Start");
}
function Chart1_OnRiseSignal(Signal)
{
//매수진입신호 발생
if (Signal.signalKind == 1)
{
//매도5호가로 매수주문
BEID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count,MarketData1.Ask(5), 2);
//신호가격 +10틱으로 매도주문
BTID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count,Signal.price + MarketData1.GetTickSize()*10, 2);
}
//매수청산신호 발생
if (Signal.signalKind == 2 )
{
//목표수익청산이 아니면
if (Signal.name != "StopProfitTarget")
{
//목표수익청산 미체결확인
Account1.SetUnfill(BTNUM);
//미체결되어 있으면
if (Account1.Unfill.count > 0 )
{
//취소
Account1.OrderCancel(BTMUN);
//잔고셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
//잔고가 매수포지션으로 수량이 있으면
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
//잔고수량 전량 매수5호가로 매도주문
BXID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(5), 2)
}
}
}
else //목표수익청산이면
{
//2번 타이머 1초 타이머 셋팅
Main.SetTimer(2, 1000);
}
}
//매수진입신호 발생
if (Signal.signalKind == 3)
{
//매수5호가로 매도주문
SEID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Signal.count,MarketData1.Bid(5), 2);
//신호가격 -10틱으로 매수주문
STID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count,Signal.price - MarketData1.GetTickSize()*10, 2);
}
//매도청산신호 발생
if (Signal.signalKind == 4 )
{
//목표수익청산이 아니면
if (Signal.name != "StopProfitTarget")
{
//목표수익청산 미체결확인
Account1.SetUnfill(STNUM);
//미체결되어 있으면
if (Account1.Unfill.count > 0 )
{
//취소
Account1.OrderCancel(STMUN);
//잔고셋팅
Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0);
//잔고가 매도포지션으로 수량이 있으면
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
//매도5호가로 매수주문
SXID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(5), 2)
}
}
}
else //목표수익청산이면
{
//4번 타이머 1초 타이머 셋팅
Main.SetTimer(4, 1000);
}
}
}
function Main_OnTimer(nEventID)
{
//1번타이머 동작
if (nEventID == 1)
{
//1번타이머 종료
Main.KillTimer(1);
//미체결셋팅
Account1.SetUnfillOrderNumber(BENUM);
//정정할 주문가격
var RP = MarketData1.Ask(5);
//미체결이 있고 정정할 가격이 기존주문가격과 다르면
if (Account1.Unfill.count > 0 && RP != Account1.Unfill.price)
{
//정정주문
Account1.OrderReplace(BENUM, Account1.Unfill.count , RP);
}
}
//2번타이머 동작
if (nEventID == 2)
{
//타이머종료
Main.KillTimer(2);
//목표수익청산주문에 대해 미체결 셋팅
Account1.SetUnfillOrderNumber(BTNUM);
//정정할 주문가격
var RP = MarketData1.Bid(5);
//미체결이 있고 정정할 가격이 기준 주문가격과 다르면
if (Account1.Unfill.count > 0 && RP != Account1.Unfill.price)
{
//정정
Account1.OrderReplace(BTNUM, Account1.Unfill.count , RP);
}
}
//3번타이머 동작
if (nEventID == 3)
{
//3번타이머 종료
Main.KillTimer(3);
//미체결셋팅
Account1.SetUnfillOrderNumber(SENUM);
//정정할 주문가격
var RP = MarketData1.Bid(5);
//미체결이 있고 정정할 가격이 기존주문가격과 다르면
if (Account1.Unfill.count > 0 && RP != Account1.Unfill.price)
{
//정정주문
Account1.OrderReplace(SENUM, Account1.Unfill.count , RP);
}
}
//4번타이머 동작
if (nEventID == 4)
{
//타이머종료
Main.KillTimer(4);
//목표수익청산주문에 대해 미체결 셋팅
Account1.SetUnfillOrderNumber(STNUM);
//정정할 주문가격
var RP = MarketData1.Ask(5);
//미체결이 있고 정정할 가격이 기준 주문가격과 다르면
if (Account1.Unfill.count > 0 && RP != Account1.Unfill.price)
{
//정정
Account1.OrderReplace(STNUM, Account1.Unfill.count , RP);
}
}
}
//각 주문이 접수되면 주분별로 주문번호 저장
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BEID)
{
BENUM = OrderResponse.orderNum;
Main.SetTimer(1, 1000);
}
if (OrderResponse.orderID == BTID)
{
BTNUM = OrderResponse.orderNum;
}
if (OrderResponse.orderID == BXID)
{
BXNUM = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SEID)
{
SENUM = OrderResponse.orderNum;
}
if (OrderResponse.orderID == STID)
{
STNUM = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SXID)
{
SXNUM = OrderResponse.orderNum;
}
}
즐거운 하루되세요
> 파인애플 님이 쓴 글입니다.
> 제목 : 문의 드립니다
> 1
매수진입명"B"
매수청산명"BX"
매도진입명"S"
매도청산명"SX"
SetStopProfitTarget
매수매도+진입청산+익절 시스템
해외선물에서
스팟으로 아래와같이
주문하고싶습니다
<매수진입 신호발생>
매도 5호가로 매수주문
신호가격 10호가 위로 매도주문(미리익절주문넣기)
<매수진입 정정>
1초뒤 미체결시
매도 5호가로 1차정정 매수주문
<매수익절SetStopProfitTarget 신호발생>
(주문은 매수진입신호발생시 미리 넣어놨음)
<매수익절SetStopProfitTarget 정정>
1초뒤 미체결시
매수 5호가로 1차정정 매도주문
<매수청산 신호발생>
매수 5호가로 매도주문
미리넣은 익절매도주문 취소
<매수청산 정정>
1초뒤 미체결시
매수 5호가로 1차정정 매도주문
<매도진입 신호발생>
매수 5호가로 매도주문
신호가격 10호가 아래로 매수주문(미리익절주문넣기)
<매도진입 정정>
1초뒤 미체결시
매수 5호가로 1차정정 매도주문
<매도익절SetStopProfitTarget 신호발생>
(주문은 매도진입신호발생시 미리 넣어놨음)
<매도익절SetStopProfitTarget 정정>
1초뒤 미체결시
매도 5호가로 1차정정 매수주문
<매도청산 신호발생>
매도 5호가로 매수주문
미리넣은 매수주문 취소
<매도청산 정정>
1초뒤 미체결시
매도 5호가로 1차정정 매수주문
2
SetStopProfitTarget 대신
진입신호와 동시에 익절을 미리 걸어두고싶은데
다른 아이디어가 있을까요?