오류, 버그, 질문 - 페이지 280

 

-Alexey- :
Это было бы логично, но сейчас операция ">" ("<" не проверял) может возвращать результ true для таких чисел "равных в смысле машинного нуля". Обнаружился эффект т.к. результат  численного расчета получился больше теоретически возможного в результате такого эффекта, а после использования спец. функций, что выше - стал правильным. Поэтому и предлагаю ввести дополнение в справку.

개인적으로, 나는 이 주제에 대한 피상적인 지식을 가지고 있습니다 - 그래서 나는 말한 것을 평가할 수 없습니다. 서비스 데스크에 편지를 보내십시오 . 그들은 그것을 자세히 고려할 것입니다.

 

Developeras - 완료된 작업에 대한 ATP - mt5는 좋은 프로그램입니다.

함수 작업에 대한 더 많은 예를 추가하고 싶습니다.

물론, 도움말에서 이 작업을 수행하는 것이 이상적이지만 여기에서도

나쁘지 않았다.


예를 들어 기사를 작성하는 사람들에게 특히 감사합니다. 당신에게 더 많은 건강.

 
uncleVic :

지금은 이 파일을 예로 들어보겠습니다.

CSignalCustomMACD 클래스는 표준 분포에서 표시기의 "사용자 정의" 버전에 구축된다는 점을 제외하고 CSignalMACD 클래스와 완전히 동일합니다.

전문가의 소스 코드에 다음 줄을 추가하는 것을 잊지 마십시오.

그렇지 않으면 테스터에서 작동하지 않습니다.

Indicators\Examples 폴더에 MACD.ex5 파일이 없으면 지표를 컴파일해야 합니다.

가까운 시일 내에 예제가 도움말에 추가될 것입니다.

감사합니다. 작동합니다!
 
-Alexey- :
이것은 논리적이지만 이제 연산 ">"("<"은 확인하지 않음)은 "기계 0의 의미에서 같음"과 같은 숫자에 대해 true 결과를 반환할 수 있습니다. 효과가 발견되었습니다. 수치 계산의 결과는 이러한 효과의 결과로 그리고 특수 기능을 사용한 후에 더 이론적으로 가능한 것으로 판명되었습니다. 더 높은 기능이 정확해졌습니다. 따라서 인증서에 추가를 제안합니다.

모든 비교에서 DBL_EPSILON을 사용하면 어렵지 않습니다.

 if ( a - b > DBL_EPSILON ) // a > b
if ( b - a > DBL_EPSILON ) // a < b
if ( MathAbs ( a - b ) < DBL_EPSILON ) // a == b


가격으로 작업하는 경우 계산 후 이를 정규화하고 DBL_EPSILON 대신 Point/2 .0을 사용합니다.

price_1 = NormalizeDouble ( Ask + 25 * Point , Digits );
price_2 = NormalizeDouble ( indicator_value, Digits );

if ( price_1 - price_2 > Point / 2.0 ) // price_1 > price_2
if ( price_2 - price_1 > Point / 2.0 ) // price_1 < price_2
if ( MathAbs ( price_1 - price_2 ) < Point / 2.0 ) // price_1 == price_2
Документация по MQL5: Проверка состояния / Point
Документация по MQL5: Проверка состояния / Point
  • www.mql5.com
Проверка состояния / Point - Документация по MQL5
 
고맙습니다.
 

어떤 이유로 FileReadArray 함수를 통해 배열을 읽는 것은 작동하지 않습니다. 파일이 열려 있고 데이터가 포함되어 있는 경우 등이 있습니다.

 string    filename= "equity FileWrite23.txt" ;
int       handle;
int       NumberCopyElements;
string    common_folder;
string    Array[];

void OnInit (){
   common_folder= TerminalInfoString ( TERMINAL_COMMONDATA_PATH );
   handle= FileOpen (filename, FILE_READ | FILE_COMMON );
   if (handle!= INVALID_HANDLE )
       Print ( "Equity FileWrite23 - OnInit(): Удалось открыть файл " ,filename, ".  Ошибка " , GetLastError ());
       else
       Print ( "Equity FileWrite23 - OnInit(): Не удалось открыть файл " ,filename, ".  Ошибка " , GetLastError ());

   NumberCopyElements = FileReadArray (handle,Array, 0 , WHOLE_ARRAY );
       PrintFormat ( "Equity FileWrite23 - OnInit(): Записано %d байт в общую папку всех терминалов - %s" ,NumberCopyElements,common_folder);
   FileClose (handle);

}





















 2011.01 . 26 16 : 27 : 00      Core 1   connect closed
