- Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
- Нужна ли версия "PRO" тестера стратегий?
- Почему отсутствие интернет-соединения резко увеличивает время тестирования советника на истории?
Предположим, нужно протестировать эксперт на истории. Но для строгой проверки мало иметь данные по котировкам, даже если они тиковые. Нужно также иметь данные по спредам за весь период, на котором тестируется эксперт. Даже если эти данные где-то хранятся, то как их учесть? Спред на некоторых типах счетов тоже непрерывно меняется, как и котировки. Кроме того, у каждого дилера история спредов своя и она ни с чьей не совпадает. Тогда какой вообще практический смысл в тестировании на истории? Оно всё равно покажет очень приблизительные результаты.
Воссоздать историю спредов Вы сможете проанализировав тиковую историю.
Спред на некоторых типах счетов тоже непрерывно меняется, как и котировки. Кроме того, у каждого дилера история спредов своя и она ни с чьей не совпадает. Тогда какой вообще практический смысл в тестировании на истории? Оно всё равно покажет очень приблизительные результаты.
В МТ5 есть история спредов. Правда, там используется средний спред за свечу. Это в режиме "Все тики". А в режиме "Все тики на основе реальных тиков" есть полная история тиков. Ведь история тиков включает не только цену Bid, но и Ask. Чем не история спредов?
В МТ4 та тиковая история, которая собирается мною, тоже имеет данные не только о цене Bid, но и Ask. Правда в тестере МТ4 плавающий спред по этим данным стандартными средствами не получить. Там, действительно, приходится довольствоваться установкой заведомо большого спреда, чтобы учитывать расширение спреда на новостях и в ночное время.
В МТ5 есть история спредов. Правда, там используется средний спред за свечу. Это в режиме "Все тики". А в режиме "Все тики на основе реальных тиков" есть полная история тиков. Ведь история тиков включает не только цену Bid, но и Ask. Чем не история спредов?
В МТ4 та тиковая история, которая собирается мною, тоже имеет данные не только о цене Bid, но и Ask. Правда в тестере МТ4 плавающий спред по этим данным стандартными средствами не получить. Там, действительно, приходится довольствоваться установкой заведомо большого спреда, чтобы учитывать расширение спреда на новостях и в ночное время.
А если МТ4 подсунуть реальные тиковые данные, например от Дукаса и сконвертировать в .fxt, спреды запишутся? Как-то не озадачивался пока вопросом.
А если МТ4 подсунуть реальные тиковые данные, например от Дукаса и сконвертировать в .fxt, спреды запишутся? Как-то не озадачивался пока вопросом.
Так речь именно об этом: в FXT-файл пишутся только Bid'ы. Ask вычисляется как Bid + Spread (который устанавливается в окошке тестера). Слышал, что есть какой-то патч для МТ4 (выпускается сторонним разработчиком), который после установки дает возможность подстановки еще и Ask. Выходит что-то вроде хака терминала.
P. S. Сам никогда не видел этого патча. Знаю только по наслышке.
Так речь именно об этом: в FXT-файл пишутся только Bid'ы. Ask вычисляется как Bid + Spread (который устанавливается в окошке тестера). Слышал, что есть какой-то патч для МТ4 (выпускается сторонним разработчиком), который после установки дает возможность подстановки еще и Ask. Выходит что-то вроде хака терминала.
P. S. Сам никогда не видел этого патча. Знаю только по наслышке.
Здесь подробно.
- 2017.05.07
- www.mql5.com
Здесь подробно.
Можно вкратце, что имеете в виду? Перечитал первый пост указанной темы. В нем производится сравнение одного и того же советника в МТ4 и МТ5. Ни слова об истории спредов (то, что обсуждается в этой теме). Возможно, на следующих 12-и страницах что-то и есть на этот счет. Но, прошу прощения, как-то не хочется читать столько просто ради того, чтобы понять, о чем Вы хотите сказать двумя словами "Здесь подробно".
Можно вкратце, что имеете в виду? Перечитал первый пост указанной темы.
Не читали
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
fxsaber, 2017.05.07 22:46
Лог MT4-тестера
2017.05.07 23:25:36.155 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:02.528 (total time 0:00:03.292)
Лог MT5-тестера
2017.05.07 23:26:01.016 Core 1 EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:01.918 (including ticks preprocessing 0:00:00.203).
Убеждаемся, что файлы, полученные из каждого тестера идентичны - тики тестеров совпадают.
Не читали
Они не могут совпадать по определению, т. к. структуры разные. В МТ4:
struct TestHistory { datetime otm; // open time of bar double open; // OHLCV double high; double low; double close; long volume; int ctm; // current time inside the bar int flag; // flag of expert execution (0 - We modify the bar, and the expert is not run) };
В МТ5:
struct MqlTick { datetime time; // Время последнего обновления цен double bid; // Текущая цена Bid double ask; // Текущая цена Ask double last; // Текущая цена последней сделки (Last) ulong volume; // Объем для текущей цены Last long time_msc; // Время последнего обновления цен в миллисекундах uint flags // Флаги тиков };
Итого: в МТ4 все завязано на Bid, а в МТ5 - нет. Вы сравнили только цены Bid. А нужно еще и Ask сравнить.
Они не могут совпадать по определению, т. к. структуры разные. В МТ4:
В МТ5:
Итого: в МТ4 все завязано на Bid, а в МТ5 - нет. Вы сравнили только цены Bid. А нужно еще и Ask сравнить.
Ну зачем писать ерунду, когда все написано в первом посте?!
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
fxsaber, 2017.05.07 22:46
Запускаем на обоих тестерах такой кроссплатформенный советник
// MQL4&5-code #property strict class FILE { private: const int handle; static string TickToString( const MqlTick &Tick, const string Delimeter = " " ) { return(::DoubleToString(Tick.ask, _Digits) + Delimeter + ::DoubleToString(Tick.bid, _Digits)); } public: FILE( const string FileName ) : handle(::FileOpen(FileName, FILE_WRITE | FILE_TXT | FILE_ANSI)) { } ~FILE( void ) { if (this.handle != INVALID_HANDLE) ::FileClose(handle); } bool Write( const MqlTick &Tick ) const { return((this.handle != INVALID_HANDLE) && ::FileWriteString(this.handle, FILE::TickToString(Tick) + "\n")); } }; const FILE File(::MQLInfoString(MQL_PROGRAM_NAME) + ".txt"); void OnTick() { MqlTick Tick; if (SymbolInfoTick(_Symbol, Tick)) File.Write(Tick); }
Неприятно вот так разжевывать первый же пост. Пожалел, что встрял.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования