Ваши вопросы по языку MQL4

expforex

Программиров
Вопрос такой: мой советник в тестере работает как-то непонятно. Если тестируешь за прошлый день, то результаты такие, какие и ожидаешь(как и реально он работал в этот день), а стоит поставить тест на две недели, как может получиться так, что за прошлый день сов закрыл сделку совсем по другому, чем если тестировать только за этот день. Подскажите, почему же так?

потому что в тестере мт4 - постоянный спред, а в компании плавающий, в момент может сделка зарыться с другим спредом отсюда и разногласия.
 

Алекc1234

Местный житель
потому что в тестере мт4 - постоянный спред, а в компании плавающий, в момент может сделка зарыться с другим спредом отсюда и разногласия.

Не, не, это я прекрасно понимаю. Спред я всегда ставлю одинаковый, когда тестирую сов и за вчерашний день, и за двухнедельный период. Дело в другом - сделка закрывается совсем по другим параметрам и в другое время, когда тестирую за период в две недели. А когда за вчерашний день, то всё правильно тестируется. Может, это глюки самого тестера или 500 билда МТ4?
 

Алекc1234

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

expforex

Программиров
могу сказать больше даже на терминале 2 одной компании 2 терминалов, и даже на 2 терминалах мт4 и двух мт5 - котировки будут отличаться

_http://www.expforex.com/publ/sistemy_skalpinga_na_osnove_skorosti_kotirovok_podvodnye_kamni/3-1-0-98
 

Алекc1234

Местный житель
могу сказать больше даже на терминале 2 одной компании 2 терминалов, и даже на 2 терминалах мт4 и двух мт5 - котировки будут отличаться

_http://www.expforex.com/publ/sistemy_skalpinga_na_osnove_skorosti_kotirovok_podvodnye_kamni/3-1-0-98

И это я понимаю, то то и оно, что дело не в отличии котировок. Этот советник я сам разрабатывал, так что прекрасно знаю, когда и что он должен делать. И скажем сделка, которая на одном терминале закрывается в тестере в определённое время, на другом терминале у другого брокера закрывается совсем в другое время. Загадка, вообщем для меня...
 

expforex

Программиров
если ВЫ сами делали эксперта то должны знать такие вещи, выложите два стейта с двух терминалов. надеюсь ВЫ тестите на всех тиках?
 

Алекc1234

Местный житель
если ВЫ сами делали эксперта то должны знать такие вещи, выложите два стейта с двух терминалов. надеюсь ВЫ тестите на всех тиках?

Я сам его не делал, но он сделан по моему заказу, по моей стратегии. А дальше многое я сам в нём добавил. Вот графики за вчерашний день у двух разных брокеров одного и того же сова с теми же настройками.
 

Вложения

  • 1-ый.jpg
    1-ый.jpg
    29,4 КБ · Просмотры: 16
  • 2-ой.jpg
    2-ой.jpg
    35 КБ · Просмотры: 16

Алекc1234

Местный житель
Но главный вопрос для меня всё-таки почему разные результаты у сова в тестере за один день и за несколько дней? И это на одном и том же терминале.
 

qqmber

Почетный гражданин
Но главный вопрос для меня всё-таки почему разные результаты у сова в тестере за один день и за несколько дней? И это на одном и том же терминале.
Вы смещаете момент сотворения мира тестера на несколько дней и ожидаете получить тот же самый результат? Я даже предположить не могу, что получилось бы если суббота была бы в среду.
 

Алекc1234

Местный житель
Вы смещаете момент сотворения мира тестера на несколько дней и ожидаете получить тот же самый результат? Я даже предположить не могу, что получилось бы если суббота была бы в среду.

Да нет. Смотрите, что я имею в виду. Тестирую советник за пятницу скажем 7 июня(один день теста) - результат совпадает с тем, что и на реале. Потом тестирую сов за период с понедельника по пятницу - с 3 по 7 июня - и всё - пятничный результат уже другой. То есть тот же день - 7 июня - если тестируешь за один день - правильный результат, если тот же день тестируешь внутри периода(1-2 недели и больше) - результат другой!
 

qqmber

Почетный гражданин
Да нет. Смотрите, что я имею в виду. Тестирую советник за пятницу скажем 7 июня(один день теста) - результат совпадает с тем, что и на реале. Потом тестирую сов за период с понедельника по пятницу - с 3 по 7 июня - и всё - пятничный результат уже другой. То есть тот же день - 7 июня - если тестируешь за один день - правильный результат, если тот же день тестируешь внутри периода(1-2 недели и больше) - результат другой!
И я это имею в виду. Утром в пятницу по тестерному времени у первого советника еще нет истории, а у второго уже четыре дня.
Почему первый совпадает с реалом, не знаю, может реал тоже в пятницу запущен?
 

Алекc1234

Местный житель
И я это имею в виду. Утром в пятницу по тестерному времени у первого советника еще нет истории, а у второго уже четыре дня.
Почему первый совпадает с реалом, не знаю, может реал тоже в пятницу запущен?

У меня история не важна для совы. Сов торгует внутри дня и строго по времени(только в европейскую и американскую сессии). Так что история не влияет на его работу...
 

