alekseifx

 
Уровень 8

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


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

Рейтинг 2146



РЕКОМЕНДУЮ



Подправить индикатор

Есть индикатор с алертом, но сигналит только на селл, а хотелось бы и на бай.
MACD Alert2.mq4 (3 Kb)
  • 0
  • Просмотров: 3512
  • 12 января 2015, 10:08
  • alekseifx
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Мне нельзя показывать такие вещи! Напишу ведь!
Следующая запись в группе  
Модификация индикатора FxF
11 января 2015
12 января 2015

Брокер для ваших роботов, 15 лет на рынке

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

+
+1
Вот сижу смотрю сейчас почему так однобоко получается :) 
avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 12 января 2015, 22:18
+
0
ну, я точно не знаю…
avatar

  8  alekseifx Автор Сообщений: 179

  • 12 января 2015, 22:24
+
+1
Попробуйте такой вариант:


//+------------------------------------------------------------------+
//|                                                  MACD Alert2.mq4 |
//|                                       http://www.trading-team.it |
//+------------------------------------------------------------------+
#property copyright "Silvio Invernici"
#property link      "http://www.trading-team.it"

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Silver
#property indicator_color2 Blue
#property indicator_color3 Green
#property indicator_color4 Red
#property indicator_width1 2
#property indicator_width3 3
#property indicator_width4 3

extern int FastEMA   = 12;
extern int SlowEMA   = 26;
extern int SignalSMA = 9;
extern bool Alerts   = false;

double Macd_Buffer[];
double Signal_Buffer[];
double Green_Buffer[];
double Red_Buffer[];

int Bars1 = 0;
int Bars2 = 0;
int Bars3 = 0;
int Bars4 = 0;

string IndiName;

//+----------------------init----------------------------------------+

int init() {
   
   IndiName = "MACD Alert2(" + FastEMA + "," + SlowEMA + "," + SignalSMA + ")"; 
   
   SetIndexStyle(0, DRAW_HISTOGRAM);
   SetIndexStyle(1, DRAW_LINE);
   SetIndexDrawBegin(1, SignalSMA);
   IndicatorDigits(Digits + 1);
   SetIndexBuffer(0, Macd_Buffer);
   SetIndexBuffer(1, Signal_Buffer);
   SetIndexBuffer(2, Green_Buffer);
   SetIndexBuffer(3, Red_Buffer);
   IndicatorShortName(IndiName);
   SetIndexLabel(0, "MACD");
   SetIndexLabel(1, "Signal");
   SetIndexLabel(2, "Green");
   SetIndexLabel(3, "Red");
   
   return (0);
}

//+----------------------deinit--------------------------------------+
int deinit() {
   ObjectDelete("LOGO");
   return (0);
}

//+----------------------start---------------------------------------+
int start() 
   {
   if(1==1)logo();
   int ind_counted = IndicatorCounted();
   if (ind_counted > 0) ind_counted--;
   
   int TotalBars = Bars;
   
   for (int i = 0; i < TotalBars; i++) 
       {Macd_Buffer[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 < TotalBars; i++) 
       {Signal_Buffer[i] = iMAOnArray(Macd_Buffer, Bars, SignalSMA, 0, MODE_SMA, i);}
   
   for (i = 0; i < TotalBars; i++) 
       {if (Macd_Buffer[i] > Signal_Buffer[i])
           {Green_Buffer[i] = Macd_Buffer[i];
            Red_Buffer[i] = EMPTY_VALUE;}
        else 
           {Red_Buffer[i] = Macd_Buffer[i];
            Green_Buffer[i] = EMPTY_VALUE;}
   }     
   if (Alerts)
      {if (Green_Buffer[1] == Macd_Buffer[1] && Green_Buffer[2] != Macd_Buffer[2]) AlertOnce(Symbol() + " MACD: Long signal!", 1);
       if (Red_Buffer[1]   == Macd_Buffer[1] && Red_Buffer[2]   != Macd_Buffer[2]) AlertOnce(Symbol() + " MACD: Short signal!", 1);}
   
   return (0);
}

//+----------------------AlertOnce------------------------------------+
void AlertOnce(string Message, int Number) {
   
   switch (Number) {
     case 1:
        if (Bars1 == 0 || Bars1 < Bars) {
         Alert(Message);
         Bars1 = Bars;}
        break;
      
     case 2:
        if (Bars2 == 0 || Bars2 < Bars) {
         Alert(Message);
         Bars2 = Bars;}
        break;

     case 3:
        if (Bars3 == 0 || Bars3 < Bars) {
         Alert(Message);
         Bars3 = Bars;}
        break;
      
     case 4:
        if (Bars4 == 0 || Bars4 < Bars) {
         Alert(Message);
         Bars4 = Bars;}
        break;
   }
   
}

//+----------------------logo----------------------------------------+
void logo()
   {
   ObjectCreate("LOGO", OBJ_LABEL,WindowFind(IndiName), 0, 0);
   ObjectSetText("LOGO", "Revisited by Silvio Invernici", 7, "Arial", DimGray);
   ObjectSet("LOGO", OBJPROP_CORNER, 3);
   ObjectSet("LOGO", OBJPROP_XDISTANCE, 5);
   ObjectSet("LOGO", OBJPROP_YDISTANCE, 3);
} 
//+----------------------the-end-------------------------------------+
avatar

  35  AM2 Сообщений: 16285 - Андрей

  • 12 января 2015, 22:32
комментарий был удален 2015-01-13 13:32:52 alekseifx

+
0
работает, но не всегда, пойдет, спасибо!
avatar

  8  alekseifx Автор Сообщений: 179

  • 13 января 2015, 13:33

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