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

 
Artyom Trishkin:

Ты ж задал чёткий вопрос:

и получил такой же абсолютно чёткий ответ: в 99.99% случаев :)

Цифру процентов сам придумал :)

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

 

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

Всего данных 100, посчитанных 100 100-100=0...

Прочтите мои ответы Артёму. Их всего два.

 
Сергей Таболин:Вопрос стоит - почему при заполнении (корректном!) индикаторных буферов свечи не отрисовываются?

Ткните носом! 

Вы уверены что заполнение корректно?

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

[Удален]  
Alexey Viktorov:

Вы уверены что заполнение корректно?

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

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

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

2020.08.08 10:38:51.184 newCandles (USDJPY,H1)  ~~~~ Предварительный расчёт индикатора.
2020.08.08 10:38:51.343 newCandles (USDJPY,H1)  2019.01.02 06:00:00 >>> Свеча 00000 >> open = 109.419 hihg = 109.462 low = 105.388 close = 105.388 > Сформирована за 122162 тика.
2020.08.08 10:38:51.785 newCandles (USDJPY,H1)  2019.01.03 00:41:15 >>> Свеча 00001 >> open = 105.388 hihg = 109.388 low = 105.268 close = 109.388 > Сформирована за 1336258 тиков.
2020.08.08 10:38:55.673 newCandles (USDJPY,H1)  2019.01.17 21:50:34 >>> Свеча 00002 >> open = 109.388 hihg = 112.398 low = 105.388 close = 105.388 > Сформирована за 11546466 тиков.
2020.08.08 10:38:57.434 newCandles (USDJPY,H1)  2019.08.09 18:57:55 >>> Свеча 00003 >> open = 105.388 hihg = 109.388 low = 104.453 close = 109.388 > Сформирована за 5400916 тиков.
2020.08.08 10:38:59.257 newCandles (USDJPY,H1)  2019.11.07 17:57:24 >>> Свеча 00004 >> open = 109.388 hihg = 112.225 low = 105.384 close = 105.384 > Сформирована за 5555641 тик.
2020.08.08 10:38:59.391 newCandles (USDJPY,H1)  2020.03.06 11:47:26 >>> Свеча 00005 >> open = 105.384 hihg = 105.732 low = 101.377 close = 101.377 > Сформирована за 272724 тика.
2020.08.08 10:38:59.488 newCandles (USDJPY,H1)  2020.03.09 15:37:48 >>> Свеча 00006 >> open = 101.377 hihg = 105.378 low = 101.187 close = 105.378 > Сформирована за 314847 тиков.
2020.08.08 10:39:00.400 newCandles (USDJPY,H1)  2020.03.10 21:05:27 >>> Свеча 00007 >> open = 105.378 hihg = 109.385 low = 103.094 close = 109.385 > Сформирована за 2045775 тиков.
2020.08.08 10:39:03.802 newCandles (USDJPY,H1)  2020.03.19 04:13:11 >>> Свеча 00008 >> open = 109.385 hihg = 111.711 low = 105.385 close = 105.385 > Сформирована за 10250092 тика.
2020.08.08 10:39:03.974 newCandles (USDJPY,H1)  ~~~~ Предварительный расчёт индикатора закончен.

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

 
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 (это самый правый бар, который Вы видите...