커뮤니티

수식 문의 합니다~~

프로필 이미지
선자
2016-10-13 08:00:59
1707
글번호 224012
답변완료
안녕 하세요~~ 비슷한 질문이 있나하고 열심히 질문란을 찾아 보고 적용도 해보았으나 해결이 되지 않아 문의 드립니다 예스챠트로 포지션매매를 하고 있습니다 다른건 다 문제가 없는데 마감동시호가에 발생하는 예비신호에 진입을 할수 없다는 겁니다 스팟으로는 진입이 가능하다고 알고 있습니다 그럼 다음의 기준으로 예스신호를 스팟신호로 가능하게 수식 부탁드립니다 1.예스의 신호는 리버스신호이고 가끔 목표치 청산이 되는 Onclose타입의 신호입니다 예스에서는 진입신호,모든신호등의 구분이 있어서 다음날 진입시에 별 문제가 없었는데 스팟에서도 전날의 포지션보유에 연관되게 구분하여 주시기 바랍니다 2.예스의 신호가 리버스신호라서 포시션청산과 신규진입시에 증거금이 두배로 잡히는 문제 가 있습니다. 예스에서는 시간지연등으로 해결이 가능했는데 스팟에서도 같은 방법으로 해 주시기 바랍니다. 즉 포지션이 없을시는 바로 신규진입 포지션 보유시는 먼저 청산후 신규진입하는 식으로 증거금이 두배로 잡히지 않게 부탁합니다 3.장마감 동시호가에 발생하는 예비신호에 진입할수 있도록 부탁합니다 이 때도 역시 리버스신호라서 시간지연 이런게 필요할거 같은데 동시호가라서 문제가 있어 보이긴 합니다만... 참고로 예스챠트는 60분봉으로 보고 있습니다 항상 빠른 답변 미리 감사 드립니다 수고 하세요~~
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-10-28 16:41:38

