alex30774

 
Уровень 19

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2089



РЕКОМЕНДУЮ



Стелочный индикатор на основе индикатора MACD_Signal

Здравствуйте, Андрей.
Напишите пожалуйста стрелочный индикатор на основе другого стрелочного индикатора MACD_Signal(нужно отфильтровать в нём ненужные сигналы)
Индикатор должен выставлять стрелки на покупку при условии, что индикатор MACD_Signal ниже нуля, текущая стрелка выше предыдущей и количество сигналов на покупку(синих стрелок индикатора MACD_Signal) не меньше двух.


На продажу зеркально:

  • 0
  • Просмотров: 1290
  • 16 мая 2021, 20:27
  • alex30774
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Советник против тренда
Следующая запись в группе  
Еврейский танец
15 мая 2021
17 мая 2021

Комментарии (9)

+
0
что то вы лишнего завернули
avatar

  34  AM2 Сообщений: 15889 - Андрей

  • 16 мая 2021, 22:31
+
0
Если это сложно, то хотя бы сделайте по двум условиям:
индикатор должен выставлять стрелки на покупку при условии, что индикатор MACD_Signal ниже нуля, текущая стрелка выше предыдущей.На продажу зеркально.
avatar

  19  alex30774 Автор Сообщений: 715

  • 17 мая 2021, 05:18
+
0
вы индикатор не приложили
avatar

  34  AM2 Сообщений: 15889 - Андрей

  • 17 мая 2021, 21:26
+
0
Извините запямятовал, в виде кода подойдёт

//+------------------------------------------------------------------+
//|                                                  MACD Signal.mq4 |
//|                              Copyright © 2011, Khlystov Vladimir |
//|                                         http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, cmillion@narod.ru"
#property link      "http://cmillion.narod.ru"
#property  indicator_separate_window
#property  indicator_buffers 6
#property  indicator_color1  Black
#property  indicator_color2  Gray
#property  indicator_color3  Green
#property  indicator_color4  Red
#property  indicator_color5  Blue
#property  indicator_color6  Red
#property  indicator_width7  2

extern int FastEMA   = 12;
extern int SlowEMA   = 26;
extern int SignalSMA = 9;

double     MacdBuffer[];
double     MacdBufferRed[];
double     MacdBufferBlue[];
double     SignalBuffer[];
double     SignalBufferRed[];
double     SignalBufferBlue[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexDrawBegin(1,SignalSMA);
   IndicatorDigits(Digits+1);
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexStyle(3,DRAW_HISTOGRAM);
   SetIndexStyle(4,DRAW_ARROW,0,2);
   SetIndexArrow(4,233);
   SetIndexStyle(5,DRAW_ARROW,0,2);
   SetIndexArrow(5,234);

   SetIndexBuffer(0,MacdBuffer);
   SetIndexBuffer(1,SignalBuffer);
   SetIndexBuffer(2,MacdBufferRed);
   SetIndexBuffer(3,MacdBufferBlue);
   SetIndexBuffer(4,SignalBufferRed);
   SetIndexBuffer(5,SignalBufferBlue);

   IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"Signal");

   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0)  return(-1);
   if(counted_bars > 0)   counted_bars--;
   int limit = Bars - counted_bars;
   if(counted_bars==0) limit-=1+1;

   for(int i=0; i<limit; i++)
      MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

   for(i=0; i<limit; i++)
      SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);

   for(i=0; i<limit; i++)
      if(MacdBuffer[i+1]<MacdBuffer[i]) MacdBufferRed[i]=MacdBuffer[i];
   else MacdBufferBlue[i]=MacdBuffer[i];

   for(i=0; i<limit; i++)
     {
      if(SignalBuffer[i+1]<MacdBuffer[i+1]&& SignalBuffer[i]>MacdBuffer[i]) SignalBufferBlue[i]=SignalBuffer[i];
      if(SignalBuffer[i+1]>MacdBuffer[i+1] && SignalBuffer[i]<MacdBuffer[i]) SignalBufferRed[i]=SignalBuffer[i];
     }

   return(0);
  }
//+------------------------------------------------------------------+
avatar

  19  alex30774 Автор Сообщений: 715

  • 18 мая 2021, 05:49
+
0
Если не запрещенно то вот ссылка
www.mql5.com/ru/code/10295
avatar

  19  alex30774 Автор Сообщений: 715

  • 18 мая 2021, 06:12
+
0
на 20-е
avatar

  34  AM2 Сообщений: 15889 - Андрей

  • 18 мая 2021, 18:34
+
0
Спасибо, буду ждать.
avatar

  19  alex30774 Автор Сообщений: 715

  • 18 мая 2021, 18:37
+
0
здесь удалось только отфильтровать стрелки больше или меньше нуля. надо писать функцию с вложенными циклами. я попытался написать эти функции, но надо еще дольше сидеть. дальше не ко мне.

вот то что написал:




//+------------------------------------------------------------------+
//|                                                      MACDSig.mq4 |
//|                                              Copyright 2021, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property  indicator_buffers 2

extern int FastEMA   = 12;
extern int SlowEMA   = 26;
extern int SignalSMA = 9;

extern string IndName = "MACD_Signal";

double up[];
double dn[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   SetIndexStyle(0,DRAW_ARROW,0,2,Blue);
   SetIndexArrow(0,233);
   SetIndexBuffer(0,up);

   SetIndexStyle(1,DRAW_ARROW,0,2,Red);
   SetIndexArrow(1,234);
   SetIndexBuffer(1,dn);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Up(int n=0)
  {
   int count=0;
   double ups=0;

   for(int i=0; i<Bars; i++)
     {
      double lim = iCustom(NULL,0,IndName,4,i);

      if(lim!=EMPTY_VALUE && lim<0)
        {
         count++;
        }

      if(count==n)
        {
         ups=Low[i];
         break;
        }
     }

   return(ups);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Dn(int n=0)
  {
   int count=0;
   double dns=0;

   for(int i=0; i<Bars; i++)
     {
      double red = iCustom(NULL,0,IndName,5,i);

      if(red!=EMPTY_VALUE && red>0)
        {
         count++;
        }

      if(count==n)
        {
         dns=High[i];
         break;
        }
     }

   return(dns);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   for(int i=0; i<Bars; i++)
     {
      double lim = iCustom(NULL,0,IndName,4,i);
      double red = iCustom(NULL,0,IndName,5,i);

      if(lim!=EMPTY_VALUE && lim<0)
         up[i]=low[i];

      if(red!=EMPTY_VALUE && red>0)
         dn[i]=high[i];
     }

   Comment("\n UP1: ",Up(1),
           "\n UP2: ",Up(2),
           "\n UP3: ",Up(3),
           "\n DN1: ",Dn(1),
           "\n DN2: ",Dn(2),
           "\n DN3: ",Dn(3));

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

avatar

  34  AM2 Сообщений: 15889 - Андрей

  • 19 мая 2021, 22:45
+
0
Ясно, спасибо что не отказали.
avatar

  19  alex30774 Автор Сообщений: 715

  • 20 мая 2021, 05:38

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари