커뮤니티

챠트 세팅

프로필 이미지
파문일기
2014-05-17 15:44:01
860
글번호 222982
답변완료
안녕하세요. 선물 시가기준 양옵션을 구한후 콜풋 2.0대의 옵션을 기준옵션으로 상대콜풋 옵션을 구하고 싶습니다 가령 콜 265 의 가격이 2.0에 근접, 상대 풋 265를 참고 데이타로 설정 풋 260의 상대로 콜 260의 옵션을 참조 데이타로 설정하는 확장 챠트. 아래의 수식에서는 콜을 기준으로 CoPut(상대옵션)의 행사가를 구하는게..... 감사합니다 var Start; var UNum; var LNum; var Num = 0; var CallCode; var CallPrice; var CoPut; var CallATM; var PutATM; var PutCode; var PutPrice; var CC; var PP; var PLsum; var CallOrderCode; var PutOrderCode; var OrderCode; var CallStart; var PutStart; var ChartEx1 ;//= null; var ChartEx4 ;//= null; var Nth = 0; var ItemCode = new Array(100);//갯수 var ItemObject = new Array(100);//갯수 var ItemHigh = new Array(100);//갯수 var ItemLow = new Array(100);//갯수 function Main_OnStart() { Start = 0; vol1 = 0; vol2 = 0; CallStart = 0; PutStart = 0; Main.MessageList("시 작"); var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시 5분에 if (Start == 0 && HHMMSS >= 085500)// && HHMMSS >= 90030 { Start = 1; UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.3); CallCode[i+LNum] = Option.GetATMCallRecent(i); } CC = 99999999; // CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum]; } if (CallOrderCode == CallCode[i+LNum]) { CallOrderCode1 = CallCode[i+LNum-1]; CallOrderCode2 = CallCode[i+LNum+1]; CallOrderCode3 = CallCode[i+LNum+2]; } } for (var ii = -UNum; ii <= LNum; ii++) { PutPrice[ii+UNum] = Math.abs(Option.GetCurrent(1, ii)-2.3); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } PP = 99999999; // PutOrderCode = -1; for (var ii = -UNum; ii < LNum; ii++) { if (PutPrice[ii+UNum] <= PP) { PP = PutPrice[ii+UNum]; PutOrderCode = PutCode[ii+UNum]; } if (PutOrderCode == PutCode[ii+UNum]) { PutOrderCode1 = PutCode[ii+UNum-1]; PutOrderCode2 = PutCode[ii+UNum+1]; PutOrderCode3 = PutCode[ii+UNum+2]; PutOrderCode4 = PutCode[ii+UNum+3]; } } Main.MessageList("콜",CallOrderCode ,"풋",PutOrderCode); //코스피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; //CallATM = -1; for (var j = -LNum; j <= UNum; j++) { if (Option.GetExercisePrice(0, j) == ATM) { CallATM = Option.GetATMCallRecent(j,0); CallOrderCode = Option.GetATMCallRecent(j-Num,0); } } //PutATM = -1; for (var j = -UNum; j <= LNum; j++) { if (Option.GetExercisePrice(1, j) == ATM) { PutATM = Option.GetATMPutRecent(j,0); CoPut = Option.GetATMPutRecent(j-Num,0); } } Main.MessageList("콜ATM :",CallATM ,"풋ATM :",PutATM,"상대옵션 :",CoPut); //확장 차트객체 요청 var ChartSet4 = new ReqChartItem(CallOrderCode,2, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //시스템 설정 var TradeSet4 = new SystemTradeInfo(TRADE_FIXCAPITAL,1, 10000000,1, // 자산 0.07, 0.07,CALCMETHOD_PERCENT, // 진입/청산 수수료 0.01, 0.01,CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 50, //1000, // 최대진입수량 10); // 최대진입횟수 var SystemSet4 = new SystemInfo("Opover1",YL_TYPE_NORMAL,null,TradeSet4,null); //참조데이터 추가 var R31 = new ReqChartItem(CoPut, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R32 = new ReqChartItem(CallATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R33 = new ReqChartItem(PutATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var ReferDataSet4 = new Array(R31,R32,R33); //지정한 설정으로 챠트 생성을 요청 Main.ReqChartEx(ChartSet4, SystemSet4, null, ReferDataSet4); } } //요청한 차트객체 생성이 완료되면 function Main_OnRcvChartEx(ChartEx) { if ( ChartEx.GetCode(2) == CoPut) { ChartEx4 = ChartEx; OrderCode = Main.GetOrderCode(ChartEx4.GetCode(1));//ATM단위로 사용할때 Main.MessageList("CoPut코드",ChartEx4.GetCode(2)); } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-05-21 11:04:41