안녕하세요 예스스탁입니다. 예스스팟 답변은 사용자분이 직접 작성하신다는 가정하에 가이드 정도의 식만 작성해 드립니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체설정 차트객체 추가 --> 속성에서 객체명은 Chart1, 차트와 아이디 연결 계좌객체 추가 --> 속성에서 객체명은 Account1, 주문낼 계좌번호 지정 종목객체 추가 --> 속성에서 객체명은 MarketData1, 차트와 동일종목으로 지정 var SK,BuyID,BuyNum,SellID,SellNum; function Main_OnStart() { Main.MessageList("Start"); Main.SetTimer(99, 10000);//99번 타이머 10초 셋팅(동시호가 시간 체크 위해) } //차트에서 신호발생 function Chart1_OnRiseSignal(Signal) { SK = Signal.signalKind; Main.MessageList("신호발생 : 신호종류", SK,"신호가격",Signal.price,"신호수량",Signal.count); //매수신호 발생 if (SK == 1) { //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고가 없으면 if (Account1.Balance.count == 0) { //매도3호가로 1계약 매수주문 BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(3),0); } //잔고에 매도포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { //1번 타이머 5초 셋팅(N초지연주문을 위해) Main.SetTimer(1, 5000); } } //매수청산신호 발생 if (SK == 2) { //매수진입주문 번호로 미체결 객체 셋팅 Account1.SetUnfill(BuyNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(BuyNum); } //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고에 매수포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { //전량 매수3호가로 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3),0); } } //매도진입신호발생 if (SK == 3) { //신호수량 SP = Signal.count; //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고가 없으면 if (Account1.Balance.count == 0) { //매수3호가로 1계약 매도주문 SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(3),0); } //잔고에 매수포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { //2번 타이머 5초 셋팅(N초지연주문을 위해) Main.SetTimer(1, 5000); } } //매도청산신호 발생 if (SK == 4) { //매도진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(SellNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(SellNum); } //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고에 매도포지션이 있으면 청산 if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { //전량 매도3호가로 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3),0); } } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //1번 타이머가 동작하면 if (nEventID == 1) { //매도3호가로 1계약 매수주문 BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(3),0); //1번 타이머 종료 Main.KillTimer(1); } //2번 타이머가 동작하면 if (nEventID == 2) { //매수3호가로 1계약 매도주문 SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(3),0); //2번 타이머 종료 Main.KillTimer(2); } //99번 타이머 동작하고 15시36분 이후이면 if (nEventID == 99 && HHMMSS >= 153600) { //99q번 타이머 종료 Main.KillTimer(99); //마지막봉 미완성 신호정보 셋팅 var Incom = Chart1.GetIncompleteSignal(); //매수진입 미완성 신호가 발생해 있다면 if (Incom[0].signalKind == 1) { //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code),0); //잔고가 없으면 if (Account1.Balance.count == 0) { //매도3호가로 1계약 매수주문 BuyID = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),1,MarketData1.Ask(3),0); } //잔고에 매도포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { //직전진입이 매도진입이므로 매도진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(SellNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(SellNum); } //청산 //잔고전량 매수3호가로 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3),0); //진입주문 위해 1번 타이머 5초 셋팅(N초지연주문을 위해) Main.SetTimer(1, 5000); } } //매수청산 미완성 신호가 발생해 있다면 if (Incom[0].signalKind == 2) { //직전진입이 매수진입이므로 매수진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(BuyNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(BuyNum); } //청산 //잔고전량 매수3호가로 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3),0); } //매도진입 미완성 신호가 발생해 있다면 if (Incom[0].signalKind == 3) { //잔고가 없으면 if (Account1.Balance.count == 0) { //매수3호가로 1계약 매도주문 SellID = Account1.OrderSell(Main.GetOrderCode(MarketData1.code),1,MarketData1.Bid(3),0); } //잔고에 매수포지션이 있으면 if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { //직전진입이 매수진입이므로 매수진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(BuyNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(BuyNum); } //청산 //잔고전량 매수3호가로 매도주문 Account1.OrderSell(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Bid(3),0); //진입주문 위해 2번 타이머 5초 셋팅(N초지연주문을 위해) Main.SetTimer(1, 5000); } } //매도청산 미완성 신호가 발생해 있다면 if (Incom[0].signalKind == 2) { //직전진입이 매도진입이므로 매도진입주문번호로 미체결 객체 셋팅 Account1.SetUnfill(SellNum); //미체결이 잇으면 if (Account1.Unfill.count > 0) { //취소주문 Account1.OrderCancel(SellNum); } //청산 //잔고전량 매수3호가로 매수주문 Account1.OrderBuy(Main.GetOrderCode(MarketData1.code),Account1.Balance.count,MarketData1.Ask(3),0); } } } //각 진입주문 후 주문번호 저장 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BuyID) { BuyNum = OrderResponse.orderNum; } if (OrderResponse.orderID == SellID) { SellNum = OrderResponse.orderNum; } } 즐거운 하루되세요 > 선자 님이 쓴 글입니다. > 제목 : 수식 문의 합니다~~ > 안녕 하세요~~ 비슷한 질문이 있나하고 열심히 질문란을 찾아 보고 적용도 해보았으나 해결이 되지 않아 문의 드립니다 예스챠트로 포지션매매를 하고 있습니다 다른건 다 문제가 없는데 마감동시호가에 발생하는 예비신호에 진입을 할수 없다는 겁니다 스팟으로는 진입이 가능하다고 알고 있습니다 그럼 다음의 기준으로 예스신호를 스팟신호로 가능하게 수식 부탁드립니다 1.예스의 신호는 리버스신호이고 가끔 목표치 청산이 되는 Onclose타입의 신호입니다 예스에서는 진입신호,모든신호등의 구분이 있어서 다음날 진입시에 별 문제가 없었는데 스팟에서도 전날의 포지션보유에 연관되게 구분하여 주시기 바랍니다 2.예스의 신호가 리버스신호라서 포시션청산과 신규진입시에 증거금이 두배로 잡히는 문제 가 있습니다. 예스에서는 시간지연등으로 해결이 가능했는데 스팟에서도 같은 방법으로 해 주시기 바랍니다. 즉 포지션이 없을시는 바로 신규진입 포지션 보유시는 먼저 청산후 신규진입하는 식으로 증거금이 두배로 잡히지 않게 부탁합니다 3.장마감 동시호가에 발생하는 예비신호에 진입할수 있도록 부탁합니다 이 때도 역시 리버스신호라서 시간지연 이런게 필요할거 같은데 동시호가라서 문제가 있어 보이긴 합니다만... 참고로 예스챠트는 60분봉으로 보고 있습니다 항상 빠른 답변 미리 감사 드립니다 수고 하세요~~