커뮤니티

시초가기준 등가옵션에서

프로필 이미지
파문일기
2014-04-14 11:08:03
1301
글번호 222929
안녕하세요 1. 연결선물 기준으로 시초가 생성시 등가옵션을 구하고, 양옵션의 위아래 행사가 2개씩 포함 콜 5개 풋 5개의 옵션으로 확장챠트를 만듭니다. 2-11번까지의 옵션참조데이타는 일봉을 포함한 종목생성을 한후에 2. 양옵션의 행사가 중심으로 최근 5일전까지의 전일 고가저가를 비교한후, 콜일봉고가와 풋일봉고가가 0.2 이내에 근접한경우 이의 수치를 구하고 일봉저가의 경우도 마찬가지로 수치를 구하고 싶습니다. --> 3. 가장 최근의 것부터 순서대로 수치를 구하고 싶습니다. 감사합니다. var Start; var CallATM; var PutATM; var Nth = 1; var CallObject; var PutObject; var OrderCode; var MarketData1; var CallHigh = new Array(300); var CallLow = new Array(300); var PutHigh = new Array(300); var PutLow = new Array(300); var HHPrice = new Array(100); var LLPrice = new Array(100); var ItemObject = new Array(100);//갯수 var CallItem = new Array(100);//갯수 var PutItem = new Array(100);//갯수 var CoPutItem = new Array(100);//갯수 //스팟 시작시에 function Main_OnStart() { Start = 0; //날자 및 시계계산 var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //코스피200선물에 가장 가까운 콜/풋 종목 선정 var var1 = MarketData1.open;//current;//expectedPrice var var2 = parseInt(var1/10)*10; var var3 = var1%10; var ATM = -1; if (var3 >= 8.75) ATM = var2+10; else if (var3 < 8.75 && var3 >= 6.25) ATM = var2+7.5; else if (var3 < 6.25 && var3 >= 3.75) ATM = var2+5.0; else if (var3 < 3.75 && var3 >= 1.25) ATM = var2+2.5; else ATM = var2+0.0; if (Start == 0 && HHMMSS >= 090000 ) { var UNum = Option.uppersATM; var LNum = Option.lowersATM; //CallATM = -1; for (var i = -LNum; i <= UNum; i++) { if (Option.GetExercisePrice(0, i) == ATM) { CallATM = Option.GetATMCallRecent(i+2,0); CallATM1 = Option.GetATMCallRecent(i+1,0); CallATM2 = Option.GetATMCallRecent(i,0); CallATM3 = Option.GetATMCallRecent(i-1,0); CallATM4 = Option.GetATMCallRecent(i-2,0); } } //PutATM = -1; for (var i = -UNum; i <= LNum; i++) { if (Option.GetExercisePrice(1, i) == ATM) { PutATM = Option.GetATMPutRecent(i-2,0); PutATM1 = Option.GetATMPutRecent(i-1,0); PutATM2 = Option.GetATMPutRecent(i,0); PutATM3 = Option.GetATMPutRecent(i+1,0); PutATM4 = Option.GetATMPutRecent(i+2,0); } } Main.MessageList("콜ATM :",CallATM2 ,"풋ATM :",PutATM2); //확장 차트객체 요청 var ChartSet3 = new ReqChartItem("00000000",1, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //시스템 설정 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,1, 10000000,1, // 자산 0.003, 0.003,CALCMETHOD_PERCENT, // 진입/청산 수수료 0.05, 0.05,CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 1000, //1000, // 최대진입수량 10); // 최대진입횟수 var SystemSet3 = new SystemInfo("OpFuture",YL_TYPE_NORMAL,null,TradeSet,null); //참조데이터 추가 var R31 = new ReqChartItem(CallATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R32 = new ReqChartItem(CallATM1, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R33 = new ReqChartItem(CallATM2, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R34 = new ReqChartItem(CallATM3, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R35 = new ReqChartItem(CallATM4, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R36 = new ReqChartItem(PutATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R37 = new ReqChartItem(PutATM1, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R38 = new ReqChartItem(PutATM2, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R39 = new ReqChartItem(PutATM3, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R40 = new ReqChartItem(PutATM4, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var ReferDataSet3 = new Array(R31,R32,R33,R34,R35,R36,R37,R38,R39,R40); //지정한 설정으로 챠트 생성을 요청 Main.ReqChartEx(ChartSet3,SystemSet3,null,ReferDataSet3); } } //요청한 차트객체 생성이 완료되면 function Main_OnRcvChartEx(ChartEx) { if ( ChartEx.GetCode(1) == MarketData1.code) { ChartEx3 = ChartEx; Start = 1; OrderCode = Main.GetOrderCode(MarketData1.code); if (ChartEx3.GetCode(4) == CallATM2 && ChartEx3.GetCode(9) == PutATM2) { for (var i = 2; i < 12; i++) { Main.ReqMarketData(ChartEx3.GetCode(i),12,0);//CallItem = } } } } function Main_OnRcvMarketData(MarketData) { Main.MessageList("종목객체수신",MarketData.code); for (var i = 2; i < 12; i++) { if (MarketData.code == ChartEx3.GetCode(i)) { Main.MessageList(i,"번째","종목객체생성완료 : ",ChartEx3.GetCode(i)); ItemObject[i] = MarketData; } { if (ItemObject[i] == MarketData && i < 7) { CallItem[i] = MarketData; CoPutItem[i+5] = MarketData; } if (ItemObject[i] == MarketData && i >= 7) { PutItem[i] = MarketData; } } } if (CallItem == MarketData && CoPutItem == MarketData )//&& PutATM2 == MarketData) { for (var ii = 0; ii <= 120; ii++) { for (var iii = 1; iii <= 5; iii++) { CallHigh[ii] = MarketData.GetPrevHigh(iii); CallLow[ii] = MarketData.GetPrevLow(iii); PutHigh[ii] = MarketData.GetPrevHigh(iii); PutLow[ii] = MarketData.GetPrevLow(iii); } } } /* if (CoPutItem == sItemCode && lU*pdateID == 20001) { for (var iii = 1; iii <= 5; iii++) { PutHigh[ii] = MarketData.GetPrevHigh(iii); PutLow[ii] = MarketData.GetPrevLow(iii); } } */ { if (Math.abs(CallHigh[ii]-PutHigh[ii]) <= 0.2 && CallHigh[ii] >= PutHigh[ii]) { HHPrice[ii] = CallHigh[ii]; } else if (Math.abs(CallHigh[ii]-PutHigh[ii]) <= 0.2 && CallHigh[ii] < PutHigh[ii]) { HHPrice[ii] = PutHigh[ii]; } if (Math.abs(CallLow[ii]-PutLow[ii]) <= 0.2 && CallLow[ii] >= PutLow[ii]) { LLPrice[ii] = CallLow[ii]; } else if (Math.abs(CallLow[ii]-PutLow[ii]) <= 0.2 && CallLow[ii] < PutLow[ii]) { LLPrice[ii] = PutLow[ii]; } } Main.MessageList("고저가 :",HHPrice[ii],LLPrice[ii]); }
답변 2
프로필 이미지

파문일기

2014-04-17 20:10:15

> 파문일기 님이 쓴 글입니다. > 제목 : 시초가기준 등가옵션에서 > 안녕하세요 1. 연결선물 기준으로 시초가 생성시 등가옵션을 구하고, 양옵션의 위아래 행사가 2개씩 포함 콜 5개 풋 5개의 옵션으로 확장챠트를 만듭니다. 2-11번까지의 옵션참조데이타는 일봉을 포함한 종목생성을 한후에 2. 양옵션의 행사가 중심으로 최근 5일전까지의 전일 고가저가를 비교한후, 콜일봉고가와 풋일봉고가가 0.2 이내에 근접한경우 이의 수치를 구하고 일봉저가의 경우도 마찬가지로 수치를 구하고 싶습니다. --> 3. 가장 최근의 것부터 순서대로 수치를 구하고 싶습니다. ---------------------------------------- 1. 시초가기준 등가옵션을 위아래 하나씩 확장챠트로 구성, 6개의 참조데이타 2. 최근 6일까지의 전일고가저가 기준으로 양옵션을 비교 --- 요 단계가 맞는지, 않맞는지.. 3. 서로 근접한 수치를 최근것부터 구함. var Start; var CallATM; var PutATM; var Nth = 1; var CallObject; var PutObject; var OrderCode; var MarketData1; var CallHigh = new Array(300); var CallLow = new Array(300); var PutHigh = new Array(300); var PutLow = new Array(300); var HHPrice = new Array(100); var LLPrice = new Array(100); var ItemObject = new Array(100);//갯수 var CallItem = new Array(100);//갯수 var PutItem = new Array(100);//갯수 var CoPutItem = new Array(100);//갯수 //function Main_OnStart() { Start = 0; Nth = 1; //날자 및 시계계산 var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //코스피200선물에 가장 가까운 콜/풋 종목 선정 var var1 = MarketData1.open;//current;//expectedPrice var var2 = parseInt(var1/10)*10; var var3 = var1%10; var ATM = -1; if (var3 >= 8.75) ATM = var2+10; else if (var3 < 8.75 && var3 >= 6.25) ATM = var2+7.5; else if (var3 < 6.25 && var3 >= 3.75) ATM = var2+5.0; else if (var3 < 3.75 && var3 >= 1.25) ATM = var2+2.5; else ATM = var2+0.0; if (Start == 0 && HHMMSS >= 090000 ) { var UNum = Option.uppersATM; var LNum = Option.lowersATM; //CallATM = -1; for (var i = -LNum; i <= UNum; i++) { if (Option.GetExercisePrice(0, i) == ATM) { //CallATM = Option.GetATMCallRecent(i+2,0); CallATM1 = Option.GetATMCallRecent(i+1,0); CallATM2 = Option.GetATMCallRecent(i,0); CallATM3 = Option.GetATMCallRecent(i-1,0); //CallATM4 = Option.GetATMCallRecent(i-2,0); } } //PutATM = -1; for (var i = -UNum; i <= LNum; i++) { if (Option.GetExercisePrice(1, i) == ATM) { //PutATM = Option.GetATMPutRecent(i-2,0); PutATM1 = Option.GetATMPutRecent(i-1,0); PutATM2 = Option.GetATMPutRecent(i,0); PutATM3 = Option.GetATMPutRecent(i+1,0); //PutATM4 = Option.GetATMPutRecent(i+2,0); } } Main.MessageList("콜ATM :",CallATM2 ,"풋ATM :",PutATM2); //확장 차트객체 요청 var ChartSet3 = new ReqChartItem("00000000",1, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //시스템 설정 var TradeSet = new SystemTradeInfo(TRADE_FIXCOUNT,1, 10000000,1, // 자산 0.003, 0.003,CALCMETHOD_PERCENT, // 진입/청산 수수료 0.05, 0.05,CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 1000, //1000, // 최대진입수량 10); // 최대진입횟수 var SystemSet3 = new SystemInfo("OpFuture",YL_TYPE_NORMAL,null,TradeSet,null); //참조데이터 추가 //var R31 = new ReqChartItem(CallATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R31 = new ReqChartItem(CallATM1, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R32 = new ReqChartItem(CallATM2, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R33 = new ReqChartItem(CallATM3, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); //var R35 = new ReqChartItem(CallATM4, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); //var R36 = new ReqChartItem(PutATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R34 = new ReqChartItem(PutATM1, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R35 = new ReqChartItem(PutATM2, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R36 = new ReqChartItem(PutATM3, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); //var R40 = new ReqChartItem(PutATM4, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var ReferDataSet3 = new Array(R31,R32,R33,R34,R35,R36); //지정한 설정으로 챠트 생성을 요청 Main.ReqChartEx(ChartSet3,SystemSet3,null,ReferDataSet3); } } //요청한 차트객체 생성이 완료되면 function Main_OnRcvChartEx(ChartEx) { if ( ChartEx.GetCode(1) == MarketData1.code) { ChartEx3 = ChartEx; Start = 1; OrderCode = Main.GetOrderCode(MarketData1.code); if (ChartEx3.GetCode(3) == CallATM2 && ChartEx3.GetCode(6) == PutATM2) { for (var i = 2; i < 8; i++) { Main.ReqMarketData(ChartEx3.GetCode(i),7,0);//CallItem = } } } } function Main_OnRcvMarketData(MarketData) { Main.MessageList("종목수신",MarketData.code); Nth = Nth +1; if (MarketData.code == ChartEx3.GetCode(Nth)) { Main.MessageList(Nth,"번째","생성완료 : ",ChartEx3.GetCode(Nth)); ItemObject[Nth] = MarketData; } { if (ItemObject[Nth] == MarketData && Nth < 5) { CallItem[Nth] = ItemObject[Nth]; } if (ItemObject[Nth] == MarketData && Nth >= 5) { PutItem[Nth-3] = ItemObject[Nth]; } } for (var j = 1; j <= 6; j++) { if (CallItem == MarketData && PutItem == MarketData) { for (var i = 2; i <= 4; i++) { CallHigh[i,j] = CallItem[i].GetPrevHigh(j); CallLow[i,j] = CallItem[i].GetPrevLow(j); PutHigh[i,j] = PutItem[i].GetPrevHigh(j); PutLow[i,j] = PutItem[i].GetPrevLow(j); } } { Main.MessageList("종완료 : ",CallHigh[i,j],CallLow[i,j],PutHigh[i,j],PutLow[i,j]); if (Math.abs(CallHigh[i,j]-PutHigh[i,j]) <= 0.2 && CallHigh[i,j] >= PutHigh[i,j]) { HHPrice[i,j] = CallHigh[i,j]; } else if (Math.abs(CallHigh[i,j]-PutHigh[i,j]) <= 0.2 && CallHigh[i,j] < PutHigh[i,j]) { HHPrice[i,j] = PutHigh[i,j]; } if (Math.abs(CallLow[i,j]-PutLow[i,j]) <= 0.2 && CallLow[i,j] >= PutLow[i,j]) { LLPrice[i,j] = CallLow[i,j]; } else if (Math.abs(CallLow[i,j]-PutLow[i,j]) <= 0.2 && CallLow[i,j] < PutLow[i,j]) { LLPrice[i,j] = PutLow[i,j]; } } } Main.MessageList("고저가 :",HHPrice[i,j],LLPrice[i,j]); }
프로필 이미지

