Как подсчитать все бары RSI выше 70 и ниже 30?

#mql4

Вопрос:

Я хочу подсчитать бары rsi ниже или выше 70 и 30 . область перепроданности и покупки rsi иногда очень сильна в импульсе.они не возвращаются сразу, как обычно знают. Поэтому я хочу посчитать, если бары RSI выше и ниже 70 30 для 5 баров. открывайте заказы, которые я кодирую так

      for(int i = 0; i<20 ;i  )
     {
       rsi1 = iRSI(Symbol(),0,10,PRICE_CLOSE,i 1);
        Print("RSI1 is " rsi1 "");
       rsi2 = iRSI(Symbol(),0,10,PRICE_CLOSE,i 2);
        Print("RSI2 is " rsi2 "");
       rsi3 = iRSI(Symbol(),0,10,PRICE_CLOSE,i 3);
        Print("RSI3 is " rsi3 "");
       rsi4 = iRSI(Symbol(),0,10,PRICE_CLOSE,i 4);
        Print("RSI4 is " rsi4 "");
     }
    
     if(OrdersTotal() == 0 ){
    if( rsi1 > 70 amp;amp; rsi2 > 70 amp;amp; rsi3 > 70 amp;amp; rsi4 > 70 )
     OrderSend(Symbol(),OP_BUY,1,MarketInfo(Symbol(),MODE_ASK),3,0,0,"Main Buy",1111,0,Green);//this is rabbit
    
     if( rsi1 < 30 amp;amp; rsi2 < 30 amp;amp; rsi3 < 30 amp;amp; rsi4 < 30 )
     OrderSend(Symbol(),OP_SELL,1,MarketInfo(Symbol(),MODE_BID),3,0,0,"Main Sell",1111,0,Red);//this is rabbit
   

Но на самом деле он не считает 5 баров
, а считает только 1 бар и открытые ордера.
Как это можно решить.
Пожалуйста, кто-нибудь, помогите мне.

введите описание изображения здесь

введите описание изображения здесь

хочу посчитать отсюда до сюда .

Комментарии:

1. for Цикл переопределяет значения на каждой итерации. В конце концов, у вас есть ценности для 19 1, 19 2, 19 3 и так далее. Какова цель цикла for?

2. петля для подсчета баров, братан. 0 1 , 1 1,2 1, и т. Д…. для подсчета последних баров RSI ниже уровня 70 30 . что случилось?

Ответ №1:

В for цикле нет необходимости, это не индикатор, и вы не работаете с историческими данными. Если вы хотите проверить последние 5 закрытых свечей, ваш код должен быть:

    double rsi1 = iRSI(NULL,0,10,PRICE_CLOSE,1); Print("RSI1 is " rsi1);
   double rsi2 = iRSI(NULL,0,10,PRICE_CLOSE,2); Print("RSI2 is " rsi2);
   double rsi3 = iRSI(NULL,0,10,PRICE_CLOSE,3); Print("RSI3 is " rsi3);
   double rsi4 = iRSI(NULL,0,10,PRICE_CLOSE,4); Print("RSI4 is " rsi4);
   double rsi5 = iRSI(NULL,0,10,PRICE_CLOSE,5); Print("RSI5 is " rsi5);

   if(OrdersTotal() == 0 )
   {
      if(rsi1>70 amp;amp; rsi2>70 amp;amp; rsi3>70 amp;amp; rsi4>70 amp;amp; rsi5>70)
      OrderSend(Symbol(),OP_BUY,1,Ask,3,0,0,"Main Buy",1111,0,clrGreen);

      if(rsi1<30 amp;amp; rsi2<30 amp;amp; rsi3<30 amp;amp; rsi4<30 amp;amp; rsi5<30)
      OrderSend(Symbol(),OP_SELL,1,Bid,3,0,0,"Main Sell",1111,0,clrRed);
   }