Скачать MetaTrader 5

Нужна помощь с MQL4 ребята программисты.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Заведи торговый сигнал. Зарабатывай на платной подписке!
Yuriu Vasilev
21641
Yuriu Vasilev 2016.06.18 10:00 

Есть вот кусок кода, пытаюсь разобраться чтобы эти индюки работали вместе к примеру включаем 2 индикатора нужно 2 сигнала чтобы открылась продажа или покупка или 3 индикатора значит 3 сигнала

кто поможет пожалуйста 

 

int GetTypeNewOrder()

  {
   int UseInd;
   int Signal=-1;
   double   Xma=iMA(NULL,0,XMAPeriod,XMAShift,XMAMetod,XMAapply,0);
   double   Yma=iMA(NULL,0,YMAPeriod,YMAShift,YMAMetod,YMAapply,0);
   double   SignalCurrent=iMACD(NULL,0,FastEMA,SlowEMA,MacdSMA,MacdPrice,MODE_SIGNAL,0);
   double   MacdCurrent=iMACD(NULL,0,FastEMA,SlowEMA,MacdSMA,MacdPrice,MODE_MAIN,0);
   double   e_Relative_Strength_Index=iRSI(NULL,0,RSIPeriod,RSIapply,0);
   double   e_Bollinger_Bands_buy  = iBands(NULL, 0, BBperiod, BBdeviation, BBshift, BBapply, 2, 0);
   double   e_Bollinger_Bands_sell = iBands(NULL, 0, BBperiod, BBdeviation, BBshift, BBapply, 1, 0);
   double   e_Stochastic_Oscillator_X = iStochastic(NULL, 0, Kperiod, Dperiod, Slowing, StochasticMethod, Sapply, 0, 0);
   double   e_Stochastic_Oscillator_Y = iStochastic(NULL, 0, Kperiod, Dperiod, Slowing, StochasticMethod, Sapply, 1, 0);
   double   envelopelower=iEnvelopes(NULL,0,EnvelopesPeriod,EnvelopesMetod,EnvelopesShift,EnvelopesPrice,EnvelopesDeviation,MODE_LOWER,0);
   double   envelopeupper=iEnvelopes(NULL,0,EnvelopesPeriod,EnvelopesMetod,EnvelopesShift,EnvelopesPrice,EnvelopesDeviation,MODE_UPPER,0);



   UseInd=Envelopes+BollongerBands+Stochastic+RelativeStrengthIndex+MACD+MovingAverage;



      if(Envelopes)
        {
         if(Ask<envelopelower) Signal=OP_BUY;
         if(Bid>envelopeupper) Signal=OP_SELL;
        }

   if(BollongerBands)
     {
      if(Ask < e_Bollinger_Bands_buy)  Signal=OP_BUY;
      if(Bid > e_Bollinger_Bands_sell) Signal=OP_SELL;
     }
   if(Stochastic)
     {
      if((e_Stochastic_Oscillator_X > e_Stochastic_Oscillator_Y) && (e_Stochastic_Oscillator_X < StochasticBUY))  Signal=OP_BUY;
      if((e_Stochastic_Oscillator_X < e_Stochastic_Oscillator_Y) && (e_Stochastic_Oscillator_X > StochasticSELL)) Signal=OP_SELL;
     }

   if(RelativeStrengthIndex)
     {
      if(e_Relative_Strength_Index<RSIBUY) Signal=OP_BUY;
      if(e_Relative_Strength_Index>RSISELL) Signal=OP_SELL;
     }
   if(MACD)
     {
      if(MacdCurrent<0 && MacdCurrent>SignalCurrent) Signal=OP_BUY;
      if(MacdCurrent>0 && MacdCurrent<SignalCurrent) Signal=OP_SELL;
     }
   if(MovingAverage)
     {
      if((Xma>Yma) && Ask>Xma) Signal=OP_BUY;
      if((Xma<Yma) && Bid<Xma) Signal=OP_SELL;
     }

   return(Signal);

  }
Oleg Papkov
3097
Oleg Papkov 2016.06.18 12:08  
Yuriu Vasilev:

Есть вот кусок кода, пытаюсь разобраться чтобы эти индюки работали вместе к примеру включаем 2 индикатора нужно 2 сигнала чтобы открылась продажа или покупка или 3 индикатора значит 3 сигнала

кто поможет пожалуйста 

 

