표시기가 손상됨 - 페이지 5

 
Rosh :

부패가 무엇을 의미합니까? 방금 EURUSD M1에 표시를 첨부했는데 값이 표시되지 않습니다.


32비트 클라이언트 단말 MetaTrader 4도 같은 그림을 보여줍니다. 제공된 표시기가 작동하는 것이 확실합니까?
 
Rosh :

32비트 클라이언트 터미널 MetaTrader 4는 동일한 그림을 제공합니다. 제공된 표시기가 작동하는 것이 확실합니까?
예제 코드의 원본 버전을 다운로드한 것 같습니다(타임스탬프 2011.10.11 18:06). 25분 동안 아무것도 그리지 않습니다. init()에서 drawTime을 TimeCurrent()로 설정하고 start()의 모든 코드를 한 번만 트리거합니다(drawTime + 1500 < TimeCurrent()).

타임스탬프가 2011.10.12 06:37인 두 번째 버전은 즉시 그리기를 시작해야 하는 것처럼 보입니다.

그러나 어쨌든 문제는 분명히 몇 시간 동안 발생하기 시작하지 않습니다.
 
jjc :
예제 코드의 원본 버전을 다운로드한 것 같습니다(타임스탬프 2011.10.11 18:06). 25분 동안 아무것도 그리지 않습니다.
알았어, 기다릴게
 

32비트 클라이언트 단말 MetaTrader 4도 같은 그림을 보여줍니다. 제공된 표시기가 작동하는 것이 확실합니까?

- 예. 어젯밤부터 약 18시간 동안 32비트 시스템에서도 동일한 표시기를 실행하고 있습니다. 문제가 발생하지 않습니다.

다른 가능한 MT4 버그를 추적하려면 iLow() 및 iHigh() 대신 Low[i] 및 High[i]를 사용하면 어떻게 됩니까?

- 실제 코드에서는 iHighest / iHigh / iLowest / iLow 등이 사용됩니다. 복잡도를 줄이기 위해 예제 코드에서는 High/Low를 사용했습니다.

 
RaptorUK :
나는 아이디어가 . . . 하지만 지금 나가서 새 차트에 지표를 추가했습니다. 돌아와서 결과를 게시할 때 내 아이디어를 테스트할 것입니다.

알겠습니다. 방금 돌아왔습니다. 처음 지표를 로드한 이후로 차트는 괜찮아 보였습니다. . 그런 다음 내 아이디어를 시도했습니다. . . 새 데이터가 다운로드될 수 있도록 차트를 오른쪽으로 이동하기 위해 Paged Up했습니다. . 그리고 헤이 프레스토. .

2011.10.07 19:08 이 스레드에서 제안한 내용입니다.

 
RaptorUK :

알겠습니다. 방금 돌아왔습니다. 처음 지표를 로드한 이후로 차트는 괜찮아 보였습니다. . 그런 다음 내 아이디어를 시도했습니다. . . 새 데이터가 다운로드될 수 있도록 차트를 오른쪽으로 이동하기 위해 Paged Up했습니다. . 그리고 헤이 프레스토. .

좋아, 그래서 당신은 막대 기록이 어떤 이유로 변경되고 다시 채워지고 있다고 가정하고 있으며, 앞으로만 그려지고 지표에서 다시 계산하는 일반적인 지표 동작을 따르지 않기 때문에 지표가 영향을 받고 있습니다. IndicatorCounted() 같은 것들의 기초?
 
jjc :
좋아, 그래서 당신은 막대 기록이 어떤 이유로 변경되고 다시 채워지고 있다고 가정하고 있으며, 앞으로만 그려지고 지표에서 다시 계산하는 일반적인 지표 동작을 따르지 않기 때문에 지표가 영향을 받고 있습니다. IndicatorCounted() 같은 것들의 기초?
최근 코드를 보지 않았습니다. . 하지만 네, 당신이 쓴 것과 같은 맥락에서 뭔가.
 
RaptorUK :
최근 코드를 보지 않았습니다. . 하지만 네, 당신이 쓴 것과 같은 맥락에서 뭔가.

좋습니다. 요약하면 다음과 같습니다.

* 일반 표시기는 IndicatorCounted()를 사용하여 "더러운" 막대 값을 결정하고 (재)계산해야 합니다.

* 뒤로 스크롤하여 기록에 추가 막대를 추가하면 IndicatorCounted()가 0으로 재설정됩니다. 따라서 이 시점에서 일반 지표는 모든 과거 값을 다시 계산합니다.

* 여기 표시기는 이것을 하지 않습니다. 실제로 IndicatorCounted()를 무시하고 앞으로만 그립니다.

* 어떤 이유로 AnkaSoftware의 Win64 시스템은 주기적으로 이전 데이터로 다시 채워지지만 Win32 시스템은 그렇지 않습니다. 이 맥락에서 운영 체제는 아마도 우연의 일치일 것입니다.

* MT4가 추가된 새로운 막대에 비추어 표시기 버퍼 를 조정하지 않고 대신 IndicatorCounted()가 재설정되기 때문에 표시기 코드에 모든 이전 값을 다시 계산하는 데 의존한다는 점은 약간 장난스럽습니다. (그러나 많은 지표에 이전 막대 값을 추가하면 잠재적으로 후속 계산에 영향을 미치기 때문에 합리적으로 정당화됩니다. 예를 들어 기록 시작 부분에 추가 막대를 추가하면 작은 값에도 불구하고 EMA가 변경됩니다.)

 
jjc :

* MT4가 추가된 새로운 막대에 비추어 표시기 버퍼를 조정하지 않고 대신 IndicatorCounted()가 재설정되기 때문에 표시기 코드에 모든 이전 값을 다시 계산하는 데 의존한다는 점은 약간 장난스럽습니다.

사실 생각해보면 그건 잘못된 일이다. MT4가 지표에 모든 것을 다시 계산하도록 지시하는 데에는 그만한 이유가 있으며 그 시나리오가 여기에 적용되었을 수 있습니다.

표시기가 잠시 동안 실행되었지만 여러 막대 동안 지속되는 브로커와의 연결이 끊어졌다고 가정해 보겠습니다. 다시 연결하면 MT4는 눈금을 받고 최신 막대에 대한 표시기 값을 그리기 시작합니다. 별도로, 비동기식으로, 더 느리게 연결 해제 중에 발생한 누락된 막대에 대한 기록 데이터를 수신합니다. 이것들은 막대 기록의 중간에 삽입되므로 모든 일반 표시기가 최소한 연결 해제 기간의 시작 부분부터 이전 값을 다시 그려야 합니다. 실제로 MT4가 "모든 것을 다시 그리는" 접근 방식을 취하는 것은 이해할 수 있습니다. 유일한 문제는 버퍼 값이 잠재적으로 유효하지 않은 경우 MT4가 버퍼 값을 자동으로 EMPTY_VALUE 로 변경해야 하는지 여부입니다.
 

이 문제는 지표 기반에만 영향을 줍니까?

High[], low[] 또는 iHigh, iLow, iLowest, iBarshift 등 다른 사람들은 어떻습니까.