Ошибки, баги, вопросы - страница 280

 

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

Знания по этому предмету лично у меня поверхностные - поэтому оценить сказанное не смогу. Напишите в Сервисдеск - там рассмотрят предметно.

 

Разработчикас - Спс за проделанную работу - мт5 хорошая прога,

хотелось добавить чтобы больше примеров работы с функциями,

классами и др. Конечно сделать это в справке - идеал, но и здесь бы

было не плохо.


Отдельное спасибо тем кто пишет статьи с примерами. Здоровце побольше вам.

 
uncleVic:

Пока, для примера, возьмите этот файл.

Класс CSignalCustomMACD абсолютно идентичен классу CSignalMACD, за исключением того, что построен на "пользовательской" версии индикатора из стандартной поставки.

Не забудьте в исходный код эксперта добавить строчку:

иначе в тестере работать не будет.

Если в папке Indicators\Examples нет файла MACD.ex5, индикатор нужно скомпилировать.

Пример в справку будет добавлен в ближайшем будущем.

Спасибо большое, работает!
 
-Alexey-:
Это было бы логично, но сейчас операция ">" ("<" не проверял) может возвращать результ 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.40GHz, 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 started2011.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:

Вы сначала таким же образом запишите данные в файл, посмотрите формат...

 А потом читайте...

Данные записываю построчно в OnCalculated индикатора или OnInit эксперта через FileWrite.

В результате файл представляет собой список чисел:

10000
10000
9996.85
10005.25
10023.4
10029.7

Можно, конечно, записывать тоже массив в целом, но зачем делать лишние действия, и в чем ошибка именно тут? 

В документации каких-либо ограничений по этому поводу не нашел. 

 
DV2010:

Данные записываю построчно в OnCalculated индикатора или OnInit эксперта через FileWrite.

В результате файл представляет собой список чисел:

10000
10000
9996.85
10005.25
10023.4
10029.7

Можно, конечно, записывать тоже массив в целом, но зачем делать лишние действия, и в чем ошибка именно тут? 

В документации каких-либо ограничений по этому поводу не нашел. 

Вы сначала попробуйте и посмотрите на форматы обоих файлов, а потом рассуждайте
 
DV2010:

Почему-то не работает чтение массива через функцию FileReadArray, хотя файл открывается, содержит данные и т.д.:


Из справки:

FileReadArray

Читает массивы любых типов, кроме строковых (может быть массив структур, не содержащих строки и динамические массивы), из бинарного файла с текущего положения файлового указателя.

Причина обращения: