커뮤니티

예스스팟 수식 문의 드립니다.

프로필 이미지
대가북극곰
2015-10-25 17:27:40
2093
글번호 223697
답변완료
차트에서 매수 신호가 발생했을 때 비율을 활용하여 분산진입할 예정인데, 처음 매수 때는 총 금액의 25%를 진입하고 두번 째 매수는 해당 매수 평균단가에서 -10%가 되기 바로 전의 호가에서 첫 매수 때 체결된 주문과 같은량을 매수하고 세번 째 매수는 첫번째와 두번째 때 매수된 종목 평균단가에서, 똑같이 -10%가 되기 바로 전의 호가에서 지금까지 체결된 주문과 같은량을 매수 하는 시스템을 만들고 싶습니다. 즉 전량이 체결 된다고 가정할 때, 잔고의 25% 25% 50% 이런 식으로 주문이 들어가도록 하고 싶습니다. 또 14시 정각에 들어간 매수 주문을 전량 취소하고 14시 45분에 포지션에 있는 수량을 전부 청산하는 시스템을 만들고 싶습니다. 도움 부탁드립니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-11-05 13:25:18

안녕하세요 예스스탁입니다. 스팟 답변은 작성 가이드 정도입니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. var Cash,M1,M2,M3; var BuyID1,BuyID2,BuyID3; var BuyNum1,BuyNum2,BuyNum3; var Buy1,Buy2,Buy3,Cancel,Exit; function Chart1_OnRiseSignal(Signal) { //매수신호발생 if (Signal.signalKind == 1) { Cash = Account1.GetBalanceETCinfo(18);//주문가능현금 M1 = Cash*0.25;//주문가능현금의 25% M2 = Cash*0.25;//주문가능현금의 25% M3 = Cash*0.50;//주문가능현금의 25% var OP = MarketData1.Ask(3);//주문가격(매도3호가) BuyID1 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Math.floor(M1/OP), OP, 0); Buy1 = 1; Buy2 = 0; Buy3 = 0; Cancel = false; Exit = false; Main.SetTimer(1, 5000);//1번 타이머,5초간격 } } //타이머 동작 function Main_OnTimer(nEventID) { //1번 타이머 if (nEventID == 1) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //첫매수 체결통보 수신 후 if (Buy1 == 3 && HHMMSS < 140000) { //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); //두번재 매수, 잔고수량이 0이상이고 현재가가 평단가-10%+1호가에 도달하면 현재가로 주문 if (Buy2 == 0 && Account1.Balance.count > 0 && MarketData1.current <= Account1.Balance.avgUnitCost*0.9+MarketData1.GetTickSize()) { Buy2 = 1; BuyID2 = Account1.OrderBuy(Signal.code, Math.floor(M2/OP), MarketData1.current, 0); } //세번째 매수 , 잔고수량이 0이상이고 현재가가 평단가-10%+1호가에 도달하면 현재가로 주문 if (Buy2 == 3 && Buy3 == 0 && Account1.Balance.count > 0 && MarketData1.current <= Account1.Balance.avgUnitCost*0.9+MarketData1.GetTickSize()) { Buy3 = 1; BuyID3 = Account1.OrderBuy(Signal.code, Math.floor(M3/OP), MarketData1.current, 0); } } //14시 이후에 미체결 모두 취소(한번만 수행) if (HHMMSS >= 140000 && Cancel == false) { Cancel = true; var UFnum = Account1.GetTheNumberOfUnfills() if (UFnum > 0) { for(var i = 0; i < UFnum; i++) { Account1.SetUnfillIndex(i) if (Account1.Unfill.count > 0) { Account1.OrderCancel(Account1.Unfill.orderNum); } } } } //14시 45분에 이후에 미체결 모두 취소(한번만 수행) if (HHMMSS >= 144500 && Exit == false) { Exit = true; //잔고셋팅 Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } } } } //주문응답시 주분번호 저장 function Main_OnOrderResponse(OrderResponse) { if (BuyID1 == OrderResponse.orderID) { BuyNum1 = OrderResponse.orderNum; Buy1 = 2; } if (BuyID2 == OrderResponse.orderID) { BuyNum2 = OrderResponse.orderNum; Buy2 = 2; } if (BuyID3 == OrderResponse.orderID) { BuyNum3 = OrderResponse.orderNum; Buy3 = 2; } } //체결응답 각 변수는 true로 변경 function Main_OnNotifyFill(NotifyFill) { if (NotifyFill.orderNum == BuyNum1) { Buy1 = 3; } if (NotifyFill.orderNum == BuyNum2) { Buy2 = 3; } if (NotifyFill.orderNum == BuyNum3) { Buy3 = 3; } } 즐거운 하루되세요 > 대가북극곰 님이 쓴 글입니다. > 제목 : 예스스팟 수식 문의 드립니다. > 차트에서 매수 신호가 발생했을 때 비율을 활용하여 분산진입할 예정인데, 처음 매수 때는 총 금액의 25%를 진입하고 두번 째 매수는 해당 매수 평균단가에서 -10%가 되기 바로 전의 호가에서 첫 매수 때 체결된 주문과 같은량을 매수하고 세번 째 매수는 첫번째와 두번째 때 매수된 종목 평균단가에서, 똑같이 -10%가 되기 바로 전의 호가에서 지금까지 체결된 주문과 같은량을 매수 하는 시스템을 만들고 싶습니다. 즉 전량이 체결 된다고 가정할 때, 잔고의 25% 25% 50% 이런 식으로 주문이 들어가도록 하고 싶습니다. 또 14시 정각에 들어간 매수 주문을 전량 취소하고 14시 45분에 포지션에 있는 수량을 전부 청산하는 시스템을 만들고 싶습니다. 도움 부탁드립니다.