예스스팟 옵션 챠트 자동 갱신 및 데이터 추출 관련 문의 입니다.
앞전에 주신 소스 입니다.var ATM변경 = 2; //2행사가 변경var OP,ATM,CT;var F;var C1,C2,C3,C4,C5;var P1,P2,P3,P4,P5;function Main_OnStart(){ var D1 = Option1.GetRemainDays(0, 0); var D2 = Option2.GetRemainDays(0, 0); var D3 = Option3.GetRemainDays(0, 0); Main.MessageList("Month",D1); Main.MessageList("Week월",D2); Main.MessageList("Week목",D3); OP = 1; if (D2 < D1) OP = 2; if (D3 < D1) OP = 3; ATM = 0; Main.MessageList("OP",OP); Main.SetTimer(1,5000);}function Main_OnTimer(nEventID){ if (nEventID == 1) { var Change = false; if (OP == 1) { curATM = Option1.GetExercisePrice(0,2); if (curATM >= ATM+(2.5*ATM변경) || curATM <= ATM-(2.5*ATM변경)) { Main.MessageList("ATM변경",curATM,ATM); ATM = curATM; Change = true; F = "00000000"; C1 = Option1.GetCodeByExercisePrice(0,ATM); C2 = Option1.GetCodeByExercisePrice(0,ATM+2.5); C3 = Option1.GetCodeByExercisePrice(0,ATM+5.0); C4 = Option1.GetCodeByExercisePrice(0,ATM+7.5); C5 = Option1.GetCodeByExercisePrice(0,ATM+10.0); P1 = Option1.GetCodeByExercisePrice(1,ATM); P2 = Option1.GetCodeByExercisePrice(1,ATM-2.5); P3 = Option1.GetCodeByExercisePrice(1,ATM-5.0); P4 = Option1.GetCodeByExercisePrice(1,ATM-7.5); P5 = Option1.GetCodeByExercisePrice(1,ATM-10.0); Main.MessageList("OP1",C1,C2,C3,C4,C5); Main.MessageList("OP1",P1,P2,P3,P4,P5); } } if (OP == 2) { curATM = Option2.GetExercisePrice(0,2); if (curATM >= ATM+(2.5*ATM변경) || curATM <= ATM-(2.5*ATM변경)) { Main.MessageList("ATM변경",curATM,ATM,ATM+2.5,ATM+5.0,ATM+7.5); ATM = curATM; Change = true; F = "00000000"; C1 = Option2.GetCodeByExercisePrice(0,ATM); C2 = Option2.GetCodeByExercisePrice(0,ATM+2.5); C3 = Option2.GetCodeByExercisePrice(0,ATM+5.0); C4 = Option2.GetCodeByExercisePrice(0,ATM+7.5); C5 = Option2.GetCodeByExercisePrice(0,ATM+10.0); P1 = Option2.GetCodeByExercisePrice(1,ATM); P2 = Option2.GetCodeByExercisePrice(1,ATM-2.5); P3 = Option2.GetCodeByExercisePrice(1,ATM-5.0); P4 = Option2.GetCodeByExercisePrice(1,ATM-7.5); P5 = Option2.GetCodeByExercisePrice(1,ATM-10.0); Main.MessageList("OP2",C1,C2,C3,C4,C5); Main.MessageList("OP2",P1,P2,P3,P4,P5); } } if (OP == 3) { curATM = Option3.GetExercisePrice(0,2); if (curATM >= ATM+(2.5*ATM변경) || curATM <= ATM-(2.5*ATM변경)) { Main.MessageList("ATM변경",curATM,ATM); ATM = curATM; Change = true; F = "00000000"; C1 = Option3.GetCodeByExercisePrice(0,ATM); C2 = Option3.GetCodeByExercisePrice(0,ATM+2.5); C3 = Option3.GetCodeByExercisePrice(0,ATM+5.0); C4 = Option3.GetCodeByExercisePrice(0,ATM+7.5); C5 = Option3.GetCodeByExercisePrice(0,ATM+10.0); P1 = Option3.GetCodeByExercisePrice(1,ATM); P2 = Option3.GetCodeByExercisePrice(1,ATM-2.5); P3 = Option3.GetCodeByExercisePrice(1,ATM-5.0); P4 = Option3.GetCodeByExercisePrice(1,ATM-7.5); P5 = Option3.GetCodeByExercisePrice(1,ATM-10.0); Main.MessageList("OP3",C1,C2,C3,C4,C5); Main.MessageList("OP3",P1,P2,P3,P4,P5); } } if (Change == true) { if (CT != null) { var a = Main.RemoveObject(CT); Main.MessageList("차트삭제:",a); } Main.MessageList(C1,C2,C3,C4,C5); Main.MessageList(P1,P2,P3,P4,P5); //기본종목셋팅(연결선물 주간장,5분 5000개, 갭보정안함, 수정주가처리 안함) var data1 = new ReqChartItem(F,5,CHART_PERIOD_MINUTE, 5000, CHART_REQCOUNT_BAR, false, false); //참조데이터 셋팅(ReqChartItem를 이용해 종목과 주기등지정) //data2종목 var Data2 = new ReqChartItem(C1,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data3종목 var Data3 = new ReqChartItem(C2,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data3종목 var Data4 = new ReqChartItem(C3,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data4종목 var Data5 = new ReqChartItem(C4,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data5종목 var Data6 = new ReqChartItem(C5,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data6종목 var Data7 = new ReqChartItem(P1,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data7종목 var Data8 = new ReqChartItem(P2,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data8종목 var Data9 = new ReqChartItem(P3,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data9종목 var Data10 = new ReqChartItem(P4,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //data10종목 var Data11 = new ReqChartItem(P5,5,CHART_PERIOD_MINUTE,5000,CHART_REQCOUNT_BAR,false,false) //참조 데이터는 복수로 지정이 가능하므로 Array에 담아 지정 var RefSet = new Array(Data2,Data3,Data4,Data5,Data6,Data7,Data8,Data9,Data10,Data11); //차트 셋팅 제외하고 시스템,자표, 참조데이터는 생략가능, 생략하면 null로 지정 var A = Main.ReqChartEx(data1, null, null, RefSet); Main.MessageList("차트재생성",A); } }}function Main_OnRcvChartEx(ChartEx){ CT = ChartEx;}안녕하세요, 공유해 주신 소스 코드를 공부하고 있는 사용자입니다. 올려주신 로직이 매우 훌륭하여 제 시스템에 적용해 보려는데, 몇 가지 기술적인 확신을 얻고 싶어 질문을 남깁니다.1. 선물 및 옵션 차트의 독립적 운용 가능 여부현재 소스에서 ReqChartEx를 통해 하나의 확장 차트에 선물과 옵션 10종목을 모두 담고 있습니다. 제가 필요한 것은 선물 차트와 옵션 차트를 각각 별도로(또는 특정 목적에 맞게) 활용하는 것인데, 이 소스 구조 내에서 옵션 종목이 교체될 때 각각의 차트 데이터가 독립적으로 갱신되도록 제어하는 것이 가능한가요?2. 차트 갱신 시 기존 데이터 유지 문제등가격(ATM)이 변경되어 Main.RemoveObject(CT)로 기존 차트를 삭제하고 ReqChartEx로 새로 만들 때, 이전 차트에서 수집하던 실시간 데이터나 지표 값들이 초기화되지 않고 연속성을 가질 수 있는 방법이 소스 내에 고려되어 있는지 궁금합니다.3. 시세 업데이트(OnUpdateTick) 활용차트가 자동으로 변경된 이후, Main_OnUpdateTick 같은 핸들러를 통해 새로 교체된 옵션 종목들의 시세 데이터를 실시간으로 가로채서 외부 파일로 저장하거나 계산에 활용하는 데 최적화된 구조인지 조언 부탁드립니다.