Loop with variable shift candles

 

Hello,

Can you please help me to find a solution (which will be, I'm sure, easy for you : but not for me) to code a possibility with an input parameter, to choice on how much candles I will work back. A loop, something so ?

For example, I have this for an buy order :

   if(

   RSI2[0] > RSI_Filter_Limit

   && RSI2[0] < (100-RSI_Filter_Limit) 

   && RSI2[1] > RSI_Filter_Limit

   && RSI2[1] < (100-RSI_Filter_Limit) 

   && RSI2[2] > RSI_Filter_Limit 

   && RSI2[2] < (100-RSI_Filter_Limit) 

   && RSI2[3] > RSI_Filter_Limit 

   && RSI2[3] < (100-RSI_Filter_Limit) 

   && RSI2[4] > RSI_Filter_Limit

   && RSI2[4] < (100-RSI_Filter_Limit) 

   && RSI2[5] > RSI_Filter_Limit

   && RSI2[5] < (100-RSI_Filter_Limit))

So, I want to choice, with an input on how much candles I test this same condition back.

For example, the same condition RSI > Filter and RSI <100-Filer, but until shift 10 or more...

I hope my problem is well explained.

Thank you so much for your help :)

 

Quelque chose comme ça, si je te comprends bien

input int=candles;
....
  {
//---
for(int i=0;i<candles-1;i++)
  {
   if(RSI2[i] > RSI_Filter_Limit)
     {
      ....
     }
  }
 
Alexey Petrov #:

Quelque chose comme ça, si je te comprends bien

Bonjour Alexey,

merci beaucoup pour la solution, je savais que ca serait simple pour quelqu'un de compétent !

Malheureusement je viens à peine de voir, par hasard, ta réponse. Je pensais que personne ne m'avait répondu. 

Je ne sais pour quelle raison, le site ne m'a pas envoyé de notification lorsque tu m'avais répondu.

Je viens de tester ta solution, c'est génial : ça allège beaucoup mon code :)

Merci encore !

Patrick

 
Patrick Michael Appel # :

Bonjour Alexey,

merci beaucoup pour la solution, je savais que ca serait simple pour quelqu'un de compétent !

Malheureusement je viens à peine de voir, par hasard, ta réponse. Je pensais que personne ne m'avait répondu. 

Je ne sais pour quelle raison, le site ne m'a pas envoyé de notification lorsque tu m'avais répondu.

Je viens de tester ta solution, c'est génial : ça allège beaucoup mon code :)

Merci encore !

Patrick

Je vous en prie!

Vous pouvez configurer la notification mobile à l'aide de MetaQuotes ID - https://www.mql5.com/fr/articles/476

ID MetaQuotes dans le terminal mobile MetaTrader
ID MetaQuotes dans le terminal mobile MetaTrader
  • www.mql5.com
Les appareils Android et iOS nous offrent de nombreuses fonctionnalités que nous ne connaissons même pas. L'une de ces fonctionnalités est les notifications push qui nous permettent de recevoir des messages personnels, quel que soit notre numéro de téléphone ou notre opérateur de réseau mobile. Le terminal mobile MetaTrader peut déjà recevoir de tels messages directement de votre robot de trading. Vous ne devez connaître que l'ID MetaQuotes de votre appareil. Plus de 9 000 000 de terminaux mobiles l'ont déjà reçu.
 
Alexey Petrov #:

Je vous en prie!

Vous pouvez configurer la notification mobile à l'aide de MetaQuotes ID - https://www.mql5.com/fr/articles/476

Merci aussi pour ce conseil, je viens de faire la modification. Je verrai à ta prochaine réponse si cela marche ;)

Alexey j'en profite pour te demander encore un coup de main : je bloque sur ce problème depuis plusieurs heures...

Comment transformer " Duration " en int ?

datetime LastOpenLongTime()

  {

   datetime result = 0;

   for(int i = PositionsTotal()-1; i >= 0; i--)

     {

      if(PositionGetTicket(i) <= 0) continue;

      if(PositionGetInteger(POSITION_TYPE) > 1) continue;

      if(PositionGetString(POSITION_SYMBOL) == Symbol() && PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && PositionGetInteger(POSITION_MAGIC) == MagicNumber)

        {

         result = (datetime)PositionGetInteger(POSITION_TIME);

         break;

        }

     } 

   return(result);

  }

ulong Duration= (TimeCurrent()-LastOpenLongTime())/PeriodSeconds();


En fait, je veux que Duration soit un int qui m'indique le nombre de bars depuis l'ouverture...

J'espère que tu pourras m'aider dans ce problème aussi.

Merci d'avance en tout cas pour ton temps !

Patrick

 
Patrick Michael Appel # :

Merci aussi pour ce conseil, je viens de faire la modification. Je verrai à ta prochaine réponse si cela marche ;)

Alexey j'en profite pour te demander encore un coup de main : je bloque sur ce problème depuis plusieurs heures...

Devrait être quelque chose comme ça (beaucoup de changements :)

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
input int MagicNumber=0;
void OnStart()
  {
//--- calculate the number of bars from position open time
   ulong Duration=(TimeCurrent()-LastOpenLongTime())/PeriodSeconds();
   Print(Duration);
  }
//+------------------------------------------------------------------+
//|  Check last position open time                                   |
//+------------------------------------------------------------------+
datetime LastOpenLongTime()
  {
   datetime result=0;
   //--- iterate throug all open positions   
   for(int i=0; i<PositionsTotal(); i++)
     {
      //--- select a position for further working
      string symbol=PositionGetSymbol(i);
      //--- check positions parameters
      if(symbol == _Symbol && PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && PositionGetInteger(POSITION_MAGIC) == MagicNumber)
        {
         //--- get position open time
         datetime new_time=(datetime)PositionGetInteger(POSITION_TIME);
         //--- check if this is the newest position
         if(new_time>result)
            result=new_time;
        }        
     }     
   return(result);
  }
//+------------------------------------------------------------------+
 
Alexey Petrov #:

Devrait être quelque chose comme ça (beaucoup de changements :)

Merci Alexey,

mais dans ton code "Duration" est toujours un ulong et pas un int ! Ou bien j'ai mal compris ?

 
Patrick Michael Appel # :

Merci Alexey,

mais dans ton code "Duration" est toujours un ulong et pas un int ! Ou bien j'ai mal compris ?

Il n'est pas nécessaire de le changer en int. Il affiche déjà le nombre de bougies que vous vouliez. Vous pouvez exécuter le script sur un graphique et vérifier :)

 
Alexey Petrov #:

Il n'est pas nécessaire de le changer en int. Il affiche déjà le nombre de bougies que vous vouliez. Vous pouvez exécuter le script sur un graphique et vérifier :)

En effet, cela fonctionne, j'ai vu.

Par contre, je voulais utiliser cette variable dans une boucle for comme vous me l'avez appris ;)

for(int i=0;i<candles-1;i++)

Mais je n'avais même pas essayé de changer 

for(ulong i=0;i<candles-1;i++)

int en ulong. 

Ca a l'air de fonctionner je vais faire des essais ! 

Merci beaucoup en tout cas ! Quel plaisir de se sentir moins seul face aux problématiques du codage.

Bonne journée Alexey :)