2011.01 . 26 16 : 27 : 00      Core 1    log file "C:\Program Files\MetaTrader 5\Tester\Agent-127.0.0.1-3000\logs\20110126.log" written
2011.01 . 26 16 : 27 : 00      Core 1   EURUSD,H1: 5516 ticks ( 23 bars) generated within 15 ms (total bars in history 6419 , total time 218 ms)
2011.01 . 26 16 : 27 : 00      Core 1   OnTester result 0
2011.01 . 26 16 : 27 : 00      Core 1    2011.01 . 14 00 : 00 : 00    Equity FileWrite23 - OnInit (): Записано 0 байт в общую папку всех терминалов - C:\Documents and Settings\All Users\Application Data\MetaQuotes\Terminal\Common
2011.01 . 26 16 : 27 : 00      Core 1    2011.01 . 14 00 : 00 : 00    Equity FileWrite23 - OnInit (): Удалось открыть файл equity FileWrite23.txt.  Ошибка 0
2011.01 . 26 16 : 27 : 00      Core 1   EURUSD,H1: testing of Experts\_My\Experts\Expert1\Expert Small FileWriteEquity.ex5 from 2011.01 . 14 00 : 00 to 2011.01 . 15 00 : 00 started
2011.01 . 26 16 : 27 : 00      Core 1   EURUSD,H1 (Alpari-Demo): 1 minutes OHLC ticks generating. OnTick executed on the bar begin only
2011.01 . 26 16 : 27 : 00      Core 1    Intel Pentium 4    3.40 GHz, 3063 MB, PR39
2011.01 . 26 16 : 27 : 00      Core 1    4255 bytes of total initialization data received
2011.01 . 26 16 : 27 : 00      Core 1   successfully initialized
2011.01 . 26 16 : 27 : 00      Core 1   initial deposit 10000.00 USD, leverage 1 : 100
2011.01 . 26 16 : 27 : 00      Core 1   expert file added: Experts\_My\Experts\Expert1\Expert Small FileWriteEquity.ex5. 4106 bytes loaded
2011.01 . 26 16 : 27 : 00      Core 1   common synchronization completed
2011.01 . 26 16 : 27 : 00      Tester  EURUSD,H1 (Alpari-Demo): testing of Experts\_My\Experts\Expert1\Expert Small FileWriteEquity.ex5 from 2011.01 . 14 00 : 00 to 2011.01 . 15 00 : 00 to be started 2011.01 . 26 16 : 27 : 00      Core 1   authorized (agent build 384 )
2011.01 . 26 16 : 27 : 00      Core 1   connected
2011.01 . 26 16 : 27 : 00      Core 1   connecting to 127.0 . 0.1 : 3000


 
DV2010 :

어떤 이유로 FileReadArray 함수를 통해 배열을 읽는 것은 작동하지 않습니다. 파일이 열려 있고 데이터가 포함되어 있는 경우 등이 있습니다.

먼저 같은 방식으로 파일에 데이터를 씁니다. 형식을 보세요...

그리고 읽어보세요...

 
AlexSTAL :

먼저 같은 방식으로 파일에 데이터를 씁니다. 형식을 보세요...

그리고 읽어보세요...

저는 FileWrite를 통해 지표의 OnCalculated 또는 Expert Advisor의 OnInit에 데이터를 한 줄씩 씁니다.

결과 파일은 숫자 목록입니다.

10000
10000
9996.85
10005.25
10023.4
10029.7

물론 어레이 전체를 작성할 수도 있지만 추가 단계를 수행하는 이유는 무엇이며 여기서 실수는 무엇입니까?

설명서에서 이에 대한 제한 사항을 찾지 못했습니다.

 
DV2010 :

저는 FileWrite를 통해 지표의 OnCalculated 또는 Expert Advisor의 OnInit에 데이터를 한 줄씩 씁니다.

결과 파일은 숫자 목록입니다.

10000
10000
9996.85
10005.25
10023.4
10029.7

물론 어레이 전체를 작성할 수도 있지만 추가 단계를 수행하는 이유는 무엇이며 여기서 실수는 무엇입니까?

설명서에서 이에 대한 제한 사항을 찾지 못했습니다.

먼저 두 파일의 형식을 살펴보고 그 이유를
 
DV2010 :

어떤 이유로 FileReadArray 함수를 통해 배열을 읽는 것은 작동하지 않습니다. 파일이 열려 있고 데이터가 포함되어 있는 경우 등이 있습니다.


도움말에서:

파일읽기배열

파일 포인터의 현재 위치에서 바이너리 파일에서 문자열(문자열 및 동적 배열을 포함하지 않는 구조의 배열일 수 있음)을 제외한 모든 유형의 배열을 읽습니다.