Как я собираю себе советника методом тыка - страница 45

 
А ну ка 
 

Простенький Эксперт для тестирования Индикаторов

вписываем имя индикатора

input string short_name       = "LeM 2 Macd"; // name indicator

 если открывает позиции не в ту сторону , переключаем реверс 

input bool   Revers           = false;        // Revers

не все индикаторы работают - нормально, работают сигнальные

все настройки Эксперта

//---
input double InpLots          = 0.01;         // Lots
input int    InpTrailingStop  = 0;            // Trailing Stop Level (in pips)
input bool   Revers           = false;        // Revers
input string short_name       = "LeM 2 Macd"; // name indicator
//---

Снимок.PNG 

Файлы:
 
Alexsandr San:

Простенький Эксперт для тестирования Индикаторов

вписываем имя индикатора

 если открывает позиции не в ту сторону , переключаем реверс 

не все индикаторы работают - нормально, работают сигнальные

все настройки Эксперта

 

если индикатор находится в другой папке 

пишем например так - Examples\\ZigzagColor 

Examples

зигзаг

 

пытаюсь что то придумать из Индикатора ( Heiken_Ashi.mq5 )

- пока получился, Музыкальный ( когда серая выше синей-один звук, когда ниже, другой звук )

EURSGDM1

Файлы:
03.mq5  12 kb
 
Alexsandr San:

пытаюсь что то придумать из Индикатора ( Heiken_Ashi.mq5 )

- пока получился, Музыкальный ( когда серая выше синей-один звук, когда ниже, другой звук )


не как, не до тюкаюсь, как сделать так, что бы линия, пересекла другую линию, сработал сигнал и заткнулся ?

сделал так, но сигнал срабатывает каждый бар

//--- we work only at the time of the birth of new bar
   datetime time_0=iTime(Symbol(),Period(),0);
   if(time_0==m_prev_bars)
      return(rates_total);
   m_prev_bars=time_0;
//---
   int find_buy_level=ObjectFind(0,InpFont2);
   int find_sell_level=ObjectFind(0,InpFont1);

   if(find_buy_level==0)
     {
      double price=ObjectGetDouble(0,InpFont2,OBJPROP_PRICE);
      if(ObjectGetDouble(0,InpFont1,OBJPROP_PRICE)<price)
        {
         PlaySound("tick.wav");
         //---
         return(rates_total);
        }
     }
   if(find_sell_level==0)
     {
      double price=ObjectGetDouble(0,InpFont2,OBJPROP_PRICE);
      if(ObjectGetDouble(0,InpFont1,OBJPROP_PRICE)>price)
        {
         PlaySound("stops.wav");
         //---
         return(rates_total);
        }
     }
//--- done
   return(rates_total);
  }


 

 
Интересный индикатор получается. Как он работает?
 
Alex potapenko:
Интересный индикатор получается. Как он работает?

ещё не знаю, я не программист - так, методом тыканья, хочу, что бы линия, пересекла другую линию и сработал сигнал.

- так то, вроде получилось - но, не так.   

 

Сигнал от Индикатора Heiken_Ashi. ---- Получился Индикатор Heiken2_Ashi

ну и, Эксперта для проверки Индикатора 

AUDCADH4

Файлы:
 
Alexsandr San:

Сигнал от Индикатора Heiken_Ashi. ---- Получился Индикатор Heiken2_Ashi

ну и, Эксперта для проверки Индикатора 


В Индикаторе Heiken2_Ashi, можно добавить фильтры 

//---- получение хендла индикатора RSI
   RSI_Handle=iRSI(NULL,0,int(ParmMult*9),PRICE_CLOSE);
   if(RSI_Handle==INVALID_HANDLE)
      Print(" Не удалось получить хендл индикатора iRSI");
//---- получение хендла индикатора Stochastic
   STO_Handle=iStochastic(NULL,0,int(21*ParmMult),int(3*ParmMult),int(2*ParmMult),MODE_LWMA,STO_LOWHIGH);
   if(STO_Handle==INVALID_HANDLE)
      Print(" Не удалось получить хендл индикатора iStochastic");
//---- получение хендла индикатора MACD
   MACD_Handle=iMACD(NULL,0,int(10*ParmMult),int(15*ParmMult),int(13*ParmMult),PRICE_CLOSE);
   if(MACD_Handle==INVALID_HANDLE)
      Print(" Не удалось получить хендл индикатора iMACD");
//---- получение хендла индикатора hHeiken_Ashi
   hHeiken_Ashi=iCustom(NULL,0,"Examples\\Heiken_Ashi");
   if(hHeiken_Ashi==INVALID_HANDLE)
      Print(" Не удалось получить хендл индикатора hHeiken_Ashi");

добавив здесь - эти фильтры

      RsiDn=RSI[bar]<=x2;
      StochDn=STO[bar]<STOS[bar];
      MacdDn=MACD[bar]<MACDS[bar];
      haClDn=haOpen[bar]>haClose[bar];

      RsiUp=RSI[bar]>=x1;
      StochUp=STO[bar]>STOS[bar];
      MacdUp=MACD[bar]>MACDS[bar];
      haOpUp=haOpen[bar]<haClose[bar];

сюда

      if(haClDn)
         p = 1;
      if(haOpUp)
         p = 2;
      if(haClDn && (p==1 || p==0))
        {
         if(OldTrend>0)
            SellBuffer[bar]=high[bar];
         if(bar!=0)
            OldTrend=-1;
        }
      if(haOpUp && (p==2 || p==0))
        {
         if(OldTrend<0)
            BuyBuffer[bar]=low[bar];
         if(bar!=0)
            OldTrend=+1;
        }
     }

вот так 

      if(StochDn && RsiDn && MacdDn && haClDn)
         p = 1;
      if(StochUp && RsiUp && MacdUp && haOpUp)
         p = 2;
      if(StochDn && RsiDn && MacdDn && haClDn && (p==1 || p==0))
        {
         if(OldTrend>0)
            SellBuffer[bar]=high[bar];
         if(bar!=0)
            OldTrend=-1;
        }
      if(StochUp && RsiUp && MacdUp && haOpUp && (p==2 || p==0))
        {
         if(OldTrend<0)
            BuyBuffer[bar]=low[bar];
         if(bar!=0)
            OldTrend=+1;
        }
     }
//----
   return(rates_total);
  }
 

Индикатор, есть что то в нём, когда лучше открывать позицию 

Между двумя горизонтальными линиями, можно открываться в ту сторону, какого цвета точка .

Снимок   

Файлы:
LN_1.mq5  27 kb