안녕하세요 예스스탁입니다. 옵션객체의 함수중에 아래함수 이용하시면 쉽게 종목을 지정할수 있습니다 //행사가를 지정해 종목코드를 반환 Option.GetCodeByExercisePrice //종목코드를 지정해 행사가를 반환 Option.GetExercisePrice 수식에서 2.0에 가장 근접한 콜과 풋의 종목코드를 CallOrderCode,PutOrderCode으로 저장하므로 Option.GetExercisePrice를 이용해 행사가를 리턴받아 Option.GetCodeByExercisePrice에 넣으시면 반대옵션 종목의 코드를 쉽게 리턴받으실수 있습니다. 아래식 참고하시기 바랍니다. 차트는 어떻게 구성하시는지 정확치 않아 선물시가기준 ATM콜 종목을 메인으로 2.0근접콜/풋과 반대종목이 참조데이터로 되게 설정했습니다. var Start; var UNum; var LNum; var Num = 0; var CallCode; var CallPrice; var CoCall; var CoPut; var CallATM; var PutATM; var PutCode; var PutPrice; var CC; var PP; var PLsum; var CallOrderCode; var PutOrderCode; var OrderCode; var CallStart; var PutStart; var ChartEx1 ;//= null; var ChartEx4 ;//= null; var Nth = 0; var ItemCode = new Array(100);//갯수 var ItemObject = new Array(100);//갯수 var ItemHigh = new Array(100);//갯수 var ItemLow = new Array(100);//갯수 function Main_OnStart() { Start = 0; vol1 = 0; vol2 = 0; CallStart = 0; PutStart = 0; Main.MessageList("시 작"); } function Main_OnUp*dateMarket(sItemCode, lUp*dateID)//*제거 { var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (Start == 0 && MarketData1.open > 0)// && HHMMSS >= 90030 { Start = 1; //코스피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; CallATM = Option.GetCodeByExercisePrice(0, ATM); PutATM = Option.GetCodeByExercisePrice(1, ATM); Main.MessageList("선물시가 :",MarketData1.open,"ATM",ATM,"콜ATM :",CallATM ,"풋ATM :",PutATM); //2.0에 가장 가까운 콜/풋 종목 UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.0); CallCode[i+LNum] = Option.GetATMCallRecent(i); } CC = 99999999; CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum]; } if (CallOrderCode == CallCode[i+LNum]) { CallOrderCode1 = CallCode[i+LNum-1]; CallOrderCode2 = CallCode[i+LNum+1]; CallOrderCode3 = CallCode[i+LNum+2]; } } for (var ii = -UNum; ii <= LNum; ii++) { PutPrice[ii+UNum] = Math.abs(Option.GetCurrent(1, ii)-2.0); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } PP = 99999999; PutOrderCode = -1; for (var ii = -UNum; ii < LNum; ii++) { if (PutPrice[ii+UNum] <= PP) { PP = PutPrice[ii+UNum]; PutOrderCode = PutCode[ii+UNum]; } if (PutOrderCode == PutCode[ii+UNum]) { PutOrderCode1 = PutCode[ii+UNum-1]; PutOrderCode2 = PutCode[ii+UNum+1]; PutOrderCode3 = PutCode[ii+UNum+2]; PutOrderCode4 = PutCode[ii+UNum+3]; } } //2.0과 가장 가까운 콜의 반대 옵션종목 CoCall = Option.GetCodeByExercisePrice(1,Option.GetExercisePrice(CallOrderCode)); CoPut = Option.GetCodeByExercisePrice(0,Option.GetExercisePrice(PutOrderCode)); Main.MessageList("2.0근접콜",CallOrderCode,"콜반대",CoCall,"2.0근접풋",PutOrderCode,"풋반대",CoPut); //확장 차트객체 요청 //주종목 시가기준 콜 var ChartSet4 = new ReqChartItem(CallATM,2, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //시스템 설정 var TradeSet4 = new SystemTradeInfo(TRADE_FIXCAPITAL,1, 10000000,1, // 자산 0.07, 0.07,CALCMETHOD_PERCENT, // 진입/청산 수수료 0.01, 0.01,CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 50, //1000, // 최대진입수량 10); // 최대진입횟수 var SystemSet4 = new SystemInfo("Opover1",YL_TYPE_NORMAL,null,TradeSet4,null); //참조데이터 추가 //data2 2.0 근접콜 var R31 = new ReqChartItem(CallOrderCode, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); //data3 2.0 근접콜 반대종목 var R32 = new ReqChartItem(CoCall, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); //data4 3.0 근접풋 var R33 = new ReqChartItem(PutOrderCode, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); //data4 3.0 근접풋 반대종목 var R34 = new ReqChartItem(CoPut, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var ReferDataSet4 = new Array(R31,R32,R33,R34); //지정한 설정으로 챠트 생성을 요청 Main.ReqChartEx(ChartSet4, SystemSet4, null, ReferDataSet4); } } //요청한 차트객체 생성이 완료되면 function Main_OnRcvChartEx(ChartEx) { if ( ChartEx.GetCode(2) == CoPut) { ChartEx4 = ChartEx; OrderCode = Main.GetOrderCode(ChartEx4.GetCode(1));//ATM단위로 사용할때 Main.MessageList("CoPut코드",ChartEx4.GetCode(2)); } } 즐거운 하루되세요 > 파문일기 님이 쓴 글입니다. > 제목 : 챠트 세팅 > 안녕하세요. 선물 시가기준 양옵션을 구한후 콜풋 2.0대의 옵션을 기준옵션으로 상대콜풋 옵션을 구하고 싶습니다 가령 콜 265 의 가격이 2.0에 근접, 상대 풋 265를 참고 데이타로 설정 풋 260의 상대로 콜 260의 옵션을 참조 데이타로 설정하는 확장 챠트. 아래의 수식에서는 콜을 기준으로 CoPut(상대옵션)의 행사가를 구하는게..... 감사합니다 var Start; var UNum; var LNum; var Num = 0; var CallCode; var CallPrice; var CoPut; var CallATM; var PutATM; var PutCode; var PutPrice; var CC; var PP; var PLsum; var CallOrderCode; var PutOrderCode; var OrderCode; var CallStart; var PutStart; var ChartEx1 ;//= null; var ChartEx4 ;//= null; var Nth = 0; var ItemCode = new Array(100);//갯수 var ItemObject = new Array(100);//갯수 var ItemHigh = new Array(100);//갯수 var ItemLow = new Array(100);//갯수 function Main_OnStart() { Start = 0; vol1 = 0; vol2 = 0; CallStart = 0; PutStart = 0; Main.MessageList("시 작"); var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); //9시 5분에 if (Start == 0 && HHMMSS >= 085500)// && HHMMSS >= 90030 { Start = 1; UNum = Option.uppersATM; LNum = Option.lowersATM; CallCode = new Array(UNum+LNum+1); PutCode = new Array(UNum+LNum+1); CallPrice = new Array(UNum+LNum+1); PutPrice = new Array(UNum+LNum+1); for (var i = -LNum; i <= UNum; i++) { CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-2.3); CallCode[i+LNum] = Option.GetATMCallRecent(i); } CC = 99999999; // CallOrderCode = -1; for (var i = -LNum; i <= UNum; i++) { if (CallPrice[i+LNum] < CC) { CC = CallPrice[i+LNum]; CallOrderCode = CallCode[i+LNum]; } if (CallOrderCode == CallCode[i+LNum]) { CallOrderCode1 = CallCode[i+LNum-1]; CallOrderCode2 = CallCode[i+LNum+1]; CallOrderCode3 = CallCode[i+LNum+2]; } } for (var ii = -UNum; ii <= LNum; ii++) { PutPrice[ii+UNum] = Math.abs(Option.GetCurrent(1, ii)-2.3); PutCode[ii+UNum] = Option.GetATMPutRecent(ii); } PP = 99999999; // PutOrderCode = -1; for (var ii = -UNum; ii < LNum; ii++) { if (PutPrice[ii+UNum] <= PP) { PP = PutPrice[ii+UNum]; PutOrderCode = PutCode[ii+UNum]; } if (PutOrderCode == PutCode[ii+UNum]) { PutOrderCode1 = PutCode[ii+UNum-1]; PutOrderCode2 = PutCode[ii+UNum+1]; PutOrderCode3 = PutCode[ii+UNum+2]; PutOrderCode4 = PutCode[ii+UNum+3]; } } Main.MessageList("콜",CallOrderCode ,"풋",PutOrderCode); //코스피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; //CallATM = -1; for (var j = -LNum; j <= UNum; j++) { if (Option.GetExercisePrice(0, j) == ATM) { CallATM = Option.GetATMCallRecent(j,0); CallOrderCode = Option.GetATMCallRecent(j-Num,0); } } //PutATM = -1; for (var j = -UNum; j <= LNum; j++) { if (Option.GetExercisePrice(1, j) == ATM) { PutATM = Option.GetATMPutRecent(j,0); CoPut = Option.GetATMPutRecent(j-Num,0); } } Main.MessageList("콜ATM :",CallATM ,"풋ATM :",PutATM,"상대옵션 :",CoPut); //확장 차트객체 요청 var ChartSet4 = new ReqChartItem(CallOrderCode,2, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //시스템 설정 var TradeSet4 = new SystemTradeInfo(TRADE_FIXCAPITAL,1, 10000000,1, // 자산 0.07, 0.07,CALCMETHOD_PERCENT, // 진입/청산 수수료 0.01, 0.01,CALCMETHOD_POINT, // 진입/청산 슬리피지 PYRAMIDING_ENTRY, // 피라미딩 설정여부 50, //1000, // 최대진입수량 10); // 최대진입횟수 var SystemSet4 = new SystemInfo("Opover1",YL_TYPE_NORMAL,null,TradeSet4,null); //참조데이터 추가 var R31 = new ReqChartItem(CoPut, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R32 = new ReqChartItem(CallATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var R33 = new ReqChartItem(PutATM, 2, CHART_PERIOD_MINUTE, 2500, CHART_REQCOUNT_BAR, false, false); var ReferDataSet4 = new Array(R31,R32,R33); //지정한 설정으로 챠트 생성을 요청 Main.ReqChartEx(ChartSet4, SystemSet4, null, ReferDataSet4); } } //요청한 차트객체 생성이 완료되면 function Main_OnRcvChartEx(ChartEx) { if ( ChartEx.GetCode(2) == CoPut) { ChartEx4 = ChartEx; OrderCode = Main.GetOrderCode(ChartEx4.GetCode(1));//ATM단위로 사용할때 Main.MessageList("CoPut코드",ChartEx4.GetCode(2)); } }