Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1238

 
Alexey Viktorov:

А первая часть строки и вопроса в целом?

Ну мы ж программисты. Полный и пустой стаканы на тумбочке и всё такое...

Впрочем, я расписал три возможных сценария, и что при них происходит в основном цикле расчёта индикатора:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Вопросы от начинающих MQL5 MT5 MetaTrader 5

Artyom Trishkin, 2020.08.06 15:17

rates_total - prev_calculates очень даже действенная конструкция.

  • Если равно нулю - значит расчёт на текущем баре по тику
  • Если равно 1 - значит новый бар и рассчитываться будут два бара - прошлый и текущий
  • Если больше 1 - значит либо первый запуск, либо изменение в исторических данных
Мы же limit рассчитываем. А в цикле от limit до больше, либо равно нулю рассчитываем данные индикатора. Ну и сам посчитай чему limit равен при расчёте limit = rates_total - prev_calculates.

Вполне вероятна и четвёртая ситуация - меньше нуля. Но она просто никак не обрабатывается в цикле, который рассчитывается for(int i=limit; i>=0; i--) ...

Просто подумать мало кто хочет - обычно просто копипастой занимаются. Соответственно, первый запуск и изменение истории - это когда limit>1, ну и значит нужно писать про первый запуск в такой ситуации, а не проверять на ноль prev_calculated.

 
Сергей Таболин:

Алексей, мне интересно ))) Но я не вижу ошибку! А учиться - не зазорно. И если кто-то умнее или опытнее, то и в этом ничего плохого не вижу.

Вот только что запустил индикатор с большим входным параметром размера свечи. Ну чтобы свечей было поменьше

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

Я вам предлагал

Alexey Viktorov:

……… начать с выделения баров через N-ное количество, или хотя-бы одного последнего закрытого. Вы это попробовали? Отрисовывается?

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

 
Alexey Viktorov:

Я вам предлагал

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

Боюсь, я Вас не понимаю... Какой бар Вы предлагаете выделить? Который сформировался у меня? Или на графике?

Если на графике, то они мне не нужны априори. Ибо на любом тф индикатор считается одинаково.

Предыдущий расчёт был на H1, а сейчас на H4. Результат один-в-один.

2020.08.08 11:06:14.580 newCandles (USDJPY,H4)  ~~~~ Предварительный расчёт индикатора.
2020.08.08 11:06:14.789 newCandles (USDJPY,H4)  2019.01.02 06:00:00 >>> Свеча 00000 >> open = 109.419 hihg = 109.462 low = 105.388 close = 105.388 > Сформирована за 122162 тика.
2020.08.08 11:06:15.230 newCandles (USDJPY,H4)  2019.01.03 00:41:15 >>> Свеча 00001 >> open = 105.388 hihg = 109.388 low = 105.268 close = 109.388 > Сформирована за 1336258 тиков.
2020.08.08 11:06:19.056 newCandles (USDJPY,H4)  2019.01.17 21:50:34 >>> Свеча 00002 >> open = 109.388 hihg = 112.398 low = 105.388 close = 105.388 > Сформирована за 11546466 тиков.
2020.08.08 11:06:20.788 newCandles (USDJPY,H4)  2019.08.09 18:57:55 >>> Свеча 00003 >> open = 105.388 hihg = 109.388 low = 104.453 close = 109.388 > Сформирована за 5400916 тиков.
2020.08.08 11:06:22.592 newCandles (USDJPY,H4)  2019.11.07 17:57:24 >>> Свеча 00004 >> open = 109.388 hihg = 112.225 low = 105.384 close = 105.384 > Сформирована за 5555641 тик.
2020.08.08 11:06:22.725 newCandles (USDJPY,H4)  2020.03.06 11:47:26 >>> Свеча 00005 >> open = 105.384 hihg = 105.732 low = 101.377 close = 101.377 > Сформирована за 272724 тика.
2020.08.08 11:06:22.822 newCandles (USDJPY,H4)  2020.03.09 15:37:48 >>> Свеча 00006 >> open = 101.377 hihg = 105.378 low = 101.187 close = 105.378 > Сформирована за 314847 тиков.
2020.08.08 11:06:23.736 newCandles (USDJPY,H4)  2020.03.10 21:05:27 >>> Свеча 00007 >> open = 105.378 hihg = 109.385 low = 103.094 close = 109.385 > Сформирована за 2045775 тиков.
2020.08.08 11:06:27.124 newCandles (USDJPY,H4)  2020.03.19 04:13:11 >>> Свеча 00008 >> open = 109.385 hihg = 111.711 low = 105.385 close = 105.385 > Сформирована за 10250092 тика.
2020.08.08 11:06:27.296 newCandles (USDJPY,H4)  ~~~~ Предварительный расчёт индикатора закончен.
 
