Скачать MetaTrader 5

Индикаторы: Market MOOD

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
189205
MetaQuotes Software Corp.  

Market MOOD:

Настроение рынка : Делает анализ одновременно на 8 разных интервалов времени. Можно увеличивать интервал множителем.

Author: Ivan

avals8
42
avals8  
если разобраться, то индикатор на десяточку, спасибо.
Djek
7
Djek  
тяжело понимается
Dmitry Karagusov
123
Dmitry Karagusov  
Уважаемый автор, что означают желтые стрелки?
Victor Simonenko
12
Victor Simonenko  
Уважаемый автор, подскажите, как в советнике обратиться к Вашему индикатору ( iCustom...) для получения сигналов BUY SELL. Я смотрел код, очень красивый но сложновато разобраться. Спасибо.
Ivan
4
Ivan  
kadm :
Уважаемый автор, что означают желтые стрелки?

Стрелки, это сигналы :

- Красная = Продажа;

- Зелёная = Покупка;

- Жёлтая = Поддержка / Сопротивление;

Если на график в терминале укажете мышью на стрелки, можете прочитать время и цена.

Ivan
4
Ivan  
moluskor :
Уважаемый автор, подскажите, как в советнике обратиться к Вашему индикатору ( iCustom...) для получения сигналов BUY SELL. Я смотрел код, очень красивый но сложновато разобраться. Спасибо.

Поскольку индикатор генерирует более чем 1 величину, то iCustom не годиться.

Лучше прямо вставить код в программу и пользоваться чего угодно.

Например вставите как функцию и вызываете ее непосредственно после start.

Таким образом все переменные будут иметь нужную стоимость, остается их использовать.

trender
8
trender  
Не плохой индикатор. Сделал на его основе простенький советник, чтобы протестировать, профильтровал сигналы еще парочкой индикаторов и получил весьма неплохой результат. Советника выкладывать не стану, это моя личная игрушка, автору индикатора большое спасибо.
avals8
42
avals8  
Ivtrender:
Не плохой индикатор. Сделал на его основе простенький советник, чтобы протестировать, профильтровал сигналы еще парочкой индикаторов и получил весьма неплохой результат. Советника выкладывать не стану, это моя личная игрушка, автору индикатора большое спасибо.
А результаты тестирования советника глянуть можно?
Evgeniy Inkov
3280
Evgeniy Inkov  

Зачем так запутали индикатор ?

Его логика очень проста: сравнить движение текущего бара с предыдущим. Если текущий выше предыдущего, то цена движется вверх,

если ниже, то вниз.

Правда сравнивается текщий бар с другими барами с шагом TimeMX=3. (т.е. 0 с 3, 0 с 9, 0 с 12 и т.д.) и получается восемь линий.

Если линии идут друг за другом вверх и выше Low бара, то выдаётся стрелка вверх. (Наоборот - вниз)

Очень похоже на сравнение средних МА.

Хотел приложить здесь исправленный файл, но оказывается не возможно, поэтому код копирую прямо сюда:

(это всё для того, чтобы можно было использовать в советнике его логику, так проще разобраться)

//+------------------------------------------------------------------+
//|                                                MarketMood_01.mq4 |
//+------------------------------------------------------------------+
#property copyright "StoneHeart"
#property link      ""
 
#property indicator_chart_window
#property indicator_buffers 8
#property indicator_color1 Red
#property indicator_color2 DeepPink
#property indicator_color3 Tomato
#property indicator_color4 Orange
#property indicator_color5 Yellow
#property indicator_color6 Lime
#property indicator_color7 Aqua
#property indicator_color8 Blue
#property indicator_style1 STYLE_DOT
#property indicator_style2 STYLE_DOT
#property indicator_style3 STYLE_DOT
#property indicator_style4 STYLE_DOT
#property indicator_style5 STYLE_DOT
#property indicator_style6 STYLE_DOT
#property indicator_style7 STYLE_DOT
#property indicator_style8 STYLE_DOT
 
//--- input parameters
extern int TimeMX=3; // Multiply analized timeframe
extern bool SignalAudio=false; // Enable Audio signals, and also LOG (regadless SignalLog)
extern bool SignalLog=false; // Enable LOG signals, when Audio is OFF
extern int  SignalInterval=-1; // Time in Seconds between two signals, < 0 every time; Max<Period()
extern int PercentCoincidence=80; // Give signal only above this value (range 1...99)
 
int N1,N2,N3,N4,N5,N6,N7,N8;
double T1[],T2[],T3[],T4[],T5[],T6[],T7[],T8[]; //---- buffers
int I,J;
datetime LastSignalTime;
int CoincidenceUP,CoincidenceDOWN;
double mBid;
 
void ArrowUP(color ArrowColor) // Show Signal BUY
{ string Name=TimeToStr(iTime(NULL,0,0),TIME_DATE)+"="+TimeToStr(iTime(NULL,0,0),TIME_MINUTES);
  if ( ObjectFind(Name)>=0 ) return;
  ObjectCreate(Name,OBJ_ARROW,0,iTime(NULL,0,0),0.999*iLow(NULL,0,0));
  ObjectSet(Name,OBJPROP_ARROWCODE,241); ObjectSet(Name,OBJPROP_COLOR,ArrowColor); ObjectSet(Name,OBJPROP_WIDTH,3);
  if ( SignalAudio ) Alert(Name+" : BUY_"+Symbol()+"_@_="+DoubleToStr(iHigh(NULL,0,0),Digits));
  else if ( SignalLog ) Print(Name+" : BUY_"+Symbol()+"_@_="+DoubleToStr(iHigh(NULL,0,0),Digits));
  switch (ArrowColor)
  { case Lime : { ObjectSetText(Name,"BUY_@_="+DoubleToStr(iHigh(NULL,0,0),Digits)); break; }
    case Yellow : { ObjectSetText(Name,"SUPPORT="+DoubleToStr(iLow(NULL,0,0),Digits)); break; }
  }
}
 
