커뮤니티

수식문의

프로필 이미지
현빈
2014-06-27 06:58:52
1212
글번호 223047
답변완료
1.계좌에 선물수익이 50만원이상이면 전량 시장가 청산 2.(선물 체결결과 확인후) 매수에서 이익이었으면 콜(가격이 2.0에가장가까운 것을 찾아서),매도에서 이익이었으면 풋을(가격이 2.0에가장가까운 것을 찾아서) 계좌잔액의 전부(또는 일부를 선택해서) 현재가+5호가로 매수 주문한다. 3.옵션매수 미체결시 다시 +5호가 주문한다. 4.옵션 손실이 100만원이상이면 시장가 청산한다. 위 내용을 하나의 수식안에 작성해주시면 감사하겠습니다.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-07-07 18:14:43

안녕하세요 예스스탁입니다. 예스스팟의 답변은 가이드라인일 뿐입니다. 아래 내용 참고하셔서 수정보완해 사용하시기 바랍니다. var FSxID, FBxID; var FSxNum, FBxNum; var OptCode,OptID,OptNum; function Main_OnStart() { Main.SetTimer(1, 5000);//5초 타이머 } function Main_OnTimer(nEventID) { if (nEventID == 1) { //선물 잔고셋팅 Account1.SetBalanceItem(Main.GetOrderCode(MarketData1.code), 0); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) { Main.MessageList("선물매도손익",(Account1.Balance.avgUnitCost - Account1.Balance.current)*500000); if ((Account1.Balance.avgUnitCost - Account1.Balance.current)*500000 >= 1000000) { //시장가청산 FSxID = Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count,0,1); Main.KillTimer(1);//타이머종료 } } if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Main.MessageList("선물매수손익",(Account1.Balance.current-Account1.Balance.avgUnitCost)*500000); if ((Account1.Balance.current-Account1.Balance.avgUnitCost)*500000 >= 1000000) { //시장가청산 FBxID = Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); Main.KillTimer(1);//타이머종료 } } } if (nEventID == 2) { Account1.SetUnfillOrderNumber(OptNum); if (Account1.Unfill.count > 0) { OptID = Account1.OrderReplacePrice(OptNum, Option.GetCurrent(OptCode)+0.05); } } if (nEventID == 3) { Account1.SetBalanceItem(OptCode,0) if (Account1.Balance.count > 0 && Account1.Balance.position == 2) { Main.MessageList("옵션매수손익",(Account1.Balance.current-Account1.Balance.avgUnitCost)*500000); if ((Account1.Balance.current-Account1.Balance.avgUnitCost)*500000 <= -1000000) { //시장가청산 Account1.OrderSell(Account1.Balance.code, Account1.Balance.count,0,1); } } } } function Main_OnOrderResponse(OrderResponse) { //선물매도청산주문 주문번호 저장 if (OrderResponse.orderID == FSxID) { FSxNum = OrderResponse.orderNum; } //선물매수청산주문 주문번호 저장 if (OrderResponse.orderID == FBxID) { FBxNum = OrderResponse.orderNum; } if (OrderResponse.orderID == OptID) { OptIDNum = OrderResponse.orderNum; } } function Main_OnNotifyFill(NotifyFill) { //선물매도청산이 체결되면 if (NotifyFill.orderNum == FSxNum) { //2.0에 가장가까운 풋 종목계산 var UNum = Option.uppersATM; var LNum = Option.lowersATM; var PutCode = new Array(UNum+LNum+1); var PutPrice = new Array(UNum+LNum+1); for (var i = -UNum; i <= LNum; i++) { PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-2.0); PutCode[i+UNum] = Option.GetATMPutRecent(i); } var PP = 9999999; var PutOrderCode = 9999999; for (var i = -LNum; i <= UNum; i++) { if (PutPrice[i+LNum] < PP) { PP = PutPrice[i+LNum]; PutOrderCode = PutCode[i+LNum] } } if (PP < 9999999) { //주문가능현금에서 가능한 최대수량 OptCode = PutOrderCode; var Vol = Math.floor(Account1.GetBalanceETCinfo(30)/(Option.GetCurrent(OptCode)*500000)); OptID = Account1.OrderBuy(OptCode, Vol, Option.GetCurrent(OptCode)+0.05, 0); Main.SetTimer(2, 10000);//10초 타이머 셋팅 } } //선물매수청산이 체결되면 if (NotifyFill.orderNum == FBxNum) { //2.0에 가장가까운 콜 종목계산 var UNum = Option.uppersATM; var LNum = Option.lowersATM; var CallCode = new Array(UNum+LNum+1); var CallPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { CallPrice[i+UNum] = Math.abs(Option.GetCurrent(0, i)-2.0); CallCode[i+UNum] = Option.GetATMCallRecent(i); } var CC = 9999999; var CallOrderCode = 9999999; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } if (CC < 9999999) { //주문가능현금에서 가능한 최대수량 OptCode = CallOrderCode; var Vol = Math.floor(Account1.GetBalanceETCinfo(30)/(Option.GetCurrent(OptCode)*500000)); OptID = Account1.OrderBuy(OptCode, Vol, Option.GetCurrent(OptCode)+0.05, 0); Main.SetTimer(2, 10000);//10초 타이머 셋팅 } } //옵션매수주문 체결수신되고 if (NotifyFill.orderNum == OptNum) { //미체결이 없으면 Account1.SetUnfillOrderNumber(NotifyFill.orderNum); if (Account1.Unfill.count == 0) { Main.KillTimer(2);//2번 타이머 종료 Main.SetTimer(3);//3번 타이머 시작 } } } 즐거운 하루되세요 > 현빈 님이 쓴 글입니다. > 제목 : 수식문의 > 1.계좌에 선물수익이 50만원이상이면 전량 시장가 청산 2.(선물 체결결과 확인후) 매수에서 이익이었으면 콜(가격이 2.0에가장가까운 것을 찾아서),매도에서 이익이었으면 풋을(가격이 2.0에가장가까운 것을 찾아서) 계좌잔액의 전부(또는 일부를 선택해서) 현재가+5호가로 매수 주문한다. 3.옵션매수 미체결시 다시 +5호가 주문한다. 4.옵션 손실이 100만원이상이면 시장가 청산한다. 위 내용을 하나의 수식안에 작성해주시면 감사하겠습니다.