파문일기

2014-04-23 15:05:02

---------------------------------------- i와 j 두 변수에 따른 수치를 잡아주지 못하네요. for (var j = 1; j <= 5; j++)//일간고가 { if (CallItem == MarketData && PutItem == MarketData) { for (var i = 2; i <= 4; i++)//행사가 { CallHigh[i,j] = CallItem[i].GetPrevHigh(j); CallLow[i,j] = CallItem[i].GetPrevLow(j); PutHigh[i,j] = PutItem[i].GetPrevHigh(j); PutLow[i,j] = PutItem[i].GetPrevLow(j); } } //for (var j = 5; j >= 1; j--) { Main.MessageList("종완료 : ",CallHigh[i,j],CallLow[i,j],PutHigh[i,j],PutLow[i,j]); if (Math.abs(CallHigh[i,j]-PutHigh[i,j]) <= 0.2 && CallHigh[i,j] >= PutHigh[i,j]) { HHPrice[i,j] = CallHigh[i,j]; } else if (Math.abs(CallHigh[i,j]-PutHigh[i,j]) <= 0.2 && CallHigh[i,j] < PutHigh[i,j]) { HHPrice[i,j] = PutHigh[i,j]; } if (Math.abs(CallLow[i,j]-PutLow[i,j]) <= 0.2 && CallLow[i,j] >= PutLow[i,j]) { LLPrice[i,j] = CallLow[i,j]; } else if (Math.abs(CallLow[i,j]-PutLow[i,j]) <= 0.2 && CallLow[i,j] < PutLow[i,j]) { LLPrice[i,j] = PutLow[i,j]; } } } Main.MessageList("고저중심가 :",HHPrice[i,j],LLPrice[i,j]);