void ArrowDOWN(color ArrowColor) // Show Signal SELL
{ string Name=TimeToStr(iTime(NULL,0,0),TIME_DATE)+"="+TimeToStr(iTime(NULL,0,0),TIME_MINUTES);
  if ( ObjectFind(Name)>=0 ) return;
  ObjectCreate(Name,OBJ_ARROW,0,iTime(NULL,0,0),1.004*iHigh(NULL,0,0));
  ObjectSet(Name,OBJPROP_ARROWCODE,242); ObjectSet(Name,OBJPROP_COLOR,ArrowColor); ObjectSet(Name,OBJPROP_WIDTH,3);
  if ( SignalAudio ) Alert(Name+" : SELL_"+Symbol()+"_@_="+DoubleToStr(iLow(NULL,0,0),Digits));
  else if ( SignalLog ) Print(Name+" : SELL_"+Symbol()+"_@_="+DoubleToStr(iLow(NULL,0,0),Digits));
  switch (ArrowColor)
  { case Red : { ObjectSetText(Name,"SELL_@_="+DoubleToStr(iLow(NULL,0,0),Digits)); break; }
    case Yellow : { ObjectSetText(Name,"RESISTANCE="+DoubleToStr(iHigh(NULL,0,0),Digits)); break; }
  }
}
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{ SetIndexBuffer(0,T1); SetIndexBuffer(1,T2); SetIndexBuffer(2,T3); SetIndexBuffer(3,T4);
  SetIndexBuffer(4,T5); SetIndexBuffer(5,T6); SetIndexBuffer(6,T7); SetIndexBuffer(7,T8);
  SetIndexLabel(0,"MOOD_"+N1+" "); SetIndexLabel(1,"MOOD_"+N2+" "); SetIndexLabel(2,"MOOD_"+N3+" "); SetIndexLabel(3,"MOOD_"+N4+" ");
  SetIndexLabel(4,"MOOD_"+N5+" "); SetIndexLabel(5,"MOOD_"+N6+" "); SetIndexLabel(6,"MOOD_"+N7+" "); SetIndexLabel(7,"MOOD_"+N8+" ");
  IndicatorDigits(Digits);
  LastSignalTime=0;
  N1=1*TimeMX;
  N2=2*TimeMX;
  N3=3*TimeMX;
  N4=4*TimeMX;
  N5=5*TimeMX;
  N6=6*TimeMX;
  N7=7*TimeMX;
  N8=8*TimeMX;
  return(0);
}
 
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{ return(0);
}
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{ if ( PercentCoincidence<=0 ) { Alert(" WARNING : PercentCoincidence must be > 0 !"); return; }
  if ( PercentCoincidence>=100 ) { Alert(" WARNING : PercentCoincidence must be < 100 !"); return; }
  if ( TimeMX<=0 ) { Alert(" WARNING : TimeMX must be > 0 !!! ====="); return; }
  if ( SignalInterval>=Period() ) { Alert(" WARNING : SignalInterval must be < "+Period()+" !"); return; }
 
  int counted_bars=IndicatorCounted();
  if (counted_bars<0) return(-1);
  if (counted_bars>0) counted_bars--;
 
  int I0=Bars-counted_bars;
  I=I0;
  while ( I>=0 )
  {      // прибавить к цене закрытия бара dН+dL
         // если текущая свеча выше предыдущей, dH+dL - положительная, если текущая свеча ниже пред., то сумма отриц.
      T1[I]=iClose(NULL,0,I)+ iHigh(NULL,0,I)-iHigh(NULL,0,I+N1)+ iLow(NULL,0,I)-iLow(NULL,0,I+N1);
      T2[I]=iClose(NULL,0,I)+ iHigh(NULL,0,I)-iHigh(NULL,0,I+N2)+ iLow(NULL,0,I)-iLow(NULL,0,I+N2);
      T3[I]=iClose(NULL,0,I)+ iHigh(NULL,0,I)-iHigh(NULL,0,I+N3)+ iLow(NULL,0,I)-iLow(NULL,0,I+N3);
      T4[I]=iClose(NULL,0,I)+ iHigh(NULL,0,I)-iHigh(NULL,0,I+N4)+ iLow(NULL,0,I)-iLow(NULL,0,I+N4);
      T5[I]=iClose(NULL,0,I)+ iHigh(NULL,0,I)-iHigh(NULL,0,I+N5)+ iLow(NULL,0,I)-iLow(NULL,0,I+N5);
      T6[I]=iClose(NULL,0,I)+ iHigh(NULL,0,I)-iHigh(NULL,0,I+N6)+ iLow(NULL,0,I)-iLow(NULL,0,I+N6);
      T7[I]=iClose(NULL,0,I)+ iHigh(NULL,0,I)-iHigh(NULL,0,I+N7)+ iLow(NULL,0,I)-iLow(NULL,0,I+N7);
      T8[I]=iClose(NULL,0,I)+ iHigh(NULL,0,I)-iHigh(NULL,0,I+N8)+ iLow(NULL,0,I)-iLow(NULL,0,I+N8);
      I--; 
  }
      // если все линии попорядку выше друг друга, то результат максимальный
  CoincidenceDOWN=(T8[0]>T7[0])+(T8[0]>T6[0])+(T8[0]>T5[0])+(T8[0]>T4[0])+(T8[0]>T3[0])+(T8[0]>T2[0])+(T8[0]>T1[0])
                               +(T7[0]>T6[0])+(T7[0]>T5[0])+(T7[0]>T4[0])+(T7[0]>T3[0])+(T7[0]>T2[0])+(T7[0]>T1[0])
                                             +(T6[0]>T5[0])+(T6[0]>T4[0])+(T6[0]>T3[0])+(T6[0]>T2[0])+(T6[0]>T1[0])
                                                           +(T5[0]>T4[0])+(T5[0]>T3[0])+(T5[0]>T2[0])+(T5[0]>T1[0])
                                                                         +(T4[0]>T3[0])+(T4[0]>T2[0])+(T4[0]>T1[0])
                                                                                       +(T3[0]>T2[0])+(T3[0]>T1[0])
                                                                                                     +(T2[0]>T1[0]);
                                                                                                     
  CoincidenceUP  =(T8[0]<T7[0])+(T8[0]<T6[0])+(T8[0]<T5[0])+(T8[0]<T4[0])+(T8[0]<T3[0])+(T8[0]<T2[0])+(T8[0]<T1[0])
                               +(T7[0]<T6[0])+(T7[0]<T5[0])+(T7[0]<T4[0])+(T7[0]<T3[0])+(T7[0]<T2[0])+(T7[0]<T1[0])
                                             +(T6[0]<T5[0])+(T6[0]<T4[0])+(T6[0]<T3[0])+(T6[0]<T2[0])+(T6[0]<T1[0])
                                                           +(T5[0]<T4[0])+(T5[0]<T3[0])+(T5[0]<T2[0])+(T5[0]<T1[0])
                                                                         +(T4[0]<T3[0])+(T4[0]<T2[0])+(T4[0]<T1[0])
                                                                                       +(T3[0]<T2[0])+(T3[0]<T1[0])
                                                                                                     +(T2[0]<T1[0]);
 
  if ( LastSignalTime+SignalInterval<TimeCurrent() )
  { if ( CoincidenceUP>=CoincidenceDOWN || PercentCoincidence<50 )
    { mBid=iLow(NULL,0,1);
      if ( ( T8[0]>mBid && T7[0]>mBid && T6[0]>mBid && T5[0]>mBid && T4[0]>mBid && T3[0]>mBid && T2[0]>mBid && T1[0]>mBid ) )
           { ArrowUP(Lime); LastSignalTime=TimeCurrent(); return; }
      if ( CoincidenceUP>=PercentCoincidence*28/100 )
           {  ArrowUP(Yellow); LastSignalTime=TimeCurrent(); return; }
    }
    if ( CoincidenceDOWN>=CoincidenceUP || PercentCoincidence<50 )
    { mBid=iHigh(NULL,0,1);
      if ( ( T8[0]<mBid && T7[0]<mBid && T6[0]<mBid && T5[0]<mBid && T4[0]<mBid && T3[0]<mBid && T2[0]<mBid && T1[0]<mBid ) )
           { ArrowDOWN(Red); LastSignalTime=TimeCurrent(); return; }
      if ( CoincidenceDOWN>=PercentCoincidence*28/100 )
           {  ArrowDOWN(Yellow); LastSignalTime=TimeCurrent(); return; }
    }
  }
}
//+------------------------------------------------------------------+
dandy9000
18
dandy9000  
привет.а кто мне может помочь написать советник по етому индикатору .буду благодарен.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий