Hatalar, hatalar, sorular - sayfa 280

 

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

Şahsen bu konuda yüzeysel bilgiye sahibim - bu yüzden söylenenleri değerlendiremiyorum. Servis Masasına yazın - ayrıntılı olarak değerlendireceklerdir.

 

Developeras - Yapılan iş için ATP - mt5 iyi bir programdır,

İşlevlerle çalışma konusunda daha fazla örnek eklemek istiyorum,

sınıflar, vb. Tabii ki, bunu yardımda yapmak idealdir, ancak burada da

kötü değildi.


Örneklerle makale yazanlara özel teşekkürler. Size daha fazla sağlık.

 
uncleVic :

Şimdilik bu dosyayı örnek alın.

CsignalCustomMACD sınıfı, standart dağıtımdan göstergenin "özel" sürümü üzerine inşa edilmesi dışında, CsignalMACD sınıfıyla kesinlikle aynıdır.

Uzmanın kaynak koduna aşağıdaki satırı eklemeyi unutmayın:

aksi takdirde test cihazında çalışmayacaktır.

Göstergeler\Örnekler klasöründe MACD.ex5 dosyası yoksa, göstergenin derlenmesi gerekir.

Yakın gelecekte yardıma bir örnek eklenecektir.

Çok teşekkürler, işe yarıyor!
 
-Alexey- :
Bu mantıklı olurdu, ancak şimdi ">" ("<" kontrol etmedi) işlemi "makine sıfırı anlamında eşit" bu tür sayılar için doğru sonucu döndürebilir. Etki bulundu. sayısal hesaplamanın sonucunun, böyle bir etkinin bir sonucu olarak ve özel kullanıldıktan sonra teorik olarak daha mümkün olduğu ortaya çıktı. daha yüksek olan işlevler - doğru hale geldi. Bu nedenle, sertifikaya bir ek eklemeyi öneriyorum.

Tüm karşılaştırmalarda sadece DBL_EPSILON kullanın, zor değil:

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


Fiyatlarla çalışıyorsanız, herhangi bir hesaplamadan sonra bunları normalleştirin ve DBL_EPSILON yerine Point/2 .0 kullanın:

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
 
Teşekkür ederim.
 

Bazı nedenlerden dolayı, bir diziyi FileReadArray işlevi aracılığıyla okumak, dosyanın açılmasına, veri içermesine vb. rağmen çalışmaz:

 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 :

Bazı nedenlerden dolayı, bir diziyi FileReadArray işlevi aracılığıyla okumak, dosyanın açılmasına, veri içermesine vb. rağmen çalışmaz:

Verileri önce aynı şekilde bir dosyaya yazarsınız, formata bakın...

Ve sonra oku...

 
AlexSTAL :

Verileri önce aynı şekilde bir dosyaya yazarsınız, formata bakın...

Ve sonra oku...

Verileri satır satır indikatörün OnCalculated veya Expert Advisor'ın OnInit'ine FileWrite aracılığıyla yazarım.

Ortaya çıkan dosya, sayıların bir listesidir:

10000
10000
9996.85
10005.25
10023.4
10029.7

Elbette diziyi bir bütün olarak da yazabilirsiniz, ancak neden fazladan adımlar atıyorsunuz ve buradaki hata nedir?

Belgelerde bununla ilgili herhangi bir kısıtlama bulamadım.

 
DV2010 :

Verileri satır satır indikatörün OnCalculated veya Expert Advisor'ın OnInit'ine FileWrite aracılığıyla yazarım.

Ortaya çıkan dosya, sayıların bir listesidir:

10000
10000
9996.85
10005.25
10023.4
10029.7

Elbette diziyi bir bütün olarak da yazabilirsiniz, ancak neden fazladan adımlar atıyorsunuz ve buradaki hata nedir?

Belgelerde bununla ilgili herhangi bir kısıtlama bulamadım.

İlk önce her iki dosyanın biçimlerine bakmayı denersiniz ve ardından
 
DV2010 :

Bazı nedenlerden dolayı, bir diziyi FileReadArray işlevi aracılığıyla okumak, dosyanın açılmasına, veri içermesine vb. rağmen çalışmaz:


Yardımdan:

DosyaOku Dizisi

Dosya işaretçisinin geçerli konumundan ikili bir dosyadan dizeler (dizeler ve dinamik diziler içermeyen bir yapı dizisi olabilir) dışında herhangi bir türdeki dizileri okur.