if(MACD)
     {
      if(MacdCurrent<0 && MacdCurrent>SignalCurrent) SignalMACD=OP_BUY;
      if(MacdCurrent>0 && MacdCurrent<SignalCurrent) SignalMACD=OP_SELL;
     }
   if(MovingAverage)
     {
      if((Xma>Yma) && Ask>Xma) SignalMA=OP_BUY;
      if((Xma<Yma) && Bid<Xma) SignalMA=OP_SELL;
     }
int rezz;
if(SignalMACD==OP_BUY || SignalMA==OP_BUY) int rezz = OrderSend(...);  // Может так пойдет на примере МАшки с МАСД. Или я вопроса не понял.
if(SignalMACD==OP_SELL || SignalMA==OP_SELL) int rezz = OrderSend(...);
Yuriu Vasilev
21641
Yuriu Vasilev 2016.06.18 12:26  
Oleg Papkov:

Включил 2 или 3 или 4 индикатора сигнал срабатывает от любова индикатора без подтверждения второго, нужно чтоб было сколько включено 2 к примеру значит 2 сигнала нужно чтоб открылась покупка или продажа

ща всячески перепробую ) 

Yuriu Vasilev
21641
Yuriu Vasilev 2016.06.18 12:48  
Ребус 
Dmitry Fedoseev
42905
Dmitry Fedoseev 2016.06.18 13:00  
Yuriu Vasilev:
Ребус 

Для каждого индикатора заведите свою пару переменных с сигналами на покупки и на продажу отдельно. Если индикатор выключен, переменным присваивается тру, если включен - тут сами знаете.

В итог проверяете все переменные с && и получаете итоговый сигнал. 

Yuriu Vasilev
21641
Yuriu Vasilev 2016.06.18 13:44  
Dmitry Fedoseev:

Для каждого индикатора заведите свою пару переменных с сигналами на покупки и на продажу отдельно. Если индикатор выключен, переменным присваивается тру, если включен - тут сами знаете.

В итог проверяете все переменные с && и получаете итоговый сигнал. 

Пример кода бы )
Aleksey Semenov
3718
Aleksey Semenov 2016.06.18 16:40  
да обычные костыли поставить да и всё, делов то, переменные тру/фалс - включён выключен (если выключен то не вызываем индикатор), счётчик количества включённых индюков, ну и сигнальные переменные от индикаторов собираем в кучку перед ордерсендом и считаем просто чтоб количество сигналов = количеству включённых индикаторов, это очень простой костыль
Ramiz Mavludov
26671
Ramiz Mavludov 2016.06.18 22:12  
Простой пример, надеюсь основу поймете чтобы дальше самому
If(если)(macd(предположим сигнальная линия больше чем)>0) открывается бай позиция.
Если нужно добавить ещё условие, то используйте &&(и), у нас получится так :
If(если)(macd(предположим сигнальная линия больше чем)>0 &&(и) Close[1](закрытие свечи 1, то есть последняя закрытая) <MA(меньше какого-нибудь МА)) открывается бай позиция,  в данном случае позиция откроется если выполнятся оба условия. Если выполнится только одно условие позиция не будет открыта. 

Yuriu Vasilev
21641
Yuriu Vasilev 2016.06.18 22:59  
Ramiz Mavludov:
Простой пример, надеюсь основу поймете чтобы дальше самому
If(если)(macd(предположим сигнальная линия больше чем)>0) открывается бай позиция.
Если нужно добавить ещё условие, то используйте &&(и), у нас получится так :
If(если)(macd(предположим сигнальная линия больше чем)>0 &&(и) Close[1](закрытие свечи 1, то есть последняя закрытая) <MA(меньше какого-нибудь МА)) открывается бай позиция,  в данном случае позиция откроется если выполнятся оба условия. Если выполнится только одно условие позиция не будет открыта. 

Так работает, но рисуется другая проблема, похоже другой код нужен для такого робота.
Sergey Gritsay
6471
Sergey Gritsay 2016.06.19 02:36  
Yuriu Vasilev:
Так работает, но рисуется другая проблема, похоже другой код нужен для такого робота.
Тоже очень долго голову ломал над этим, в итоге написал следующее
int GetSignal()
  {
   if(Signal_01)ind_01=indicator_01();
   if(Signal_02)ind_02=indicator_02();
   if(Signal_03)ind_03=indicator_03();
   if(Signal_04)ind_04=indicator_04();
   if(Signal_05)ind_05=indicator_05();
   if(Signal_06)ind_06=indicator_06();
   if(Signal_07)ind_07=indicator_07();
   if(Signal_08)ind_08=indicator_08();
   if(Signal_09)ind_09=indicator_09();

   if(Buysignal()) return(OP_BUY);
   if(Sellsignal()) return(OP_SELL);

   return(-1);
  }
