커뮤니티

수식 문의합니다.

프로필 이미지
초록이
2016-01-12 12:00:55
1763
글번호 223770
답변완료
당일 아침 9:05분에, 1.0에 가장 가까운 행사가의 콜옵션을 10 계약, 아침 9:05분에 자동매수 하는 수식 부탁합니다. 반대 수식도 부탁드립니다. (풋옵션 9:05분 1.0 근접, 9:05분 10계약 매수) (또한, 상기 콜/풋 식들을 시초가 1.0 근접, 시초가 매수도 함께 부탁합니다.) 그리고, 위와 같이 매수한 옵션을 그 다음날 아침 9:05분에 절반 매도, 또 그 다음날 아침 9:05분에 나머지 절반 매도하고 싶은데, 청산수식도 같이 부탁합니다. (혹시, 위 매수/청산 수식을 한가지로 묶을수 있나요? 가령 수 아침에 매수하고, 목아침 절반매도, 금아침 나머지 절반매도 하는 식으로 말입니다) 한가지만 더 부탁합니다. 위 수식에서 본인이 직접 옵션 행사가를 지정해서 할수는 없읍니까? 가령, 수식에 행사가를 직접 입력하게 하거나, 다른 방법이 가능한지 부탁합니다. 수고하십시요.
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2016-01-19 19:52:15

안녕하세요 예스스탁입니다. 스팟 답변은 간단한 가이드 라인입니다. 수식내용 참고하셔서 수정보완해 사용하시기 바랍니다. 주석 참고하시면 시초가 기준내용도 있습니다. 스크립트 객체화면에서 옵션객체 Option 계좌객체 Account1 로 설정하시면 됩니다. 1. var CallOrderCode,PutOrderCode; var Entry, Exit, BuyCall, BuyPut, Call, Put; function Main_OnStart() { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Entry = false; Exit = false; Call = Main.GetUserValue("Call"); //내부파일에의 Call변수에 종목코드값이 없으면 새로 매수 //코드값이 있으면 매도로 진행 if (Call == "") { BuyCall = true; } else BuyCall = false; Put = Main.GetUserValue("Call"); //내부파일에의 Call변수에 종목코드값이 없으면 새로 매수 //코드값이 있으면 매도로 진행 if (Put == "") { BuyPut = true; } else BuyPut = false; Main.MessageList(HHMMSS,BuyCall,BuyPut) if (HHMMSS < 90500) { //1번 타이머 5초셋팅 Main.SetTimer(1, 5000); Main.MessageList(HHMMSS,"타이머 셋팅") } else { Main.MessageList(HHMMSS,"이미 시간경과해서 수행하지 않음") } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //1번타이머 동작하고 9시 5분 이후 if (nEventID == 1 && HHMMSS >= 90500) { Main.KillTimer(1); if (BuyCall == false) { //Call종목에 대해 잔고셋팅 Account1.SetBalance(Call,0); //수량이 6개 이상이고 매수포지션이면 if (Account1.Balance.count > 5 && Account1.Balance.position == 2) { //5개만 매수3호가로 매도주문 Account1.OrderSell(Account1.Balance.code,5, Option.GetBid(CallOrderCode, 3),0); } //수량이 5개 이하이고 매수포지션이면 if (Account1.Balance.count <= 5 && Account1.Balance.position == 2) { //남은 수량전량 매도 3호가로 매도주문 Account1.OrderSell(Account1.Balance.code,5, Option.GetBid(CallOrderCode, 3),0); //내부변수 Call에 저장된 값을 비움 Main.SetUserValue("Call",""); } } if (BuyPut == false) { //Put종목에 대해 잔고셋팅 Account1.SetBalance(Put,0); //수량이 6개 이상이고 매수포지션이면 if (Account1.Balance.count > 5 && Account1.Balance.position == 2) { //5개만 매수3호가로 매도주문 Account1.OrderSell(Account1.Balance.code,5, Option.GetBid(CallOrderCode, 3),0); } //수량이 5개 이하이고 매수포지션이면 if (Account1.Balance.count <= 5 && Account1.Balance.position == 2) { //남은 수량전량 매도 3호가로 매도주문 Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, Option.GetBid(CallOrderCode, 3),0); //내부변수 Call에 저장된 값을 비움 Main.SetUserValue("Call",""); } } if (BuyCall == true) { //콜옵션중 3.0에 가장 가까운 종목 //콜옵션 모든 종목을 현재가-1.0을 해서 절대값을 취해 저장 var CallCode = new Array(UNum+LNum+1); var CallPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { //시초가 기준이면 Option.GetCurrent(0, i)를 Option.GetOpen(0, i)로 변경 CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-1.0); CallCode[i+LNum] = Option.GetATMCallRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var CC = 99999999; CallOrderCode = ""; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum] } } //콜종목을 찾았으면 매도 3호가로 10계약 매수주문 //내부파일에 콜옵션 코드 저장 if (CC < 99999999) { Account1.OrderBuy(CallOrderCode, 10, Option.GetAsk(CallOrderCode, 3), 0); Main.SetUserValue("Call",CallOrderCode); } } if (BuyPut == true) { //풋옵션중 1.0에 가장 가까운 종목 //풋옵션 모든 종목을 현재가-1.0을 해서 절대값을 취해 저장 var PutCode = new Array(UNum+LNum+1); var PutPrice = new Array(UNum+LNum+1); for (var i = -UNum; i <= LNum; i++) { //시초가 기준이면 Option.GetCurrent(1, i)를 Option.GetOpen(1, i)로 변경 PutPrice[i+UNum] = Math.abs(Option.GetCurrent(1, i)-3.0); PutCode[i+UNum] = Option.GetATMPutRecent(i); } //저장된 절대값중 가장 작은 종목의 값과 종목코드 계산 var PP = 99999999; PutOrderCode = ""; for (var i = -UNum; i <= LNum; i++) { if (PutPrice[i+UNum] < PP) { PP = PutPrice[i+UNum]; PutOrderCode = PutCode[i+UNum]; } } //풋종목을 찾았으면 매수 3호가로 10계약 매수주문 //내부파일에 풋옵션 코드 저장 if (PP < 99999999) { Account1.OrderBuy(PutOrderCode, 10, Option.GetAsk(PutOrderCode, 3), 0); Main.SetUserValue("Put",PutOrderCode); } } } } 2. 행사가 지정 var CallOrderCode,PutOrderCode; var Entry, Exit, BuyCall, BuyPut, Call, Put; function Main_OnStart() { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); Entry = false; Exit = false; Call = Main.GetUserValue("Call"); //내부파일에의 Call변수에 종목코드값이 없으면 새로 매수 //코드값이 있으면 매도로 진행 if (Call == "") { BuyCall = true; } else BuyCall = false; Put = Main.GetUserValue("Call"); //내부파일에의 Call변수에 종목코드값이 없으면 새로 매수 //코드값이 있으면 매도로 진행 if (Put == "") { BuyPut = true; } else BuyPut = false; Main.MessageList(HHMMSS,BuyCall,BuyPut) if (HHMMSS < 90500) { //1번 타이머 5초셋팅 Main.SetTimer(1, 5000); Main.MessageList(HHMMSS,"타이머 셋팅") } else { Main.MessageList(HHMMSS,"이미 시간경과해서 수행하지 않음") } } function Main_OnTimer(nEventID) { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //1번타이머 동작하고 9시 5분 이후 if (nEventID == 1 && HHMMSS >= 90500) { Main.KillTimer(1); if (BuyCall == false) { //Call종목에 대해 잔고셋팅 Account1.SetBalance(Call,0); //수량이 6개 이상이고 매수포지션이면 if (Account1.Balance.count > 5 && Account1.Balance.position == 2) { //5개만 매수3호가로 매도주문 Account1.OrderSell(Account1.Balance.code,5, Option.GetBid(CallOrderCode, 3),0); } //수량이 5개 이하이고 매수포지션이면 if (Account1.Balance.count <= 5 && Account1.Balance.position == 2) { //남은 수량전량 매도 3호가로 매도주문 Account1.OrderSell(Account1.Balance.code,5, Option.GetBid(CallOrderCode, 3),0); //내부변수 Call에 저장된 값을 비움 Main.SetUserValue("Call",""); } } if (BuyPut == false) { //Put종목에 대해 잔고셋팅 Account1.SetBalance(Put,0); //수량이 6개 이상이고 매수포지션이면 if (Account1.Balance.count > 5 && Account1.Balance.position == 2) { //5개만 매수3호가로 매도주문 Account1.OrderSell(Account1.Balance.code,5, Option.GetBid(CallOrderCode, 3),0); } //수량이 5개 이하이고 매수포지션이면 if (Account1.Balance.count <= 5 && Account1.Balance.position == 2) { //남은 수량전량 매도 3호가로 매도주문 Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, Option.GetBid(CallOrderCode, 3),0); //내부변수 Call에 저장된 값을 비움 Main.SetUserValue("Call",""); } } if (BuyCall == true) { //행사가 230 콜 CallOrderCode = Option.GetCodeByExercisePrice(0, 230); if (CallOrderCode != "") { Account1.OrderBuy(CallOrderCode, 10, Option.GetAsk(CallOrderCode, 3), 0); Main.SetUserValue("Call",CallOrderCode); } } if (BuyPut == true) { //행사가 230 풋 PutOrderCode = Option.GetCodeByExercisePrice(1, 230); if (PutOrderCode != "") { Account1.OrderBuy(PutOrderCode, 10, Option.GetAsk(PutOrderCode, 3), 0); Main.SetUserValue("Put",PutOrderCode); } } } } 즐거운 하루되세요 > 초록이 님이 쓴 글입니다. > 제목 : 수식 문의합니다. > 당일 아침 9:05분에, 1.0에 가장 가까운 행사가의 콜옵션을 10 계약, 아침 9:05분에 자동매수 하는 수식 부탁합니다. 반대 수식도 부탁드립니다. (풋옵션 9:05분 1.0 근접, 9:05분 10계약 매수) (또한, 상기 콜/풋 식들을 시초가 1.0 근접, 시초가 매수도 함께 부탁합니다.) 그리고, 위와 같이 매수한 옵션을 그 다음날 아침 9:05분에 절반 매도, 또 그 다음날 아침 9:05분에 나머지 절반 매도하고 싶은데, 청산수식도 같이 부탁합니다. (혹시, 위 매수/청산 수식을 한가지로 묶을수 있나요? 가령 수 아침에 매수하고, 목아침 절반매도, 금아침 나머지 절반매도 하는 식으로 말입니다) 한가지만 더 부탁합니다. 위 수식에서 본인이 직접 옵션 행사가를 지정해서 할수는 없읍니까? 가령, 수식에 행사가를 직접 입력하게 하거나, 다른 방법이 가능한지 부탁합니다. 수고하십시요.