Спасибо автору .Очень познавательно.
А при чем здесь MetaEditor?
У меня, в 1485 билде нет такой ошибки. Ontick сразу выдает значения
Igor Volodin:
Вы проверяете в режиме "Каждый тик на основе реальных тиков"? Я ведь указал, что только для этого режима существует проблема выдачи нулевых цен в тестере при отладке на истории.
А при чем здесь MetaEditor?
У меня, в 1485 билде нет такой ошибки. Ontick сразу выдает значения
Igor Volodin:
Обновился. Всё равно в режиме каждый тик на основе реальных тиков один раз в OnTick() (самый первый тик) проскакивают нули.
Именно так:
Да нехорошая ситуация. Но если так происходит в самом начале, в принципе это можно блокировать. Может проблема с тиковой историей?
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
2016.11.24 10:15:00.777 Terminal Windows 10 Pro (x64 based PC), IE 11.00, UAC, Intel Core i3-3120M @ 2.50GHz, RAM: 3868 / 8077 Mb, HDD: 385284 / 476372 Mb, GMT+02:00
2016.11.24 10:15:00.777 Terminal C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
При запуске тестирования, режим "Отладка на истории", режим генерации тиков "Каждый тик на основе реальных тиков":
//| RefreshRates.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#include <Trade\SymbolInfo.mqh>
//--- global variable
CSymbolInfo m_symbol; // symbol info object
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(!RefreshRates())
{
Print(__FUNCTION__,", Error RefreshRates. Bid=",DoubleToString(m_symbol.Bid(),Digits()),
", Ask=",DoubleToString(m_symbol.Ask(),Digits()));
return(INIT_FAILED);
}
else
{
Print(__FUNCTION__,", There are no mistakes. Bid=",DoubleToString(m_symbol.Bid(),Digits()),
", Ask=",DoubleToString(m_symbol.Ask(),Digits()));
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- limit the number of runs
static long count=0;
count++;
if(count>21)
return;
//---
if(!RefreshRates())
{
Print(__FUNCTION__,", Error RefreshRates. Bid=",DoubleToString(m_symbol.Bid(),Digits()),
", Ask=",DoubleToString(m_symbol.Ask(),Digits()));
return;
}
else
{
Print(__FUNCTION__,", There are no mistakes. Bid=",DoubleToString(m_symbol.Bid(),Digits()),
", Ask=",DoubleToString(m_symbol.Ask(),Digits()));
}
}
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data |
//+------------------------------------------------------------------+
bool RefreshRates()
{
//--- refresh rates
if(!m_symbol.RefreshRates())
return(false);
//--- protection against the return value of "zero"
if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
return(false);
//---
return(true);
}
//+------------------------------------------------------------------+
Журнал тестера, в режиме "Каждый тик на основе реальных тиков":
HS 3 10:09:03.888 Ticks EURUSD : real ticks begin from 2015.06.15 00:00:00
HO 0 10:09:03.915 RefreshRates (EURUSD,M1) 2016.11.23 00:00:19 OnTick, Error RefreshRates. Bid=0.00000, Ask=0.00000
KI 0 10:09:04.211 RefreshRates (EURUSD,M1) 2016.11.23 00:00:21 OnTick, Error RefreshRates. Bid=0.00000, Ask=0.00000
OJ 0 10:09:04.532 RefreshRates (EURUSD,M1) 2016.11.23 00:00:21 OnTick, Error RefreshRates. Bid=0.00000, Ask=0.00000
CK 0 10:09:04.853 RefreshRates (EURUSD,M1) 2016.11.23 00:00:21 OnTick, Error RefreshRates. Bid=0.00000, Ask=0.00000
JD 0 10:09:05.174 RefreshRates (EURUSD,M1) 2016.11.23 00:00:29 OnTick, Error RefreshRates. Bid=0.00000, Ask=0.00000
OE 0 10:09:05.494 RefreshRates (EURUSD,M1) 2016.11.23 00:00:36 OnTick, Error RefreshRates. Bid=0.00000, Ask=0.00000
LF 0 10:09:05.816 RefreshRates (EURUSD,M1) 2016.11.23 00:00:37 OnTick, Error RefreshRates. Bid=0.00000, Ask=0.00000
IG 0 10:09:06.137 RefreshRates (EURUSD,M1) 2016.11.23 00:00:40 OnTick, Error RefreshRates. Bid=0.00000, Ask=0.00000
KO 0 10:09:06.458 RefreshRates (EURUSD,M1) 2016.11.23 00:00:57 OnTick, There are no mistakes. Bid=1.06227, Ask=1.06295
NN 0 10:09:06.779 RefreshRates (EURUSD,M1) 2016.11.23 00:02:07 OnTick, There are no mistakes. Bid=1.06227, Ask=1.06295
RM 0 10:09:07.100 RefreshRates (EURUSD,M1) 2016.11.23 00:02:07 OnTick, There are no mistakes. Bid=1.06227, Ask=1.06285
EL 0 10:09:07.421 RefreshRates (EURUSD,M1) 2016.11.23 00:02:08 OnTick, There are no mistakes. Bid=1.06227, Ask=1.06285
GL 0 10:09:07.741 RefreshRates (EURUSD,M1) 2016.11.23 00:02:08 OnTick, There are no mistakes. Bid=1.06228, Ask=1.06285
GS 0 10:09:08.062 RefreshRates (EURUSD,M1) 2016.11.23 00:02:27 OnTick, There are no mistakes. Bid=1.06228, Ask=1.06285
MR 0 10:09:08.382 RefreshRates (EURUSD,M1) 2016.11.23 00:02:27 OnTick, There are no mistakes. Bid=1.06228, Ask=1.06275
OQ 0 10:09:08.703 RefreshRates (EURUSD,M1) 2016.11.23 00:02:28 OnTick, There are no mistakes. Bid=1.06228, Ask=1.06275
HQ 0 10:09:09.023 RefreshRates (EURUSD,M1) 2016.11.23 00:02:28 OnTick, There are no mistakes. Bid=1.06229, Ask=1.06275
HP 0 10:09:09.343 RefreshRates (EURUSD,M1) 2016.11.23 00:02:29 OnTick, There are no mistakes. Bid=1.06229, Ask=1.06275
MG 0 10:09:09.664 RefreshRates (EURUSD,M1) 2016.11.23 00:02:29 OnTick, There are no mistakes. Bid=1.06229, Ask=1.06276
DF 0 10:09:09.985 RefreshRates (EURUSD,M1) 2016.11.23 00:02:37 OnTick, There are no mistakes. Bid=1.06229, Ask=1.06276
GF 0 10:09:10.305 RefreshRates (EURUSD,M1) 2016.11.23 00:02:37 OnTick, There are no mistakes. Bid=1.06229, Ask=1.06275
Видно, что в OnInit() ошибок нет, а в OnTick() первые несколько запусков возвращают в ценах нули.