커뮤니티

수정부탁드려요.

프로필 이미지
착한이
2015-05-29 14:31:02
1610
글번호 223492
답변완료
안녕하세요. 2가지 질문드립니다. 1. 아래는 3.0이하의 델타가 0.5근접하는 콜, 풋 종목입니다. 만기주가 아니라면 근월물, 만기주에는 차월물(가격 3.0 이하, 델타0.5)을 주문할 수 있도록 GetRemainDays 또는 GetRemainDaysByCode 함수를 이용하여 수식을 수정 부탁드립니다. //3.0 이하의 콜옵션종목 찾기 for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) > 1.0 && Option.GetCurrent(0, i) < 3.0 && Option.GetDelta(0,i) != 0) { CallPrice[i+LNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(0,i))); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = 999999; CallCode[i+LNum] = 999999; } } //3.0 이하의 콜옵션종목중 델타가 0.5에 근접하는 종목 찾기 CC = 999999; CallOrderCode = 999999; for (var ii = -LNum; ii <= UNum; ii++) { if (CallPrice[ii+LNum] < CC) { CC = CallPrice[ii+LNum]; CallOrderCode = CallCode[ii+LNum] } } //3.0 이하의 풋옵션종목 찾기 for (var iii = -UNum; iii <= LNum; iii++) { if (Option.GetCurrent(1, iii) > 1.0 && Option.GetCurrent(1, iii) < 3.0 && Option.GetDelta(1,iii) != 0 ) { PutPrice[iii+UNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(1,iii))); PutCode[iii+UNum] = Option.GetATMPutRecent(iii); } else { PutPrice[iii+UNum] = 999999; PutCode[iii+UNum] = 999999; } } //3.0 이하의 풋옵션종목중 델타가 0.5에 근접하는 종목 찾기 PP = 999999; PutOrderCode = 999999; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] < PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } 2. 체결을 보장하기위해, 보통은 매도시 매수5호가, 매수시 매도5호가로 주문하고 있는데, 양매도 전략에서는 콜풋 동시에 매도진입시 각각 매도1호가에 지정가 주문후 둘 중 하나가 전량체결되면 나머지 주문은 시장가(또는 상대5호가)로 수정주문. 환매수시에도 마찬가지로 각각 매수1호가에 지정가 주문후 둘 중 하나가 전량체결되면 시장가(또는 상대5호가)로 수정주문할 수 있도록 아래의 수식을 수정부탁드립니다. Account1.OrderSell(SellCallCode, SellCallCount, Option.GetBidByCode(SellCallCode, 5), 0); Account1.OrderSell(SellPutCode, SellPutCount, Option.GetBidByCode(SellPutCode, 5), 0); Account1.OrderBuy(SellCallCode, SellCallCount, Option.GetAskByCode(SellCallCode, 5), 0); Account1.OrderBuy(SellPutCode, SellPutCount, Option.GetAskByCode(SellPutCode, 5), 0);
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-06-08 14:49:28

안녕하세요 예스스탁입니다. 아래 내용들 참고하시기 바랍니다. 1. function 이벤트 { var CM = 0; var PM = 1; var forward = 0; if (Option.GetRemainDays(0, 0) <= 4) { CM = 2; PM = 3; forward = 1; } //3.0 이하의 콜옵션종목 찾기 for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(CM, i) > 1.0 && Option.GetCurrent(CM, i) < 3.0 && Option.GetDelta(CM,i) != 0) { CallPrice[i+LNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(CM,i))); CallCode[i+LNum] = Option.GetATMCallRecent(i,forward); } else { CallPrice[i+LNum] = 999999; CallCode[i+LNum] = 999999; } } //3.0 이하의 콜옵션종목중 델타가 0.5에 근접하는 종목 찾기 CC = 999999; CallOrderCode = 999999; for (var ii = -LNum; ii <= UNum; ii++) { if (CallPrice[ii+LNum] < CC) { CC = CallPrice[ii+LNum]; CallOrderCode = CallCode[ii+LNum] } } //3.0 이하의 풋옵션종목 찾기 for (var iii = -UNum; iii <= LNum; iii++) { if (Option.GetCurrent(PM, iii) > 1.0 && Option.GetCurrent(PM, iii) < 3.0 && Option.GetDelta(PM,iii) != 0 ) { PutPrice[iii+UNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(1,iii))); PutCode[iii+UNum] = Option.GetATMPutRecent(iii,forward); } else { PutPrice[iii+UNum] = 999999; PutCode[iii+UNum] = 999999; } } //3.0 이하의 풋옵션종목중 델타가 0.5에 근접하는 종목 찾기 PP = 999999; PutOrderCode = 999999; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] < PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } } 2. var : SID1,SID2,BID1,BID2; var : SNum1,SNum2,BNum1,BNum2; function 이벤트 { if (조건1) { SID1 = Account1.OrderSell(SellCallCode, SellCallCount, Option.GetAskByCode(SellCallCode, 1), 0); SID2 = Account1.OrderSell(SellPutCode, SellPutCount, Option.GetAskByCode(SellPutCode, 1), 0); } if (조건2) { BID1 = Account1.OrderBuy(SellCallCode, SellCallCount, Option.GetBidByCode(SellCallCode, 1), 0); BID2 = Account1.OrderBuy(SellPutCode, SellPutCount, Option.GetBidByCode(SellPutCode, 1), 0); } } function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == SID1) { SNum1 = OrderResponse.orderNum; } if (OrderResponse.orderID == SID2) { SNum2 = OrderResponse.orderNum; } if (OrderResponse.orderID == BID1) { BNum1 = OrderResponse.orderNum; } if (OrderResponse.orderID == BID2) { BNum2 = OrderResponse.orderNum; } } function Main_OnNotifyFill(NotifyFill) { if (NotifyFill.orderNum == SNum1) { Account1.SetUnfillOrderNumber(SNum2); if (Account1.Unfill.count > 0) Account1.OrderReplacePrice(SNum2, Option.GetBidByCode(Account1.Unfill.code, 5)) } if (NotifyFill.orderNum == SNum2) { Account1.SetUnfillOrderNumber(SNum1); if (Account1.Unfill.count > 0) Account1.OrderReplacePrice(SNum1, Option.GetBidByCode(Account1.Unfill.code, 5)) } if (NotifyFill.orderNum == BNum1) { Account1.SetUnfillOrderNumber(BNum2); if (Account1.Unfill.count > 0) Account1.OrderReplacePrice(BNum2, Option.GetAskByCode(Account1.Unfill.code, 5)) } if (NotifyFill.orderNum == BNum2) { Account1.SetUnfillOrderNumber(BNum1); if (Account1.Unfill.count > 0) Account1.OrderReplacePrice(BNum1, Option.GetAskByCode(Account1.Unfill.code, 5)) } } 즐거운 하루되세요 > 착한이 님이 쓴 글입니다. > 제목 : 수정부탁드려요. > 안녕하세요. 2가지 질문드립니다. 1. 아래는 3.0이하의 델타가 0.5근접하는 콜, 풋 종목입니다. 만기주가 아니라면 근월물, 만기주에는 차월물(가격 3.0 이하, 델타0.5)을 주문할 수 있도록 GetRemainDays 또는 GetRemainDaysByCode 함수를 이용하여 수식을 수정 부탁드립니다. //3.0 이하의 콜옵션종목 찾기 for (var i = -LNum; i <= UNum; i++) { if (Option.GetCurrent(0, i) > 1.0 && Option.GetCurrent(0, i) < 3.0 && Option.GetDelta(0,i) != 0) { CallPrice[i+LNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(0,i))); CallCode[i+LNum] = Option.GetATMCallRecent(i); } else { CallPrice[i+LNum] = 999999; CallCode[i+LNum] = 999999; } } //3.0 이하의 콜옵션종목중 델타가 0.5에 근접하는 종목 찾기 CC = 999999; CallOrderCode = 999999; for (var ii = -LNum; ii <= UNum; ii++) { if (CallPrice[ii+LNum] < CC) { CC = CallPrice[ii+LNum]; CallOrderCode = CallCode[ii+LNum] } } //3.0 이하의 풋옵션종목 찾기 for (var iii = -UNum; iii <= LNum; iii++) { if (Option.GetCurrent(1, iii) > 1.0 && Option.GetCurrent(1, iii) < 3.0 && Option.GetDelta(1,iii) != 0 ) { PutPrice[iii+UNum] = Math.abs(0.5 - Math.abs(Option.GetDelta(1,iii))); PutCode[iii+UNum] = Option.GetATMPutRecent(iii); } else { PutPrice[iii+UNum] = 999999; PutCode[iii+UNum] = 999999; } } //3.0 이하의 풋옵션종목중 델타가 0.5에 근접하는 종목 찾기 PP = 999999; PutOrderCode = 999999; for (var iiii = -UNum; iiii <= LNum; iiii++) { if (PutPrice[iiii+UNum] < PP) { PP = PutPrice[iiii+UNum]; PutOrderCode = PutCode[iiii+UNum]; } } 2. 체결을 보장하기위해, 보통은 매도시 매수5호가, 매수시 매도5호가로 주문하고 있는데, 양매도 전략에서는 콜풋 동시에 매도진입시 각각 매도1호가에 지정가 주문후 둘 중 하나가 전량체결되면 나머지 주문은 시장가(또는 상대5호가)로 수정주문. 환매수시에도 마찬가지로 각각 매수1호가에 지정가 주문후 둘 중 하나가 전량체결되면 시장가(또는 상대5호가)로 수정주문할 수 있도록 아래의 수식을 수정부탁드립니다. Account1.OrderSell(SellCallCode, SellCallCount, Option.GetBidByCode(SellCallCode, 5), 0); Account1.OrderSell(SellPutCode, SellPutCount, Option.GetBidByCode(SellPutCode, 5), 0); Account1.OrderBuy(SellCallCode, SellCallCount, Option.GetAskByCode(SellCallCode, 5), 0); Account1.OrderBuy(SellPutCode, SellPutCount, Option.GetAskByCode(SellPutCode, 5), 0);