Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 943

 

Ребята помогите пожалуйста в коде поменять ТФ д1\ неделя на любой другой.

Как поменять на Н1 или минуты знаю.

Интересует как поменять на м30, м15, м5?

//|                                               For__red_r2005.mq4 |
//|                                       Copyright © 2010, PapaYozh |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, PapaYozh"
#property link      "*"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Coral
#property indicator_color2 CornflowerBlue
#property indicator_width1 2
#property indicator_width2 2

// ---- buffers ----
double BuffD[];
double BuffM[];
//+------------------------------------------------------------------+
int init()
{
   SetIndexBuffer(0,BuffD);
   SetIndexEmptyValue(0,EMPTY_VALUE);
   SetIndexStyle(0,DRAW_SECTION,EMPTY,EMPTY);

   SetIndexBuffer(1,BuffM);
   SetIndexEmptyValue(1,EMPTY_VALUE);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,EMPTY);
   
   return(0);
} // init()
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
} // deinit()
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
int start()
{
   int    shift;

   shift = Bars - 1 - IndicatorCounted();
   for ( ; shift>0 ; shift-- )
   {
      if ( TimeDayOfYear(Time[shift]) != TimeDayOfYear(Time[shift-1]) )
      {
         BuffD[shift]   = Close[shift];
         if ( TimeDayOfWeek(Time[shift-1]) == 1 )
            BuffM[shift]   = Close[shift];
         else
            BuffM[shift]   = EMPTY_VALUE;
      }
      else
      {
         BuffD[shift]   = EMPTY_VALUE;
         BuffM[shift]   = EMPTY_VALUE;
      }
   }
   return(0);
} // start()
//+------------------------------------------------------------------+
 
Нужно приостановить работу индикатора на некоторое время, но функцию Sleep(), как указано в справке, нельзя вызвать из пользовательского индикатора... Есть другие способы?
 
Yevhenii Levchenko:
Нужно приостановить работу индикатора на некоторое время, но функцию Sleep(), как указано в справке, нельзя вызвать из пользовательского индикатора... Есть другие способы?

выход по условию в OnCalculate() без расчета значений индикатора- самое простое счетчик тиков, чуть сложнее использовать таймер, он работает в индикаторах

 
Igor Makanu:

выход по условию в OnCalculate() без расчета значений индикатора- самое простое счетчик тиков, чуть сложнее использовать таймер, он работает в индикаторах

Спасибо!

Сделал с помощью таймера. Этот вариант показался мне проще...

 
Yevhenii Levchenko:

Спасибо!

Сделал с помощью таймера. Этот вариант показался мне проще...

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[])
  {
//---
   static int TickCount = 0;
   TickCount--;
   if(TickCount>0) return(rates_total);
   TickCount=10;
 
Igor Makanu:

Что-то я совсем забыл за статические переменные... Спасибо :)

А если обычную переменную объявить как глобальную, она ж по сути, в определенном смысле, как и статическая будет? В смысле, доступна для изменения со всех мест программы?

 

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

Подскажите, пожалуйста, можно ли передать в функцию по ссылке динамический массив типа структуры?

Вот, например, передать массив struct_name_array[] в Func(), чтобы его там обработать и заполнить:

struct StructName {int x;
                   int y;} struct_name_array[];

void Func (int &x[],
           int &y[])
        {
        }

Как конкретно оформляется передача, если она вообще возможна? Как оформить параметры функции? По гайдам для C++ что-то не выходит.

Спасибо.

 
Mikhail Sobolev:

Вот, например, передать массив struct_name_array[] в Func(), чтобы его там обработать и заполнить:

//+------------------------------------------------------------------+
struct StructName
  {
   int               x;
   int               y;
  }
struct_name_array[];
//+------------------------------------------------------------------+
void OnStart()
  {
   ArrayResize(struct_name_array,5);
   for(int i=0;i<5;i++)
     {
      struct_name_array[i].x = i;
      struct_name_array[i].y = i*100;
     }
   Func(struct_name_array);
   for(int i=0;i<5;i++)
     {
      printf("%s : s[%d].x = %d , s[%d].y = %d",__FUNCTION__,i,struct_name_array[i].x,i,struct_name_array[i].y);
     }
  }
//+------------------------------------------------------------------+
void Func(StructName &s[])
  {
   for(int i=0;i<ArraySize(s);i++)
     {
      printf("%s : s[%d].x = %d , s[%d].y = %d",__FUNCTION__,i,s[i].x,i,s[i].y);
      s[i].x*=33;
      s[i].y*=12;
     }
  }
//+------------------------------------------------------------------+
 

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

Понимаю, что я уже достал тут многих своими тупыми вопросами, прошу отнестись снисходительно к следующему и все же объяснить, что здесь не так:

        if((op1-lo1)>50 && (cl1-lo1)<10)
        {  Alert("VertLine");
        string obj_name="VertLine";
        datetime time=Time[0];
        color col = clrGreen; 
        ObjectCreate(0,obj_name,OBJ_VLINE,0,time,0,0,0);
        ObjectSetInteger(0,obj_name,OBJPROP_COLOR,col);
        }

Алерт выдается, а вертикальной линии нет. В чем причина?

 
novichok2018:

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

Понимаю, что я уже достал тут многих своими тупыми вопросами, прошу отнестись снисходительно к следующему и все же объяснить, что здесь не так:

Алерт выдается, а вертикальной линии нет. В чем причина?

Все-таки даже само обращение на форум уже дает толчок к пониманию. Вроде понял - линия-то нарисована, да только одна. Чтоб рисовать другие, надо эту стереть.