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

 
yiduwi:

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

значит Вы ставите стрелку на второй бар, а не на первый - само же не рисуется? )))

наверное тут Вы прибавили лишнюю единичку  BufferDN[i+1]=high[i+1];  

 
Igor Makanu:

значит Вы ставите стрелку на второй бар, а не на первый - само же не рисуется? )))

наверное тут Вы прибавили лишнюю единичку  BufferDN[i+1]=high[i+1];  

Ух, без единицы, вообще стрелка ставится на третий бар, Код небольшой, где я напортачил?

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot UP
#property indicator_label1  "UP"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrLawnGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot DN
#property indicator_label2  "DN"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrDeepPink
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//--- indicator buffers
double         BufferUP[];
double         BufferDN[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferUP);
   SetIndexBuffer(1,BufferDN);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   PlotIndexSetInteger(1,PLOT_ARROW,234);

//---

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<3) return(0);
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-3;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--)
     {
      if (fabs(high[i+1]-high[i+2]) <= 0.0*_Point)
        {
         BufferDN[i]=high[i];
        }
     }
//--- return value of prev_calculated for next call

   return(rates_total);
  }
На первый бар ставится, если так 
BufferDN[i+2]=high[i+2];
Не понимаю.
 
Igor Makanu:

вот подобрал решение, но по моему что то не учел

По логике все верно.

 
yiduwi:

Ух, без единицы, вообще стрелка ставится на третий бар, Код небольшой, где я напортачил?

На первый бар ставится, если так Не понимаю.

наверное так, но под МТ5 толком не пишу, могу ошибиться 

//+------------------------------------------------------------------+
//|                                                          tst.mq5 |
//|                                                            IgorM |
//|                              https://www.mql5.com/ru/users/igorm |
//+------------------------------------------------------------------+
#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot UP
#property indicator_label1  "UP"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrLawnGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot DN
#property indicator_label2  "DN"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrDeepPink
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

input int Pips=5;
//--- indicator buffers
double         BufferUP[];
double         BufferDN[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferUP);
   SetIndexBuffer(1,BufferDN);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   PlotIndexSetInteger(1,PLOT_ARROW,234);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int limit=rates_total-prev_calculated;
   if(limit>1 || prev_calculated==0)
     {
      limit=rates_total-2;
      ArrayInitialize(BufferUP,EMPTY_VALUE);
      ArrayInitialize(BufferDN,EMPTY_VALUE);
     }
   for(int i=limit; i>=0; i--)
     {
      if(fabs(high[i+1]-high[i])<=_Point*(double)Pips) BufferDN[i]=high[i];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Igor Makanu:

наверное так, но под МТ5 толком не пишу, могу ошибиться 

Тоже, на второй бар ставит у меня)

 
Igor Makanu:

спасибо, это одна из ошибок, но все равно не соображу как получить из 159 002 секунд 44 часов 10 минут 2 секунд (онлайн калькулятор )) )


вот подобрал решение, но по моему что то не учел

2019.06.18 11:46:22.691 tstss EURUSD,H1: h = 44 , m = 10 , s = 2

По моему так проще

 int timeinsec = 159002;
 int sec = timeinsec%60;
 int min = ((timeinsec-sec)%3600)/60;
 int hou = (timeinsec-sec-min)/3600;
 
yiduwi:

Тоже, на второй бар ставит у меня)

должен стрелку ставить только там где условие выполняется, да кстати вспомнил для МТ5 лучше условие полное провисать:

if(fabs(high[i+1]-high[i])<=_Point*(double)Pips) BufferDN[i]=high[i]; else BufferDN[i]=EMPTY_VALUE;
Alexey Viktorov:

По моему так проще

годится! спасибо! да примерно такое и хотел!

 
Есть код в котором много вызовов Print. Нельзя как нибудь без убирания из кода Print быстро все их отключить \ Включить обратно ?  Пока только такой вариант вижу:
bool L=true;
if(L)Print("123");

Т.е заменить все "Print(" На  "if(L)Print(" , может ещё какие нибудь варианты есть ?

 
pivomoe:
Есть код в котором много вызовов Print. Нельзя как нибудь без убирания из кода Print быстро все их отключить \ Включить обратно ?  Пока только такой вариант вижу:

Т.е заменить все "Print(" На  "if(L)Print(" , может ещё какие нибудь варианты есть ?

Во входных параметрах вывести флаг "Печать". Работать будет как и Ваш код, только сам флаг (переменная bool) будет во входных параметрах.

 

Здравствуйте !

Оптимизация по всем символам в тестере МТ5 отказывается работать...

Просветите пожалуйста, как ее уговорить ?

СПАСИБО.

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