커뮤니티

예스스팟 옵션 챠트 자동 갱신 및 데이터 추출 관련 문의 입니다.

프로필 이미지
오늘도수익
2026-02-19 15:27:35
44
글번호 230617

앞전에 주신 소스 입니다.


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 같은 핸들러를 통해 새로 교체된 옵션 종목들의 시세 데이터를 실시간으로 가로채서 외부 파일로 저장하거나 계산에 활용하는 데 최적화된 구조인지 조언 부탁드립니다.


답변 0