커뮤니티
data1에 5분챠트 data2에 30초챠트 환경에서 함수 호출 이슈
사용자 함수를 사용해서 f(a, b, c)로 호출하는데 nextbaropen > 0 으로 막아도 함수가 10회 동작되는 로그를 확인했습니다.
아마도 과거데이터 챠트에서 data2를 처리하는 메커니즘이 처리되어야 해서 10회 호출이 되는 모습같은데, 문제는
5분챠트에서 1회만 호출될거라 예상했던 함수가 10회 불리면서, 함수 내에서는 10개 봉 이전부터 시작되는 위치부터 순반향으로
for i = 9 downto 0 { ... }
형태로 처리를 하고자 하면 i가 9부터 시작될거 같았는데 로그를 찍어보면 i가 0부터 처리되는게 찍힙니다. (로그는 밑에 첨부)
그리고 이 함수에서 하나가 아니라 2개의 계산된 값을 받아와야 해서 하나는 리턴값으로, 하나는 세번째 파라메터를 ref타입으로 해서 받는 걸로 만들었는데, 두번째 파라메터는 이 세번째 파라메터의 직전값(예: 평균[1])을 넣었을 때, 호출하는 위치에서는 10회 반복되는 과정에서 ref로 반환된 값이 평균[1]에도 영향을 바로 미쳐서 함수 결과가 의도치 않은 계산을 하게 되었습니다. 그나마
stime == data2(stime)으로 비교해서 임시평균 = 평균; 과 같이 하니 두번째 파라메터 값은 고정되도록 하는데 성공은 했는데, 함수 안에서 로그를 찍어보면 아래와 같이 597.20이 실은 입력값이 아니라 결과값인데 그게 입력값 로그출력으로 나와버립니다 (여기서부터 멘붕)
그러다보니 함수 내부에서 처리가 이상하게 되어 결과값도 영향을 받고 그러다보니 지표화해서 출력해보면 완전 이상하게만 나옵니다.....
5분챠트에서 30초챠트의 데이타들을 batch방식으로 처리하려고 했던건데 for문으로 처리하는게 부적절한 접근이었던건지, 아니면 for문 없이 뭔가 정방향으로 계산하는 접근법으로 구현해야 하는건지, 전혀 갈피를 못잡고 있습니다.
현 상황에 대한 더 구체적인 확인을 위해서 소스 코드 전체가 필요하시다면 별도로 보내드리겠습니다.
dataN의 타임프레임이 data1보다 같거나 클 때는 경험하지 않았던 부분인데, 어떤 방향으로 접근해야 할 지 전혀 갈피를 못잡겠습니다.
==============================
2025-12-29 09:05:00 ▶[START] @accum(4766) 입력평단(Param)=597.20, sTime=90000
2025-12-29 09:05:00 ㄴ[Init] 입력값 계승: 597.20
2025-12-29 09:05:00 i=0 Time=90000 | 전:597.20 -> 후:597.20 (수량:-174)
2025-12-29 09:05:00 ◀[END] 최종반환값=597.20
2025-12-29 09:05:00 ▶[START] @accum(4766) 입력평단(Param)=597.20, sTime=90000
2025-12-29 09:05:00 ㄴ[Init] 입력값 계승: 597.20
2025-12-29 09:05:00 i=1 Time=90000 | 전:597.20 -> 후:597.20 (수량:-174)
2025-12-29 09:05:00 i=0 Time=90030 | 전:597.20 -> 후:596.92 (수량:-269)
2025-12-29 09:05:00 ◀[END] 최종반환값=596.92
2025-12-29 09:05:00 ▶[START] @accum(4766) 입력평단(Param)=597.20, sTime=90000
2025-12-29 09:05:00 ㄴ[Init] 입력값 계승: 597.20
2025-12-29 09:05:00 i=2 Time=90000 | 전:597.20 -> 후:597.20 (수량:-174)
2025-12-29 09:05:00 i=1 Time=90030 | 전:597.20 -> 후:596.92 (수량:-269)
2025-12-29 09:05:00 i=0 Time=90100 | 전:596.92 -> 후:596.92 (수량:-120)
2025-12-29 09:05:00 ◀[END] 최종반환값=596.92
2025-12-29 09:05:00 ▶[START] @accum(4766) 입력평단(Param)=597.20, sTime=90000
2025-12-29 09:05:00 ㄴ[Init] 입력값 계승: 597.20
2025-12-29 09:05:00 i=3 Time=90000 | 전:597.20 -> 후:597.20 (수량:-174)
2025-12-29 09:05:00 i=2 Time=90030 | 전:597.20 -> 후:596.92 (수량:-269)
2025-12-29 09:05:00 i=1 Time=90100 | 전:596.92 -> 후:596.92 (수량:-120)
2025-12-29 09:05:00 i=0 Time=90130 | 전:596.92 -> 후:596.55 (수량:75)
2025-12-29 09:05:00 ◀[END] 최종반환값=596.55
2025-12-29 09:05:00 ▶[START] @accum(4766) 입력평단(Param)=597.20, sTime=90000
2025-12-29 09:05:00 ㄴ[Init] 입력값 계승: 597.20
2025-12-29 09:05:00 i=4 Time=90000 | 전:597.20 -> 후:597.20 (수량:-174)
2025-12-29 09:05:00 i=3 Time=90030 | 전:597.20 -> 후:596.92 (수량:-269)
2025-12-29 09:05:00 i=2 Time=90100 | 전:596.92 -> 후:596.92 (수량:-120)
2025-12-29 09:05:00 i=1 Time=90130 | 전:596.92 -> 후:596.55 (수량:75)
2025-12-29 09:05:00 i=0 Time=90200 | 전:596.55 -> 후:596.76 (수량:243)
2025-12-29 09:05:00 ◀[END] 최종반환값=596.76
2025-12-29 09:05:00 ▶[START] @accum(4766) 입력평단(Param)=597.20, sTime=90000
2025-12-29 09:05:00 ㄴ[Init] 입력값 계승: 597.20
2025-12-29 09:05:00 i=5 Time=90000 | 전:597.20 -> 후:597.20 (수량:-174)
2025-12-29 09:05:00 i=4 Time=90030 | 전:597.20 -> 후:596.92 (수량:-269)
2025-12-29 09:05:00 i=3 Time=90100 | 전:596.92 -> 후:596.92 (수량:-120)
2025-12-29 09:05:00 i=2 Time=90130 | 전:596.92 -> 후:596.55 (수량:75)
2025-12-29 09:05:00 i=1 Time=90200 | 전:596.55 -> 후:596.76 (수량:243)
2025-12-29 09:05:00 i=0 Time=90230 | 전:596.76 -> 후:596.90 (수량:313)
2025-12-29 09:05:00 ◀[END] 최종반환값=596.90
2025-12-29 09:05:00 ▶[START] @accum(4766) 입력평단(Param)=597.20, sTime=90000
2025-12-29 09:05:00 ㄴ[Init] 입력값 계승: 597.20
2025-12-29 09:05:00 i=6 Time=90000 | 전:597.20 -> 후:597.20 (수량:-174)
2025-12-29 09:05:00 i=5 Time=90030 | 전:597.20 -> 후:596.92 (수량:-269)
2025-12-29 09:05:00 i=4 Time=90100 | 전:596.92 -> 후:596.92 (수량:-120)
2025-12-29 09:05:00 i=3 Time=90130 | 전:596.92 -> 후:596.55 (수량:75)
2025-12-29 09:05:00 i=2 Time=90200 | 전:596.55 -> 후:596.76 (수량:243)
2025-12-29 09:05:00 i=1 Time=90230 | 전:596.76 -> 후:596.90 (수량:313)
2025-12-29 09:05:00 i=0 Time=90300 | 전:596.90 -> 후:596.83 (수량:570)
2025-12-29 09:05:00 ◀[END] 최종반환값=596.83
2025-12-29 09:05:00 ▶[START] @accum(4766) 입력평단(Param)=597.20, sTime=90000
2025-12-29 09:05:00 ㄴ[Init] 입력값 계승: 597.20
2025-12-29 09:05:00 i=7 Time=90000 | 전:597.20 -> 후:597.20 (수량:-174)
2025-12-29 09:05:00 i=6 Time=90030 | 전:597.20 -> 후:596.92 (수량:-269)
2025-12-29 09:05:00 i=5 Time=90100 | 전:596.92 -> 후:596.92 (수량:-120)
2025-12-29 09:05:00 i=4 Time=90130 | 전:596.92 -> 후:596.55 (수량:75)
2025-12-29 09:05:00 i=3 Time=90200 | 전:596.55 -> 후:596.76 (수량:243)
2025-12-29 09:05:00 i=2 Time=90230 | 전:596.76 -> 후:596.90 (수량:313)
2025-12-29 09:05:00 i=1 Time=90300 | 전:596.90 -> 후:596.83 (수량:570)
2025-12-29 09:05:00 i=0 Time=90330 | 전:596.83 -> 후:596.83 (수량:562)
2025-12-29 09:05:00 ◀[END] 최종반환값=596.83
2025-12-29 09:05:00 ▶[START] @accum(4766) 입력평단(Param)=597.20, sTime=90000
2025-12-29 09:05:00 ㄴ[Init] 입력값 계승: 597.20
2025-12-29 09:05:00 i=8 Time=90000 | 전:597.20 -> 후:597.20 (수량:-174)
2025-12-29 09:05:00 i=7 Time=90030 | 전:597.20 -> 후:596.92 (수량:-269)
2025-12-29 09:05:00 i=6 Time=90100 | 전:596.92 -> 후:596.92 (수량:-120)
2025-12-29 09:05:00 i=5 Time=90130 | 전:596.92 -> 후:596.55 (수량:75)
2025-12-29 09:05:00 i=4 Time=90200 | 전:596.55 -> 후:596.76 (수량:243)
2025-12-29 09:05:00 i=3 Time=90230 | 전:596.76 -> 후:596.90 (수량:313)
2025-12-29 09:05:00 i=2 Time=90300 | 전:596.90 -> 후:596.83 (수량:570)
2025-12-29 09:05:00 i=1 Time=90330 | 전:596.83 -> 후:596.83 (수량:562)
2025-12-29 09:05:00 i=0 Time=90400 | 전:596.83 -> 후:596.92 (수량:681)
2025-12-29 09:05:00 ◀[END] 최종반환값=596.92
2025-12-29 09:05:00 ▶[START] @accum(4766) 입력평단(Param)=597.20, sTime=90000
2025-12-29 09:05:00 ㄴ[Init] 입력값 계승: 597.20
2025-12-29 09:05:00 i=9 Time=90000 | 전:597.20 -> 후:597.20 (수량:-174)
2025-12-29 09:05:00 i=8 Time=90030 | 전:597.20 -> 후:596.92 (수량:-269)
2025-12-29 09:05:00 i=7 Time=90100 | 전:596.92 -> 후:596.92 (수량:-120)
2025-12-29 09:05:00 i=6 Time=90130 | 전:596.92 -> 후:596.55 (수량:75)
2025-12-29 09:05:00 i=5 Time=90200 | 전:596.55 -> 후:596.76 (수량:243)
2025-12-29 09:05:00 i=4 Time=90230 | 전:596.76 -> 후:596.90 (수량:313)
2025-12-29 09:05:00 i=3 Time=90300 | 전:596.90 -> 후:596.83 (수량:570)
2025-12-29 09:05:00 i=2 Time=90330 | 전:596.83 -> 후:596.83 (수량:562)
2025-12-29 09:05:00 i=1 Time=90400 | 전:596.83 -> 후:596.92 (수량:681)
2025-12-29 09:05:00 i=0 Time=90430 | 전:596.92 -> 후:596.99 (수량:746)
2025-12-29 09:05:00 ◀[END] 최종반환값=596.99
답변 2
예스스탁 예스스탁 답변
2026-01-05 15:51:48
온고지신
2026-01-05 18:58:05