커뮤니티

data1에 5분챠트 data2에 30초챠트 환경에서 함수 호출 이슈

프로필 이미지
온고지신
2026-01-05 05:23:39
58
글번호 229557
답변완료

사용자 함수를 사용해서 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

안녕하세요 예스스탁입니다. 전화로 답변드린 부분과 같이 수식에 데이터번호로 처리가 되어 있는지 먼저 확인해 보시기 바랍니다. 참조데이터를 사용하게 되면 각 변수의 선언에 데이터번호를 지정해 주셔야 하고 함수를 사용할 때도 데이터번호로 묶어 주셔야 합니다. 이런처리를 하는 이유는 변수나 함수가 어떤 데이터를 기준으로 값을 저장하고 1봉전, 2봉전과 같은 값을 가져와야 하는지 명확히 하기 위함입니다. 데이터번호에 대한 처리가 업승면 해당 변수나 함수는 기준되는 데이터를 알수 없으므로 전체 데이터를 합친 주기로 값이 저장이 되고 이전값 참조를 하게 됩니다. 아래는 참조데이터 이용과 관련 도움말 내용입니다. 검토해 보시고 수정이 어려우시면 다시 전화주시면 원격으로 봐드리겠습니다.
즐거운 하루 되세요
프로필 이미지

온고지신

2026-01-05 18:58:05

정말 중요한 부분에 대해 정확히 이해할 수 있게 되었습니다. ^^ 알려주신대로 다시 도전해 보겠습니다! 감사합니다~ 즐거운 저녁 되세요~~