커뮤니티

프로그램 다운 문의 1

프로필 이미지
dbals
2026-08-10 18:37:51
120
글번호 233202
답변완료

안녕하세요.. 항상 감사합니다..


// [1단계 진단본 - 예스스팟 문의용 최소 구조]


function Main_OnStart()

{

    // 타임프레임 목록(분봉 1~110, 총 110개) 순서대로 하나씩 처리 시작

    processNext();

}


function processNext()

{

    // 목록의 현재 타임프레임 하나에 대해 차트 요청

    var ChartSet = new ReqChartItem(MARKET_DATA_CODE);

    ChartSet.code = MARKET_DATA_CODE;

    ChartSet.period = CHART_PERIOD_MINUTE;

    ChartSet.cycle = 현재타임프레임;   // 1, 2, 3 ... 110분 순환

    ChartSet.count = 요청봉수;         // 처음엔 고정(최대 4000), 두번째 순환부터는 유동적(최소 82~)

    Main.ReqChartEx(ChartSet);

}


function Main_OnRcvChartEx(ChartEx)

{

    // 받은 데이터는 보지 않고(신호계산 없음), 바로 다음 순서로

    CH = ChartEx;

    Main.SetTimer(5, 300);   // 300ms 뒤 삭제

    Main.SetTimer(1, 0~1000); // 다음 타임프레임 요청까지 페이싱(0~1000ms)

}


function Main_OnTimer(nEventID)

{

    if (nEventID == 5) Main.RemoveObject(CH);   // 지연삭제

    if (nEventID == 1) processNext();            // 다음 타임프레임으로 - 110개 끝나면 처음부터 무한반복

}


증상: 위 구조로 분봉 110개(또는 틱봉 98개)를 페이싱 0~1000ms로 끝없이 순환 — ReqChartEx → 응답 → 300ms 뒤 RemoveObject → 다음. 이렇게 반복하는 나스닥, sp500, gold 종목마다 분/틱 파일 이렇게 6개 파일(3종목×분/틱) 동시 실행 시 약 30분 경과 지점에서 다운됩니다.


위 방식에 어떤 문제가 있는건지 확인 부탁드립니다..

답변 1
프로필 이미지

예스스탁 예스스탁 답변

2026-08-19 16:41:25

안녕하세요 예스스탁입니다. 휴가 관계로 답변이 늦었습니다. 생성 후 삭제가 0.3초만에 이루어지고 곧 바로 객체에 할당이 되는데 시간간격이 짧은것 같습니다. 삭제에도 시간이 필요하게 됩니다. 또한 1번 타이머에 따라 삭제와 할당이 겹칠수도 있습니다. 차트가 생성되면 5번타이머 셋팅 -> 5번타이머 동작하면 5번타이머 킬하고 삭제, 1번타이머 동작 -> 1번 타이머 동작하면 1번 타이머 킬하고 processNext실행하게 해서 삭제-> 생성사이에 조금더 큰 여유시간을 주시고 생성과 삭제가 겹치지 않게 하셔야 할 것 같습니다. function Main_OnStart() { // 타임프레임 목록(분봉 1~110, 총 110개) 순서대로 하나씩 처리 시작 processNext(); } function processNext() { // 목록의 현재 타임프레임 하나에 대해 차트 요청 var ChartSet = new ReqChartItem(MARKET_DATA_CODE); ChartSet.code = MARKET_DATA_CODE; ChartSet.period = CHART_PERIOD_MINUTE; ChartSet.cycle = 현재타임프레임;// 1, 2, 3 ... 110분 순환 ChartSet.count = 요청봉수;// 처음엔 고정(최대 4000), 두번째 순환부터는 유동적(최소 82~) Main.ReqChartEx(ChartSet); } function Main_OnRcvChartEx(ChartEx) { // 받은 데이터는 보지 않고(신호계산 없음), 바로 다음 순서로 CH = ChartEx; Main.SetTimer(5, 1000); } function Main_OnTimer(nEventID) { if (nEventID == 5) { Main.KillTimer(5); Main.RemoveObject(CH);// 지연삭제 Main.SetTimer(1, 1000); } if (nEventID == 1) { Main.KillTimer(1); processNext();// 다음 타임프레임으로 - 110개 끝나면 처음부터 무한반복 } } 즐거운 하루되세요