//+------------------------------------------------------------------+
bool Buysignal()
  {
   bool sig01=(Signal_01)?false:true;
   bool sig02=(Signal_02)?false:true;
   bool sig03=(Signal_03)?false:true;
   bool sig04=(Signal_04)?false:true;
   bool sig05=(Signal_05)?false:true;
   bool sig06=(Signal_06)?false:true;
   bool sig07=(Signal_07)?false:true;
   bool sig08=(Signal_08)?false:true;
   bool sig09=(Signal_09)?false:true;

   if(Signal_01)sig01=(ind_01==OP_BUY)?true:false;
   if(Signal_02)sig02=(ind_02==OP_BUY)?true:false;
   if(Signal_03)sig03=(ind_03==OP_BUY)?true:false;
   if(Signal_04)sig04=(ind_04==OP_BUY)?true:false;
   if(Signal_05)sig05=(ind_05==OP_BUY)?true:false;
   if(Signal_06)sig06=(ind_06==OP_BUY)?true:false;
   if(Signal_07)sig07=(ind_07==OP_BUY)?true:false;
   if(Signal_08)sig08=(ind_08==OP_BUY)?true:false;
   if(Signal_09)sig09=(ind_09==OP_BUY)?true:false;

   if(!sig01)return(false);
   if(!sig02)return(false);
   if(!sig03)return(false);
   if(!sig04)return(false);
   if(!sig05)return(false);
   if(!sig06)return(false);
   if(!sig07)return(false);
   if(!sig08)return(false);
   if(!sig09)return(false);
   return(true);
  }
//+------------------------------------------------------------------+
bool Sellsignal()
  {
   bool sig01=(Signal_01)?false:true;
   bool sig02=(Signal_02)?false:true;
   bool sig03=(Signal_03)?false:true;
   bool sig04=(Signal_04)?false:true;
   bool sig05=(Signal_05)?false:true;
   bool sig06=(Signal_06)?false:true;
   bool sig07=(Signal_07)?false:true;
   bool sig08=(Signal_08)?false:true;
   bool sig09=(Signal_09)?false:true;

   if(Signal_01)sig01=(ind_01==OP_SELL)?true:false;
   if(Signal_02)sig02=(ind_02==OP_SELL)?true:false;
   if(Signal_03)sig03=(ind_03==OP_SELL)?true:false;
   if(Signal_04)sig04=(ind_04==OP_SELL)?true:false;
   if(Signal_05)sig05=(ind_05==OP_SELL)?true:false;
   if(Signal_06)sig06=(ind_06==OP_SELL)?true:false;
   if(Signal_07)sig07=(ind_07==OP_SELL)?true:false;
   if(Signal_08)sig08=(ind_08==OP_SELL)?true:false;
   if(Signal_09)sig09=(ind_09==OP_SELL)?true:false;

   if(!sig01)return(false);
   if(!sig02)return(false);
   if(!sig03)return(false);
   if(!sig04)return(false);
   if(!sig05)return(false);
   if(!sig06)return(false);
   if(!sig07)return(false);
   if(!sig08)return(false);
   if(!sig09)return(false);
   return(true);
  }
//+------------------------------------------------------------------+
int indicator_01()
  {
   double ma1 = iMA(_Symbol,_Period,ma_period,ma_shift,ma_method,ma_price,1);
   double ma2 = iMA(_Symbol,_Period,ma_period,ma_shift,ma_method,ma_price,2);

   double p_close1 = iClose(_Symbol,_Period,1);
   double p_close2 = iClose(_Symbol,_Period,2);

   if(p_close1>ma1&&p_close2<ma2)return(OP_BUY);
   if(p_close1<ma1&&p_close2>ma2)return(OP_SELL);

   return(-1);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int indicator_02()
  {
   double rsi=iRSI(_Symbol,_Period,rsi_period,rsi_price,1);

   if(rsi<=rsi_level_dw)return(OP_BUY);
   if(rsi>=rsi_level_up)return(OP_SELL);

   return(-1);
  }
//+------------------------------------------------------------------+
Dmitry Fedoseev
42905
Dmitry Fedoseev 2016.06.19 02:42  
Sergey Gritsay:
Тоже очень долго голову ломал над этим, в итоге написал следующее
Невероятное количество лишних проверок условий.
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий