Трейдинг: Звуковые сигналы в индикаторах - страница 6

 
anrei2002:

Доброго времени суток!

Ваш пост по установке Алертов на индикаторы разных типов,прост и понятен,за что Вам огромное СПАСИБО!

Но у меня вопрос,а что если алерт должен сработать при более сложном варианте? Например,если есть ТРИ линии относительно НУЛЕВОЙ!

И алерт должен сработать только после пересечения нулевой отметки всех трех линий? Другими словами,сигнала не будет,пока все три не окажутся по одну сторону баррикад!!!

Ну или хотя-бы приведите пример формулы,с двумя линиями! Если можно?

if ( line1[1] < 0.0 && line2[1] < 0.0 && line3[1] < 0.0 && (line1[2] >= 0.0 || line2[2] >= 0.0 || line3[2] >= 0.0) ) Alert( "All 3 lines crossed 0!" );

Если нужно исключить сигналы, когда только одна линия вернулась за 0 и пересекла его еще раз, код будет чуть сложнее, нужно пробежаться в цикле и проверить, первое ли это групповое пересечение.

 
Andrey Khatimlianskii:

Если нужно исключить сигналы, когда только одна линия вернулась за 0 и пересекла его еще раз, код будет чуть сложнее, нужно пробежаться в цикле и проверить, первое ли это групповое пересечение.

  Спасибо!

  Приблизительно я так себе и представлял....будем пробовать!!!

 

Доброго времени суток!

У меня вопрос алерта по номеру БАРА. Что,если нужно сигнал,скажем по НУЛЕВОМУ бару и по ПЕРВОМУ!

Можно это включить в одну формулу или необходимо писать отдельно формулу для НУЛЕВОГО и отдельно для ПЕРВОГО бара?

 

Я имею в виду что-то вроде этого:

 if(PrevSignal <= 0)
      {
        //---- Проверяем, не пересеклись ли линии на прошлом баре:
        if(MacdBuffer[SIGNAL_BAR_0;SIGNAL_BAR_1] - SignalBuffer[SIGNAL_BAR_0;SIGNAL_BAR_1] > 0 && 
           SignalBuffer[(SIGNAL_BAR_0;SIGNAL_BAR_1)+1] - MacdBuffer[(SIGNAL_BAR_0;SIGNAL_BAR_1)+1] >= 0)
          {
            //---- Если пересеклись, отмечаем что последний сигнал - бай
            PrevSignal = 1;
            //---- и выводим информацию:
            Alert("sMACD (", Symbol(), ", ", Period(), ")  -  BUY!!!");
//            Print("sMACD (", Symbol(), ", ", Period(), ")  -  BUY!!!");
//            Comment("sMACD (", Symbol(), ", ", Period(), ")  -  BUY!!!");
//            PlaySound("Alert.wav");
          }
      }
 
//--- check the signal on each bar
   if(time_signal!=time[0])
     {
      //--- first calc
      if(time_signal==0)
        {
         time_signal=time[0];
         return;
        }

      double macd[2]={};
      double signal[2]={};

#ifdef __MQL4__
      for(int i=0;i<=1;i++)
        {
         macd[i]  = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i);
         signal[i]= iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i);
        }
#endif

#ifdef __MQL5__
      if(CopyBuffer(macd_handle,0,1,2,macd)!=2)
         return;
      if(CopyBuffer(macd_handle,1,1,2,signal)!=2)
         return;
#endif

      time_signal=time[0];

      //--- Send signal BUY
      if(macd[1]>signal[1] && 
         macd[0]<=signal[0] && 
         macd[0]<0.0)
        {

Как изменить код. Чтобы выдавал сигнал на пересечение (0) линии индикатора макд.   Так как он есть, выдает сигнал на пересечение линий.

 
storm2:

Как изменить код. Чтобы выдавал сигнал на пересечение (0) линии индикатора макд.   Так как он есть, выдает сигнал на пересечение линий.

В статье есть такой тип сигнала:

Сигнал на пересечение определенного уровня очень похож на пересечение линий. Я его добавил в Stochastic, но вы можете провести аналогию для любого другого индикатора:

    if(PrevSignal <= 0)
      {
        if(MainBuffer[SIGNAL_BAR] - 30.0 > 0 && 
           30.0 - MainBuffer[SIGNAL_BAR+1] >= 0)
          {
            PrevSignal = 1;
            Alert("sStochastic (", Symbol(), ", ", Period(), ")  -  BUY!!!");
          }
      }
    if(PrevSignal >= 0)
      {
        if(70.0 - MainBuffer[SIGNAL_BAR] > 0 && 
           MainBuffer[SIGNAL_BAR+1] - 70.0 >= 0)
          {
            PrevSignal = -1;
            Alert("sStochastic (", Symbol(), ", ", Period(), ")  -  SELL!!!");
          }
      }

Как видите, при пересечении линией %K (MainBuffer) уровня 30 снизу вверх индикатор скажет "Buy", а при пересечении уровня 70 сверху вниз - "Sell".

 

Добрый день!

А как будет выглядеть формула,если нужен сигнал, при пересечении линий но только в одном направлении выше нуля или ниже нуля? В качестве примера можно взять,все тот-же MACD!

Когда сигнальная линия пересекает основную но только в одном направлении!!!...сверху в низ один сигнал,а с низу в верх другой сигнал но при условии,что это все происходит выше ноля или ниже ноля. В качестве примера можно привести ситуацию когда нужен сигнал СТОП или продолжения тренда,но при условии выше ноля...и на оборот!

 
zxzxz:

Добрый день!

А как будет выглядеть формула,если нужен сигнал, при пересечении линий но только в одном направлении выше нуля или ниже нуля? В качестве примера можно взять,все тот-же MACD!

Когда сигнальная линия пересекает основную но только в одном направлении!!!...сверху в низ один сигнал,а с низу в верх другой сигнал но при условии,что это все происходит выше ноля или ниже ноля. В качестве примера можно привести ситуацию когда нужен сигнал СТОП или продолжения тренда,но при условии выше ноля...и на оборот!

        //---- Гистограмма пересекла сигнальную линию вверх, находясь выше 0
        if(MacdBuffer[SIGNAL_BAR] > SignalBuffer[SIGNAL_BAR] && 
           MacdBuffer[SIGNAL_BAR+1] <= SignalBuffer[SIGNAL_BAR+1] &&
           MacdBuffer[SIGNAL_BAR+1] >= 0.0)
          {
            //---- Если пересеклись, отмечаем что последний сигнал - бай
            PrevSignal = 1;
            //---- и выводим информацию:
            Alert("sMACD (", Symbol(), ", ", Period(), ")  -  BUY!!!");
 
Andrey Khatimlianskii:
Не уверен правильно-ли вы меня поняли,по этому прикрепил рисунок!
Файлы:
10.png  71 kb
 
Andrey KhatimlianskiiСпасибо

Спасибо,помощь больше не требуется! Я благодаря Вам разобрался, все работает!...еще раз спасибо.

Причина обращения: