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

 
Artyom Trishkin #:

С каждого снимать отдельно. Зачем их в один-то паковать?

 А можно простейший пример?

 
Artyom Trishkin #:

С каждого снимать отдельно. Зачем их в один-то паковать?

В один паковать нужно для наглядности. Или для ленивых… Запускаешь стохастик, а он запускает ВВ… Видишь сколько калорий сэкономлено на отсутствии необходимости вручную запускать ВВ…? И не мешай пожалуйста полёту фантазии продвинутых трейдеров…

А по хорошему, это может пригодиться при запуске подвального индикатора и нанесения каких либо стрелок на графике по условию на подвальном. Пока это решается только графическими объектами… Но всё-же при любом варианте можно обойтись без отображения меток на графике… Достаточно засунуть нужное событие в отдельный буфер индикатора.

 
x572intraday #:

 А можно простейший пример?

Вы как хотите в советнике получать данные индикатора?

  1. Создали первый (любой) индикатор,
  2. Создали второй (любой) индикатор,
  3. Создали N-ный (любой) индикатор...
... и получайте данные от каждого из них, а потом используйте как Вам нужно
 
Alexey Viktorov #:

В один паковать нужно для наглядности. Или для ленивых… Запускаешь стохастик, а он запускает ВВ… Видишь сколько калорий сэкономлено на отсутствии необходимости вручную запускать ВВ…? И не мешай пожалуйста полёту фантазии продвинутых трейдеров…

А по хорошему, это может пригодиться при запуске подвального индикатора и нанесения каких либо стрелок на графике по условию на подвальном. Пока это решается только графическими объектами… Но всё-же при любом варианте можно обойтись без отображения меток на графике… Достаточно засунуть нужное событие в отдельный буфер индикатора.

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

 
Artyom Trishkin #:

Вы как хотите в советнике получать данные индикатора?

  1. Создали первый (любой) индикатор,
  2. Создали второй (любой) индикатор,
  3. Создали N-ный (любой) индикатор...
... и получайте данные от каждого из них, а потом используйте как Вам нужно

 Я хотел в общем индикаторе учитывать значения индикатора1 и индикатора2, то есть сделать фильтр на основе двух индикаторов.

 Индикатор запускается на M1:

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots   3

#property indicator_label1  "Upper"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrMediumSeaGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "Lower"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrMediumSeaGreen
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

#property indicator_label3  "Middle"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrMediumSeaGreen
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1

double UpperBuffer[];
double LowerBuffer[];
double MiddleBuffer[];
double delta=0.00014; //0.00350
int    handle;
int    bars_calculated=0;

int OnInit()
{
   SetIndexBuffer(0,UpperBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,LowerBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,MiddleBuffer,INDICATOR_DATA);

   PlotIndexSetInteger(0,PLOT_SHIFT,0);
   PlotIndexSetInteger(1,PLOT_SHIFT,0);
   PlotIndexSetInteger(2,PLOT_SHIFT,0);

   handle=iBands(_Symbol,PERIOD_CURRENT,20,0,2.0,PRICE_CLOSE);

   if(handle==INVALID_HANDLE)
      return(INIT_FAILED);

   return(INIT_SUCCEEDED);
}

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 values_to_copy;
   int calculated=BarsCalculated(handle);

   if(calculated<=0)
      return(0);

   if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
      if(calculated>rates_total) values_to_copy=rates_total;
      else                       values_to_copy=calculated;
   else
      values_to_copy=(rates_total-prev_calculated)+1;

   if(!FillArraysFromBuffers(MiddleBuffer,UpperBuffer,LowerBuffer,0,handle,values_to_copy)) return(0);

   for(int shift=0; shift<values_to_copy && !IsStopped(); shift++)
      if(UpperBuffer[shift]<=high[shift]-delta)
      {
         ObjectCreate(0,"RightPrice "+(string)(NormalizeDouble(high[shift],5)),OBJ_ARROW_RIGHT_PRICE,0,time[shift],high[shift]);
//         Print(values_to_copy, " ", shift, " ", high[shift]);
      }

   bars_calculated=calculated;

   return(rates_total);
}

bool FillArraysFromBuffers(double &base_values[],
                           double &upper_values[],
                           double &lower_values[],
                           int shift,
                           int ind_handle,
                           int amount
                           )
{
   if(CopyBuffer(ind_handle,0,-shift,amount,base_values)<0)
      return(false);

   if(CopyBuffer(ind_handle,1,-shift,amount,upper_values)<0)
      return(false);

   if(CopyBuffer(ind_handle,2,-shift,amount,lower_values)<0)
      return(false);

   return(true);
}

void OnDeinit(const int reason)
{
   if(handle!=INVALID_HANDLE)
      IndicatorRelease(handle);
}
 Красные верхние вешки рисуются на основе фильтра Bollinger Bands, но необходимо добавить ещё и фильтр Stochastic, например, по значениям > 90, чтобы отсеять лишние.
 
Artyom Trishkin #:

... и получайте данные от каждого из них, а потом используйте как Вам нужно

 А как будет выглядеть код вызова/получения данных?

 
x572intraday #:

 А как будет выглядеть код вызова/получения данных?

https://www.mql5.com/ru/docs/indicators/istochastic

Документация по MQL5: Технические индикаторы / iStochastic
Документация по MQL5: Технические индикаторы / iStochastic
  • www.mql5.com
iStochastic - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Но можно и проще
 
Artyom Trishkin #:
Но можно и проще

 Готов рассмотреть и этот вариант.

 
x572intraday #:

 Готов рассмотреть и этот вариант.

https://www.mql5.com/ru/docs/series/copybuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
CopyBuffer - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Причина обращения: