Советник на МА и RSI.

 

Привет всем.

Такая проблема.

Написал советник на МА и RSI. 1-ое условие: Свеча закрывается выше МА, на следующей делаем вход. 2. RSI пересекает  Hi_Level снизу вверх. Это продажа.

Советник входит сначала по МА, не дожидаясь сигнала по RSI.

Вопрос. 

Как прописать так, чтобы сработал сигнал по МА, дождался сигнала по RSI потом входил в продажи?

Хотя бы подскажите в какую сторону плясать.  Что то в ступоре совсем. )

 

Приведите фрагмент кода - вам подскажут.

Если условия по разным индикаторам могут возникать не одновременно, то проверяйте их раздельно и сделайте суммарный сигнал:

  • если условие 1 выполняется, то сигнал = 1;
  • если отбой условия 1, то сигнал = 0;
  • если сигнал == 1 и выполняется условие 2 - сделка.

 

Благодарю, хочу пока сам попробовать.

 
f (CountSell() == 0 && (Close[1] > OpenMA && Open[1] > OpenMA)) 
   
   // Нужна очередность. Ждать последнее событие т.е RSI, после его выполнения сработает первое слобытие т.е. сигна МА. 
То откроется сделка.
   
   {
      ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0,"", Magic, 0, Red);
      if (ticket > 0)
      {
        SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
        TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
        
        if (OrderSelect(ticket, SELECT_BY_TICKET))
            if(OrderModify(ticket, OrderOpenPrice(), SL, TP, 0));
             Print("Ошибка модификации ордера на продажу!");
      }
   }
   
   if (CountSell() == 0 && ( RSI_1 < RSI_Hi_Level && RSI_2 >= RSI_Hi_Level ))
   
  
   
   {
      ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0,"", Magic, 0, Red);
      if (ticket > 0)
      {
        SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
        TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
        
        if (OrderSelect(ticket, SELECT_BY_TICKET))
            if(OrderModify(ticket, OrderOpenPrice(), SL, TP, 0));
             Print("Ошибка модификации ордера на продажу!");
      }
   }
 
Все равно никак не вьеду. (( Хэлп.
 
По условию пересечения цены и ма не открывать ордер, а присвоить переменной значение. Если в этой переменной есть некое значение, то проверять условие по рси. 
 
void OnTick()
  {
    int sig_Ma;
    
    if (fun_new_bar() == true)
    {
      if (Close[1] > OpenMA && Open[1] > OpenMA) {
      sig_Ma = 2;
      }
      
      if (sig_Ma == 2 && RSI_1 < RSI_Hi_Level && RSI_2 >= RSI_Hi_Level)
      {
        sig_Ma=0;
        
        //open orders
      }
    }
  }
//+------------------------------------------------------------------+
bool fun_new_bar()
  {
   static datetime Prev_Time=0;
   if (Prev_Time==0) 
     {
        Prev_Time=Time[0];
        return(false);
     }
   if(Prev_Time!=Time[0])
     {
      Prev_Time=Time[0];
      return(true);
     }
  return(false);
}
//+------------------------------------------------------------------+
 

Всем огромное спасибо.

Anton Zverev громадное спасибище. )))

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