커뮤니티

오버잔고가 있을시 확장챠트 구성

프로필 이미지
파문일기
2014-05-31 16:55:31
1264
글번호 223004
답변완료
안녕하세요 콜옵션과 대항 풋옵션 255-255 풋옵션과 대항 콜옵션.. 으로 확장챠트 구성. 잔고가 없을때는 위의 구성으로 오버잔고가 있을시는 잔고의 구분에 따라 오버 옵션의 콜풋으로 주종목을 구성하고 싶습니다 감사합니다. var Start; var S1, S2; var OrderCode1; var OrderCode2; var P1; var AvgCost; var PLsum; var Nth = 0; var ItemCode = new Array(100);//갯수 var ItemObject = new Array(100);//갯수 var ItemHigh = new Array(100);//갯수 var ItemLow = new Array(100);//갯수 var Balnum; var UNum; var LNum; var CallCode; var CallPrice; var CallATM; var PutATM; var PutCode; var PutPrice; var CoCall; var CoPut; var CC; var PP; var vol1; var vol3; var vol4; var vol5; var vol2; var vol6; var vol7; var CaBuyID, CaSellID; var CBcond, CScond; var CaBuyNum, CaSellNum; var PuBuyID, PuSellID; var PBcond, PScond; var PuBuyNum, PuSellNum; var BFill,SFill; var CallStart; var PutStart; var ChartEx11 ;//= null; var ChartEx12 ;//= null; function Main_OnStart() { Start = 0; Main.MessageList("시 작:"); Nth = 0; Balnum = Account1.GetTheNumberOfBalances() Main.MessageList("잔고종목수",Balnum); if (Balnum > 0) { //계좌의 잔고리스트에서 첫번째 잔고 셋팅 Account1.SetBalanceIndex(Nth);//잔고는 순번이 0부터 시작 //셋팅된 잔고의 수량이 0이상이면 if (Account1.Balance.count > 0) { //1번째 종목객체 생성요청 Main.ReqMarketData(Account1.Balance.code, 20,0); //ItemCode의 [Nth]번째 방에 종목코드 저장 ItemCode[Nth] = Account1.Balance.code; Main.MessageList("종목요청",Account1.Balance.code); } if (Account1.Balance.categoryEx == 31 ) CallOrderCode = Account1.Balance.code; if (Account1.Balance.categoryEx == 32 ) PutOrderCode = Account1.Balance.code; } //코스피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); if (Balnum == 0 || Account1.Balance.categoryEx != 31) { 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]; } } } if (Balnum == 0 || Account1.Balance.categoryEx != 32) { 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과 가장 가까운 콜의 반대 옵션종목 CoPut = Option.GetCodeByExercisePrice(1,Option.GetExercisePrice(CallOrderCode)); CoCall = Option.GetCodeByExercisePrice(0,Option.GetExercisePrice(PutOrderCode)); Main.MessageList("2.0근접콜",CallOrderCode,"콜반대",CoPut,"2.0근접풋",PutOrderCode,"풋반대",CoCall); //확장 차트객체 요청 //주종목 시가기준 콜 var ChartSet4 = new ReqChartItem(CallOrderCode,3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); var ChartSet5 = new ReqChartItem(PutOrderCode,3, 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("Opover",YL_TYPE_NORMAL,null,TradeSet4,null); //지표 설정 I1 = new IndicatorInfo("중심", YL_TYPE_NORMAL,new Array(new YLInputVar(null,null))); var IndicatorSet4 = new Array(I1); //참조데이터 추가 //data2 2.0 근접콜 var R31 = new ReqChartItem(CallOrderCode, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //data3 2.0 근접콜 반대종목 var R32 = new ReqChartItem(CoPut, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //data4 3.0 근접풋 var R33 = new ReqChartItem(PutOrderCode, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //data4 3.0 근접풋 반대종목 var R34 = new ReqChartItem(CoCall, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); var ReferDataSet4 = new Array(R32); var ReferDataSet5 = new Array(R34); //지정한 설정으로 챠트 생성을 요청 Main.ReqChartEx(ChartSet4, SystemSet4, IndicatorSet4, ReferDataSet4); Main.ReqChartEx(ChartSet5, SystemSet4, IndicatorSet4, ReferDataSet5); } function Main_OnU*pdateAccount(sAccntNum, sItemCode, lU*pdateID) { //계좌에 변동이 생기면 if (sAccntNum == Account1.number && (lU*pdateID == 30001 )) { Account1.SetBalanceIndex(Nth);//잔고는 순번이 0부터 시작 //Nth번째 종목객체 생성요청 Main.ReqMarketData(Account1.Balance.code,20,0); //ItemCode의 [Nth]번째 방에 종목코드 저장 ItemCode[Nth] = Account1.Balance.code; Main.MessageList("종목요청",Account1.Balance.code); } } //요청한 종목객체 수신되면 function Main_OnRcvMarketData(MarketData) { Main.MessageList("종목객체수신",MarketData.code); //수신받은 종목객체의 종목코드와 직전에 요청한 종목과 같은지 확인 후에 if (MarketData.code == ItemCode[Nth]) { Main.MessageList(Nth,"번째","종목객체생성완료 : ",ItemCode[Nth]); ItemObject[Nth] = MarketData;//ItemObject의 [Nth]방에 수신받은 객체를 저장 ItemHigh[Nth] = 0; //ItemHigh의 [Nth]방의 값을 0으로 셋팅 (이후 최고값 계산해 저장할 변수) ItemLow[Nth] = 99999; //ItemHigh의 [Nth]방의 값을 0으로 셋팅 (이후 최저값 계산해 저장할 변수) Nth = Nth+1; //종목객체 수신완료되면 다음 종목 종목객체 요청 if (Balnum > 0) { //계좌의 잔고리스트에서 다음 순번 잔고 셋팅 Account1.SetBalanceIndex(Nth); //셋팅된 잔고의 수량이 0이상이면 if (Account1.Balance.count > 0) { //Nth번째 종목객체 생성요청 Main.ReqMarketData(Account1.Balance.code, 0,0); //ItemCode의 [Nth]번째 방에 종목코드 저장 ItemCode[Nth] = Account1.Balance.code; Main.MessageList("종목요청",Account1.Balance.code); } } } } //요청한 차트객체 생성이 완료되면 function Main_OnRcvChartEx(ChartEx) { if ( ChartEx.GetCode(1) == CallOrderCode) { ChartEx4 = ChartEx; OrderCode1 = Main.GetOrderCode(ChartEx4.GetCode(1));//ATM단위로 사용할때 Main.MessageList("Cx코드 :",ChartEx4.GetCode(1)); } if ( ChartEx.GetCode(1) == PutOrderCode) { ChartEx5 = ChartEx; OrderCode2 = Main.GetOrderCode(ChartEx5.GetCode(1));//ATM단위로 사용할때 Main.MessageList("Px코드 :",ChartEx5.GetCode(1)); } Start = 1; }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2014-06-16 18:15:44

