예스스탁
예스스탁 답변
2019-02-28 16:21:34
안녕하세요
예스스탁입니다.
스팟의 수식답변은 식작성을 보조하는 가이드입니다.
아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다.
스크립트 객체설정
계좌객체 추가 --> 속성에서 객체명은 Account1, 주무낼 계좌지정
차트객체 추가 --> 속성에서 객체명은 Chart1, 연결할 차트의 아이디지정
종목객체 추가 --> 속성에서 객체명은 MarketData1, 차트와 동일종목으로 지정
var BEid,BEnum,SEid,SEnum,BXcancel;
var BXid,BXnum,SXid,SXnum,SXcancel;
function Main_OnStart()
{
Main.MessageList("스팟시작");
}
function Chart1_OnRiseSignal(Signal)
{
//Buy신호 발생하면 매도1호가로 매수
if (T == 0 && Signal.signalKind == 1)
{
T = 1;
BEid = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Signal.count, MarketData1.Ask(1),0);
}
//Exitlong신호 발생하면
if (T == 1 && Signal.signalKind == 2)
{
T = 0;
//매수진입의 주문번호로 미체결 객체 셋팅
Account1.SetUnfill(BEnum);
//미체결이 있으면 취소
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(BEnum)
}
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
//보유한 매수포지션이 있으면 매수1호가로 전량 매도(청산)
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
BXid = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count, MarketData1.Bid(1),0);
}
}
//Sell신호 발생하면 9개약 매수1호가로 매도
if (T == 0 && Signal.signalKind == 3)
{
SEid = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1, MarketData1.Bid(1),0);
}
if (T == 1 && Signal.signalKind == 4)
{
T = 0;
//매수진입의 주문번호로 미체결 객체 셋팅
Account1.SetUnfill(SEnum);
//미체결이 있으면 취소
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(SEnum)
}
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
//보유한 매도포지션이 있으면 매도1호가로 전량 매수(청산)
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
SXid = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Signal.count, MarketData1.Ask(1),0);
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
//매수진입주문 응답
if (OrderResponse.orderID == BEid)
{
BEnum = OrderResponse.orderNum;
Main.SetTimer(1, 30000);//1번타이머,30초 셋팅
}
//매도진입주문 응답
if (OrderResponse.orderID == SEid)
{
SEnum = OrderResponse.orderNum;
Main.SetTimer(2, 30000);//2번타이머,30초 셋팅
}
//매수청산주문 응답
if (OrderResponse.orderID == BXid)
{
BXnum = OrderResponse.orderNum;
Main.SetTimer(3, 30000);//3번타이머,30초 셋팅
}
//매도청산주문 응답
if (OrderResponse.orderID == SXid)
{
SXnum = OrderResponse.orderNum;
Main.SetTimer(4, 30000);//4번타이머,30초 셋팅
}
//매수청산 취소주문 응답
if (OrderResponse.orderID == BXcancel)
{
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
//보유한 매수포지션이 있으면 시장가로 매도(청산)
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,0,1);
}
}
//매도청산주문 응답
if (OrderResponse.orderID == SXid)
{
//잔고셋팅
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
//보유한 매수포지션이 있으면 시장가로 매수(청산)
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,0,1);
}
}
}
function Main_OnTimer(nEventID)
{
//매수진입주문 후 30초 뒤
if (nEventID == 1)
{
//매수진입주문번호로 미체결객체 셋팅
Account1.SetUnfill(BEnum);
//미체결잔량이 있으면 취소
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(BEnum);
}
}
//매도진입주문 후 30초 뒤
if (nEventID == 2)
{
//매도진입주문번호로 미체결객체 셋팅
Account1.SetUnfill(SEnum);
//미체결잔량이 있으면 취소
if (Account1.Unfill.count > 0)
{
Account1.OrderCancel(SEnum);
}
}
//매수청산주문 후 30초 뒤
if (nEventID == 3)
{
//매수청산주문번호로 미체결객체 셋팅
Account1.SetUnfill(BXnum);
//미체결잔량이 있으면 취소
if (Account1.Unfill.count > 0)
{
BXcancel = Account1.OrderCancel(BEnum);
}
}
//매도청산주문 후 30초 뒤
if (nEventID == 4)
{
//매도청산주문번호로 미체결객체 셋팅
Account1.SetUnfill(SXnum);
//미체결잔량이 있으면 취소
if (Account1.Unfill.count > 0)
{
SXcancel = Account1.OrderCancel(SEnum);
}
}
}
즐거운 하루되세요
> 돌아온스머프 님이 쓴 글입니다.
> 제목 : 수식에 대하여
> 안녕하세요
늘 감사합니다
다름이 아니라
시스템트레이딩을 예스스팟에 적용하려고 합니다
매수 매도 신호시 30초내에 체결이 이루어지지 않으면 취소하고
환매 신호시 계좌 잔고를 파악하여 환매를 하고
환매 신호 후 30초 동안 매매가 이루어지지 않으면 시장가로 변경하여 매매를 하려고 하면
어떻게 해야 할지 잘 모르겠네요...
간단할것 같은데 전혀 모르겠네요....
꼭 알고 싶습니다
이부분만 댓글로 힘들다면 직접 찾아가 배우고 싶습니다
감사합니다