Сергей Таболин:

Боюсь, я Вас не понимаю... Какой бар Вы предлагаете выделить? Который сформировался у меня? Или на графике?

Если на графике, то они мне не нужны априори. Ибо на любом тф индикатор считается одинаково.

Предыдущий расчёт был на H1, а сейчас на H4. Результат один-в-один.

Алексей вам сказал, что сначала бы сделать так, чтобы ваш индикатор хотя бы просто свечи рисовал. Такие, какие они есть. Хотя бы на текущем баре. Как получится это сделать - считайте, что первый шаг к пониманию прошли. Но желательно, чтобы получилось не методом тыка и перебора разных параметров, а умом своим.

Причём тут "надо/не надо априори"? Оно вам очень надо - раз не можете свечу нарисовать из всего четырёх значений.

 
Artyom Trishkin:

Алексей вам сказал, что сначала бы сделать так, чтобы ваш индикатор хотя бы просто свечи рисовал. Такие, какие они есть. Хотя бы на текущем баре. Как получится это сделать - считайте, что первый шаг к пониманию прошли. Но желательно, чтобы получилось не методом тыка и перебора разных параметров, а умом своим.

Причём тут "надо/не надо априори"? Оно вам очень надо - раз не можете свечу нарисовать из всего четырёх значений.

Понял. Сделаю. ...

 
Здравствуйте, форумчане. Подскажите пожалуйста как сделать последовательное получение сигналов. Например начальный получаем с 4х часового таймфрейма, потом часовой, 15 минут и вход в сделку только на минимальном? Код позаимствовал из CodeBase 
//+------------------------------------------------------------------+
//| Search trading signals                                           |
//+------------------------------------------------------------------+
bool SearchTradingSignals(void)
  {
   if(m_prev_bars==m_last_deal_in) // on one bar - only one deal
      return(true);
//---
   double ma[];
   MqlRates rates_1[],rates_2[],rates_3[],rates_4[];
   ArraySetAsSeries(ma,true);
   ArraySetAsSeries(rates_1,true);
   ArraySetAsSeries(rates_2,true);
   ArraySetAsSeries(rates_3,true);
   ArraySetAsSeries(rates_4,true);
   int start_pos=0,count=3;
   if(!iGetArray(handle_iMA,0,start_pos,count,ma) ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_1,start_pos,count,rates_1)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_2,start_pos,count,rates_2)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_3,start_pos,count,rates_3)!=count ||
      CopyRates(m_symbol.Name(),Inp_Timeframe_4,start_pos,count,rates_4)!=count)
     {
      return(false);
     }
   int size_need_position=ArraySize(SPosition);
   if(size_need_position>0)
      return(true);

   if((rates_1[0].open<rates_1[0].close) && (rates_2[0].open<rates_2[0].close) &&
      (rates_3[0].open<rates_3[0].close) && (rates_4[0].open<rates_4[0].close) && ma[2]<ma[1] && ma[1]<ma[0])
     {
      if(!InpReverse)
        {
         if(InpTradeMode!=sell)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
            return(true);
           }
        }
      else
        {
         if(InpTradeMode!=buy)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
            return(true);
           }
        }
     }
   if((rates_1[0].open>rates_1[0].close) && (rates_2[0].open>rates_2[0].close) &&
      (rates_3[0].open>rates_3[0].close) && (rates_4[0].open>rates_4[0].close) && ma[2]>ma[1] && ma[1]>ma[0])
     {
      if(!InpReverse)
        {
         if(InpTradeMode!=buy)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_SELL;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal SELL");
            return(true);
           }
        }
      else
        {
         if(InpTradeMode!=sell)
           {
            ArrayResize(SPosition,size_need_position+1);
            SPosition[size_need_position].pos_type=POSITION_TYPE_BUY;
            if(InpPrintLog)
               Print(__FILE__," ",__FUNCTION__,", OK: ","Signal BUY");
            return(true);
           }
        }
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+

Four Timeframes 2
Four Timeframes 2
  • www.mql5.com
На одном из таймфреймов (задается через параметр 'MA Trend ') создаётся трендовый индикатор iMA (Moving Average, MA). Именно этот индикатор будет работать в качестве трендового фильтра. Тренд определяется так: MA на трёх барах (#2, #1 и #0) имеет одно направление. Советник проверяет направление бара #0 (это самый правый бар, который Вы видите...
 
Здравствуйте. Решил попробовать освоить и язык mql5 и платформу мт5. Вопрос по тестеру. По котировкам. Поставил пару audcad, на платформе от Велтрейд. У меня в советнике есть небольшое информационное табло. В режиме визуализации вижу, что спреды не соответствуют действительности (очень маленькие, похожие на спреды eurusd). Обратился в техподдержку компании (Велтрейд) - разные ли спреды для мт4 и мт5. Ответили, что одинаковые. Тогда как понимать такое не соответствие в тестере?  Далее. Попробовал оптимизировать по генетическому коду. Загрузка процессора 100% и после нескольких минут работы копм вырубается (процессор phenom II x4 955 (4 ядра, 3.2 ГГц), кулер стоит с запасом). После двух раз, решил больше не рисковать. Как такое понимать? Потом, при тестировании без визуализации вообще ни какой информации по сделкам, только график. Это так и есть, или я делаю что-то не так. Да в режиме визуализации с информативностью туговато. Собственно меня больше всего беспокоит не соответствие спредов. Короче, первое впечатление - полное разочарование. Но сбрасываю на то, что еще не разобрался.
 
Youri Lazurenko:
Здравствуйте. Решил попробовать освоить и язык mql5 и платформу мт5. Вопрос по тестеру. По котировкам. Поставил пару audcad, на платформе от Велтрейд. У меня в советнике есть небольшое информационное табло. В режиме визуализации вижу, что спреды не соответствуют действительности (очень маленькие, похожие на спреды eurusd). Обратился в техподдержку компании (Велтрейд) - разные ли спреды для мт4 и мт5. Ответили, что одинаковые. Тогда как понимать такое не соответствие в тестере?  Далее. Попробовал оптимизировать по генетическому коду. Загрузка процессора 100% и после нескольких минут работы копм вырубается (процессор phenom II x4 955 (4 ядра, 3.2 ГГц), кулер стоит с запасом). После двух раз, решил больше не рисковать. Как такое понимать? Потом, при тестировании без визуализации вообще ни какой информации по сделкам, только график. Это так и есть, или я делаю что-то не так. Да в режиме визуализации с информативностью туговато. Собственно меня больше всего беспокоит не соответствие спредов. Короче, первое впечатление - полное разочарование. Но сбрасываю на то, что еще не разобрался.

Поставьте тестирование на основе реальных тиков. Тогда у вас пропадут все сомнения в действительности спреда.


 
Alexey Viktorov:

Поставьте тестирование на основе реальных тиков. Тогда у вас пропадут все сомнения в действительности спреда.


Спасибо, сейчас попробую. А что посоветуете на счет оптимизации. Меня больше интересует скорость. Качество можно подкорректировать потом, при тестировании.

P.S. Сделал как вы советовали, спреды те же. Перед этим специально проверил тип счета. По спецификации спред на  audcad 4.1 (плавающий). На этом же счете (демо график) 4.7 (плавающий). В тестере же, мт5, максимум 2.8 (плавающий в еще меньшую сторону).  

 
Youri Lazurenko:

Спасибо, сейчас попробую. А что посоветуете на счет оптимизации. Меня больше интересует скорость. Качество можно подкорректировать потом, при тестировании.

Ничего не могу посоветовать. Я не пользуюсь оптимизацией. Считаю это шарлатанством.

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