qqmber

Почетный гражданин
У меня история не важна для совы. Сов торгует внутри дня и строго по времени(только в европейскую и американскую сессии). Так что история не влияет на его работу...
Тогда действительно загадка. Print() или Alert() все условия закрытия.
 

hoz

Активный участник
Я уже, казалось бы, прошёл это и написал подобную функцию под себя. НО иногда заглядываю в библиотеки других программистов и смотрю как они пишут подобные вещи. Вот функция получения рыночной цены:

PHP:
double fGet_TradePrice (int fi_Price,           // Цена: 0 - Bid; 1 - Ask
                        bool fb_RealTrade,      // реальная торговля или оптимизация\тестирование
                        string fs_Symbol = "")  // валютная пара
{
    double ld_Price = 0.0;
//----
    if (fs_Symbol == "")
    {
       fs_Symbol = Symbol();
    }
    //RefreshRates();
    switch (fi_Price)
    {
       case 0:
          if (fb_RealTrade)
          {
             while (ld_Price == 0.0)
             {
                if (fs_Symbol == Symbol())
                {
                   ld_Price = Bid;
                }
                else
                {
                   ld_Price = MarketInfo (fs_Symbol, MODE_BID);
                }
                if (!IsExpertEnabled() || IsStopped())
                {
                   break;
                }
                Sleep (50);
                RefreshRates();
             }
          }
          else
          {
             if (fs_Symbol == Symbol())
             {
                return (Bid);
             }
             else
             {
                return (MarketInfo (fs_Symbol, MODE_BID));
             }
          }
          break;
       case 1:
          if (fb_RealTrade)
          {
             while (ld_Price == 0.0)
             {
                if (fs_Symbol == Symbol())
                {
                   ld_Price = Ask;
                }
                else
                {
                   ld_Price = MarketInfo (fs_Symbol, MODE_ASK);
                }
                if (!IsExpertEnabled() || IsStopped())
                {
                   break;
                }
                Sleep (50);
                RefreshRates();
             }
          }
          else
          {
             if (fs_Symbol == Symbol())
             {
                return (Ask);
             }
             else
             {
                return (MarketInfo (fs_Symbol, MODE_ASK));
             }
          }
          break;
   }
//----
   return (ld_Price);
}


А канкретно, возьмём хотяб этот кусок кода, в случае case 0:

PHP:
 while (ld_Price == 0.0) 
             { 
                if (fs_Symbol == Symbol()) 
                { 
                   ld_Price = Bid; 
                } 
                else 
                { 
                   ld_Price = MarketInfo (fs_Symbol, MODE_BID); 
                } 
                if (!IsExpertEnabled() || IsStopped()) 
                { 
                   break; 
                } 
                Sleep (50); 
                RefreshRates(); 
             }


Изначально всё идёт логично, исходя из символа инструмента получает цену. В конце цикла появляется:

PHP:
  if (!IsExpertEnabled() || IsStopped()) 
                { 
                   break; 
                } 
                Sleep (50); 
                RefreshRates();


По-моему это вообще не логично.
1. Во-первых, в функции получающей рыночной цены проверять включен ли эксперт и работает ли он по-моему не целесообразно.
2. Во-вторых, проверять после того как получили цену на if (!IsExpertEnabled() || IsStopped()) не логично, т.к. цена уже будет, и значится функция уже своё дело сделала.
Хотел просто узнал мнение других участников обсуждения, не более того.

Просто и программист вроде как довольно-таки адекватный писал библиотеки, но чем больше я смотрю на них, тем больше понимаю, что видимо лучше своих ничего не бывает. Все находятся моменты, которые противоречат моей точке зрения напрочь.
 

hoz

Активный участник
Значит на столько адекватный программист.

Я пока не особо понял на сколько он адекватный. Писал он Профиль 'TarasBY' _http://www.mql4.com/ru/users/TarasBY
Вообще по его замашкам видно, что кодит уже не мало. И есть грамотные моменты. Но попадаются вообще абсурдные вещи на мой взгляд... Хотя, опять же, нк сужу, т.к. не в курсе зачем ему это нужно.
 
Последнее редактирование модератором:

chillm

Активный участник
Подскажите пожалуйста, из-за чего советник может долго тестироваться?? У меня есть советник, который открывает сделки по индикатору стохастик, вместо стохастика я добавил открытие по другому аналогичному индикатору(по кол-ву буферов и т.д.), но после этого он стал тестировать 2013 год по нескольку часов, а стандартному со стохастиком это занимало не больше 3 минут

В приложении GOA - переделанный
 

Вложения

  • GOA.mq4
    40,2 КБ · Просмотры: 26
  • original.mq4
    38,8 КБ · Просмотры: 22
Последнее редактирование:

}{ottabch

Интересующийся
Как отредактировать индикатор без mql4 source file?

Как отредактировать индикатор без mql4 source file?
 

conceptor

Активный участник
У меня возникла проблема, после недавнего обновления мт4 с добавлением торговли в один клик, у меня перестали обнаруживаться некоторые индикаторы расширением mq4. До обновления все работало нормально... Что можно сделать?
 
Верх