Особенности и ограничения тестирования торговых стратегий в MetaTrader 4
Если активно используются другие символы и периоды, то желательно их предварительно закачать на всю доступную глубину
Обьясняю подробнее.
Есть следующий кусок кода:
int start()
{
//----
RefreshRates();
NextPrice = MarketInfo("GBPUSD",MODE_BID);
Print (NextPrice);
lot = NormalizeDouble(AccountFreeMargin()*Risk / 100, 1);
if (lot > 20) lot = 20; if (lot < 0.1) return(0);
int total;
total=OrdersTotal();
и т.д.
При тестирровании на GBPUSD выдаются определённые результаты,
т.е. команда Print выводит правильные данные о текущей цене.
Если включить тестирование на EURUSD, Print начинает выдавать 0.
Попытки совершить сделку на чужом символе вернут ошибку
Спасибо и очень жаль.
Так, стоп.
Перечитал Особенности и ограничения тестирования еще раз, перепроверил код.
Всё-таки портфельное тестирование тут не при чём.
При попытке совершить сделку на чужом символе действительно
возвращается ошибка.
Но вышеописаный код озвращает не ошибку, а ноль.
Почему?
а) можно было увидеть смоделированную дату и значение символа
б) чтобы Вы смогли посмотреть в своей History наличие котировок на эту дату и по этому тайм-фрейму.
Да, не вычисляется.
Вот код:
//+------------------------------------------------------------------+ //| CheckMarketInfo.mq4 | //| Copyright © 2007, MetaQuotes Software Corp. | //| 'Использование данных GPBUSD при тестировании стратегии на EURUSD.' | //+------------------------------------------------------------------+ #property copyright "Copyright © 2007, MetaQuotes Software Corp." #property link "'Использование данных GPBUSD при тестировании стратегии на EURUSD.'" //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- Print(TimeToStr(Time[0])," Bid=",MarketInfo("GBPUSD",MODE_BID)); //---- return(0); } //+------------------------------------------------------------------+
1. С уверенностью заявляю история есть.
2. Цитата - "При тестировании на одном символе полностью запрещен доступ к данным других символов."
Не уверен.
Например следующий код при запуске тестирования на EURUSD совершенно нормальные результаты выдаёт.
....
if (iClose("GBPUSD",0,0) > iOpen("GBPUSD", 0,0))
{
Print (iClose("GBPUSD", 0, 0));
....
Т.е. Print выдаёт то, о чём его просят.
Далее:
Ответ Rosh-у:
Да не важно какое моделирование, воткните в код то, что написано выше, запустите тестирование на EURUSD - работает.
Воткните вот это:
...
Print (MarketInfo("GBPUSD", MODE_BID);
...
Выдаёт ноль.
Повторяю - тестирование на EURUSD...
to Maxor
С другого символа в тестере Вы можете использовать только те
данные, которые вернут функции iOpen(), iHigh(), iLow(), iClose(). А внутрь,
например, часового бара другого символа Вы можете проникнуть
только, запросив значения вышеуказанных функций с мЕньших ТФ.
Спасибо. Дельный совет. Попробую.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите пожалуйста subj.
Например при тестировании эксперта на EURUSD
срока Price = MarketInfo("GBPUSD",MODE_BID);
выдаёт 0.
При установке на RealTime график выдаются нормальные данные.
Можно ли вообще при тестиронии стратегии на одном иструменте
брать данные другого инструмента?