커뮤니티

문의드립니다.

프로필 이미지
착한이
2014-10-20 16:26:15
1374
글번호 223208
답변완료
안녕하세요. Yestrader로 주식선물일봉을 이용한 포지션 전략에서 보유중인 전종목을 만기일날 롤오버하는 YesSpot수식좀 부탁드립니다. Yestrader의 경우 만기일 전종목 청산하고 익일 재진입하는 전략을 쓰고 있는데요, 이럴경우 손익에 왜곡이 있어서 만기일날 전종목교체하는 방법을 사용하고 싶습니다. 보유종목의 개수에 맞춰서 만기일 특정시간에 전종목을 다음물로 롤오버하되, 시간은 시스템의 부하를 방지하기 위해 종목마다 다르게 가져가고자 합니다. 감사합니다.
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2014-11-13 19:15:02

안녕하세요 예스스탁입니다. 문의하신 내용 가능하지 않습니다. 자동으로 롤오버를 하기 위해서는 보유한 종목들의 차월물 종목코드를 알아야 합니다. 하지만 잔고 종목의 종목코드를 보고 차월물의 종목코드를 알수가 없습니다. 도움을 드리지 못해 죄송합니다. 즐거운 하루되세요 > 착한이 님이 쓴 글입니다. > 제목 : 문의드립니다. > 안녕하세요. Yestrader로 주식선물일봉을 이용한 포지션 전략에서 보유중인 전종목을 만기일날 롤오버하는 YesSpot수식좀 부탁드립니다. Yestrader의 경우 만기일 전종목 청산하고 익일 재진입하는 전략을 쓰고 있는데요, 이럴경우 손익에 왜곡이 있어서 만기일날 전종목교체하는 방법을 사용하고 싶습니다. 보유종목의 개수에 맞춰서 만기일 특정시간에 전종목을 다음물로 롤오버하되, 시간은 시스템의 부하를 방지하기 위해 종목마다 다르게 가져가고자 합니다. 감사합니다.
프로필 이미지

예스스탁 예스스탁 답변

2014-11-17 16:15:26

안녕하세요 예스스탁입니다. 아래식 참고하시기 바랍니다. MarketData1을 보유중인 근월물 주식선물 데이터 MarketData2를 차월물 주식선물 데이터로 지정하시면 됩니다. 수식에 게시판 금칙어가 있습니다. 영문업데이트가 Up*date로 되어 있으므로 *삭제하시기 바랍니다. var RollOver = false; var Pst = 0; var ID = 0; var Num = 0; var vol = 0; function Main_OnStart() { RollOver = false; pst = 0; vol = 0; } function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*삭제 { if (lUp*dateID == 20001)//*삭제 { var d = new Date(); var Month = d.getMonth()+1;//월(1월이 0으로 리턴되므로 1을 더함) var ndate = d.getDate();//날짜 var week = d.getDay();//요일 //RollOver가 false이고 //3,6,9,12월이고 2번째주 목요일 //14시40분이후이면 if (RollOver == false && Month == 0 && week == 4 && ndate >= 8 && ndate <= 14 && MarketData1.time >= 1440000000) { //RollOver는 true(한번만 동작하기 위한 변수) RollOver = true; //MarketData1 종목잔고 셋팅 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); //잔고가 매도포지션이면 if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { // 최종 포지션 저장 pst = Account1.Balance.position; // 수량저장 vol = Account1.Balance.count; //매도5호가로 잔고수량만큼 매수주문 ID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Ask(5), 0); } //잔고가 매수포지션이면 if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { // 최종 포지션 저장 pst = Account1.Balance.position; // 수량저장 vol = Account1.Balance.count; //매수5호가로 잔고수량만큼 매도주문 ID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), Account1.Balance.count, MarketData1.Bid(5), 0); } } } } //주무응답 수신 function Main_OnOrderResponse(OrderResponse) { //RollOver가 true //저장한 주문아이디와 동일 주문응답이 들어오면 //주문번호 저장 if (RollOver == true && OrderResponse.orderID == ID) { Num = OrderResponse.orderNum; } } //체결응답 수신 function Main_OnNotifyFill(NotifyFill) { //RollOver가 true //저장한 주문번호와 동일한 체결응답이 수신되면 if (RollOver == true && num > 0 && NotifyFill.orderNum == num) { //MarketData1청산주문이 분할로 체결될수도 있으므로 //MarketData1 잔고수량 세팅 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code),0); //MarketData1잔고가 없고 if (Account1.Balance.count == 0) { //MarketData1 최종 포지션이 매도였으면 if (pst == 1) { //MarketData2를 MarketData1 최종수량만큼 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData2.code),vol, MarketData1.Bid(5), 0); } //MarketData1 최종 포지션이 매수였으면 if (pst == 2) { //MarketData2를 MarketData1 최종수량만큼 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData2.code),vol, MarketData1.Ask(5), 0); } } } } 즐거운 하루되세요 > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 문의드립니다. > 안녕하세요 예스스탁입니다. 문의하신 내용 가능하지 않습니다. 자동으로 롤오버를 하기 위해서는 보유한 종목들의 차월물 종목코드를 알아야 합니다. 하지만 잔고 종목의 종목코드를 보고 차월물의 종목코드를 알수가 없습니다. 도움을 드리지 못해 죄송합니다. 즐거운 하루되세요 > 착한이 님이 쓴 글입니다. > 제목 : 문의드립니다. > 안녕하세요. Yestrader로 주식선물일봉을 이용한 포지션 전략에서 보유중인 전종목을 만기일날 롤오버하는 YesSpot수식좀 부탁드립니다. Yestrader의 경우 만기일 전종목 청산하고 익일 재진입하는 전략을 쓰고 있는데요, 이럴경우 손익에 왜곡이 있어서 만기일날 전종목교체하는 방법을 사용하고 싶습니다. 보유종목의 개수에 맞춰서 만기일 특정시간에 전종목을 다음물로 롤오버하되, 시간은 시스템의 부하를 방지하기 위해 종목마다 다르게 가져가고자 합니다. 감사합니다.