안녕하세요 예스스탁입니다,. 답변이 늦어져 죄송합니다. 내일 편하신 시간에 02-3453-1060으로 전화주시기 바랍니다. 확인할 내용이 있습니다. 즐거운 하루되세요 > 파문일기 님이 쓴 글입니다. > 제목 : 오버잔고가 있을시 확장챠트 구성 > 안녕하세요 콜옵션과 대항 풋옵션 255-255 풋옵션과 대항 콜옵션.. 으로 확장챠트 구성. 잔고가 없을때는 위의 구성으로 오버잔고가 있을시는 잔고의 구분에 따라 오버 옵션의 콜풋으로 주종목을 구성하고 싶습니다 감사합니다. var Start; var S1, S2; var OrderCode1; var OrderCode2; var P1; var AvgCost; var PLsum; var Nth = 0; var ItemCode = new Array(100);//갯수 var ItemObject = new Array(100);//갯수 var ItemHigh = new Array(100);//갯수 var ItemLow = new Array(100);//갯수 var Balnum; var UNum; var LNum; var CallCode; var CallPrice; var CallATM; var PutATM; var PutCode; var PutPrice; var CoCall; var CoPut; var CC; var PP; var vol1; var vol3; var vol4; var vol5; var vol2; var vol6; var vol7; var CaBuyID, CaSellID; var CBcond, CScond; var CaBuyNum, CaSellNum; var PuBuyID, PuSellID; var PBcond, PScond; var PuBuyNum, PuSellNum; var BFill,SFill; var CallStart; var PutStart; var ChartEx11 ;//= null; var ChartEx12 ;//= null; function Main_OnStart() { Start = 0; Main.MessageList("시 작:"); Nth = 0; Balnum = Account1.GetTheNumberOfBalances() Main.MessageList("잔고종목수",Balnum); if (Balnum > 0) { //계좌의 잔고리스트에서 첫번째 잔고 셋팅 Account1.SetBalanceIndex(Nth);//잔고는 순번이 0부터 시작 //셋팅된 잔고의 수량이 0이상이면 if (Account1.Balance.count > 0) { //1번째 종목객체 생성요청 Main.ReqMarketData(Account1.Balance.code, 20,0); //ItemCode의 [Nth]번째 방에 종목코드 저장 ItemCode[Nth] = Account1.Balance.code; Main.MessageList("종목요청",Account1.Balance.code); } if (Account1.Balance.categoryEx == 31 ) CallOrderCode = Account1.Balance.code; if (Account1.Balance.categoryEx == 32 ) PutOrderCode = Account1.Balance.code; } //코스피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); if (Balnum == 0 || Account1.Balance.categoryEx != 31) { 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]; } } } if (Balnum == 0 || Account1.Balance.categoryEx != 32) { 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과 가장 가까운 콜의 반대 옵션종목 CoPut = Option.GetCodeByExercisePrice(1,Option.GetExercisePrice(CallOrderCode)); CoCall = Option.GetCodeByExercisePrice(0,Option.GetExercisePrice(PutOrderCode)); Main.MessageList("2.0근접콜",CallOrderCode,"콜반대",CoPut,"2.0근접풋",PutOrderCode,"풋반대",CoCall); //확장 차트객체 요청 //주종목 시가기준 콜 var ChartSet4 = new ReqChartItem(CallOrderCode,3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); var ChartSet5 = new ReqChartItem(PutOrderCode,3, 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("Opover",YL_TYPE_NORMAL,null,TradeSet4,null); //지표 설정 I1 = new IndicatorInfo("중심", YL_TYPE_NORMAL,new Array(new YLInputVar(null,null))); var IndicatorSet4 = new Array(I1); //참조데이터 추가 //data2 2.0 근접콜 var R31 = new ReqChartItem(CallOrderCode, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //data3 2.0 근접콜 반대종목 var R32 = new ReqChartItem(CoPut, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //data4 3.0 근접풋 var R33 = new ReqChartItem(PutOrderCode, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //data4 3.0 근접풋 반대종목 var R34 = new ReqChartItem(CoCall, 3, CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); var ReferDataSet4 = new Array(R32); var ReferDataSet5 = new Array(R34); //지정한 설정으로 챠트 생성을 요청 Main.ReqChartEx(ChartSet4, SystemSet4, IndicatorSet4, ReferDataSet4); Main.ReqChartEx(ChartSet5, SystemSet4, IndicatorSet4, ReferDataSet5); } function Main_OnU*pdateAccount(sAccntNum, sItemCode, lU*pdateID) { //계좌에 변동이 생기면 if (sAccntNum == Account1.number && (lU*pdateID == 30001 )) { Account1.SetBalanceIndex(Nth);//잔고는 순번이 0부터 시작 //Nth번째 종목객체 생성요청 Main.ReqMarketData(Account1.Balance.code,20,0); //ItemCode의 [Nth]번째 방에 종목코드 저장 ItemCode[Nth] = Account1.Balance.code; Main.MessageList("종목요청",Account1.Balance.code); } } //요청한 종목객체 수신되면 function Main_OnRcvMarketData(MarketData) { Main.MessageList("종목객체수신",MarketData.code); //수신받은 종목객체의 종목코드와 직전에 요청한 종목과 같은지 확인 후에 if (MarketData.code == ItemCode[Nth]) { Main.MessageList(Nth,"번째","종목객체생성완료 : ",ItemCode[Nth]); ItemObject[Nth] = MarketData;//ItemObject의 [Nth]방에 수신받은 객체를 저장 ItemHigh[Nth] = 0; //ItemHigh의 [Nth]방의 값을 0으로 셋팅 (이후 최고값 계산해 저장할 변수) ItemLow[Nth] = 99999; //ItemHigh의 [Nth]방의 값을 0으로 셋팅 (이후 최저값 계산해 저장할 변수) Nth = Nth+1; //종목객체 수신완료되면 다음 종목 종목객체 요청 if (Balnum > 0) { //계좌의 잔고리스트에서 다음 순번 잔고 셋팅 Account1.SetBalanceIndex(Nth); //셋팅된 잔고의 수량이 0이상이면 if (Account1.Balance.count > 0) { //Nth번째 종목객체 생성요청 Main.ReqMarketData(Account1.Balance.code, 0,0); //ItemCode의 [Nth]번째 방에 종목코드 저장 ItemCode[Nth] = Account1.Balance.code; Main.MessageList("종목요청",Account1.Balance.code); } } } } //요청한 차트객체 생성이 완료되면 function Main_OnRcvChartEx(ChartEx) { if ( ChartEx.GetCode(1) == CallOrderCode) { ChartEx4 = ChartEx; OrderCode1 = Main.GetOrderCode(ChartEx4.GetCode(1));//ATM단위로 사용할때 Main.MessageList("Cx코드 :",ChartEx4.GetCode(1)); } if ( ChartEx.GetCode(1) == PutOrderCode) { ChartEx5 = ChartEx; OrderCode2 = Main.GetOrderCode(ChartEx5.GetCode(1));//ATM단위로 사용할때 Main.MessageList("Px코드 :",ChartEx5.GetCode(1)); } Start = 1; }