Avoir le prix ouvert de la bougie à une heure précise. - page 3

 

Ok ok je vous l'accorde :

#define HR0900 14400  //All times were changed for the test to see which is the Reference.
#define HR1500 10800
#define HR1900 7200
#define HR2300 3600

extern string     Heures="11:41;11:42;12:00;11:42;"; // Times for my test today...
string            HeureSH[];

datetime TC = TimeCurrent();

int times[]={HR1500, HR2300, HR0900, HR1900};
                
    for(int k=0; k<ArraySize(HeureSH); k++)
    {
      datetime    want= TC - times[k];
    }

int iBar= iBarShift(Symbol(), PERIOD_H1, want);
double OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar);
Un seul des #define est considéré. Le Array HeureSH[] est correctement exécuté et si le temps écrit arrive, c'est vrai, c'est correct, c'est seulement times[k] ne considère pas les quatre #define.
 
Kane59:

Ok ok je vous l'accorde :

Seule la valeur #define est prise en compte. Le Array HeureSH[] est correctement exécuté et si le temps écrit arrive, c'est vrai, c'est correct, c'est seulement times[k] ne considère pas les quatre #define.

Le problème est assez évident...

string            HeureSH[];

Ce tableau a une taille de 0 puisque vous l'avez déclaré ainsi... donc cette boucle...

for(int k=0; k < ArraySize(HeureSH); k++)

commence à 0 et se termine quand k >= 0 ( 0 étant la taille du tableau )

 

Ok, j'ai écrit ça parce que je pensais.. :

extern string     Heures="11:41;11:42;12:00;11:42;"; // Times for my test today...
      
                            0     1     2     3

int times[]={HR1500, HR2300, HR0900, HR1900};

               0        1       2       3
 
Kane59:

Ok, j'ai écrit ça parce que je pensais.. :

Je pense que vous avez besoin de faire de la manipulation de chaîne, vous devez casser votre chaîne en heures individuelles, convertir chacune d'entre elles en datetime et les stocker dans votre tableau HeureSH[] ... travailler avec des chaînes de cette manière peut être un peu délicat, pas difficile mais facile à foirer. Ensuite, votre code pourrait commencer à avoir un peu de sens ...


Au fait, ce sont les fonctions de chaînes de caractères avec lesquelles vous devez travailler, étudiez-les attentivement et profitez-en.
 

Bonjour

Je travaille dessus mais je ne comprends pas :

RaptorUK:

Le problème est assez évident...

Donc ce tableau a une taille de 0 comme vous l'avez déclaré ainsi... donc cette boucle....

commence à 0 et se termine lorsque k >= 0 (0 étant la taille du tableau).

Pouvez-vous essayer de me donner plus de détails ?


Pour HeureSH[] j'ai utilisé des lignes pour le couper en 4 parties pour avoir 4 heures différentes.

Edite encore :

J'ai écrit ArraySize(HeureSH) dans une fonction print et ça me donne : 4

Print("Open:", DoubleToStr(OpenPrice, digits), /*" Time:", TimeToStr(Time[iBar], */" ArraySise=", ArraySize(HeureSH));

2013.01.19 13:57:21 2012.11.19 19:00 Tester EURUSD,H1 : Open:1.27701 ArraySise=4

J'ai testé à nouveau et il ne sélectionne que le dernier de ceux-ci :

int times[]={36000,21600,14400,14400};

Donc le dernier "14400". Pourquoi ne sélectionne-t-il pas les autres dans le même ordre dans le tableau "HeureSH[]" ?


Y a-t-il un problème avec le cycle "For" ?
 
Kane59:

Bonjour

Je travaille sur le sujet mais je ne comprends pas :

Pouvez-vous essayer de me le dire avec plus de détails ?


Pour HeureSH[] j'ai utilisé des lignes pour couper cela en 4 parties de cordes pour avoir 4 heures différentes.

Edite encore :

J'ai écrit ArraySize(HeureSH) dans une fonction print et ça me donne : 4

2013.01.19 13:57:21 2012.11.19 19:00 Tester EURUSD,H1 : Open:1.27701 ArraySise=4

Le code que vous avez montré aura pour résultat ce que j'ai décrit, si vous avez plus de code qui a un impact sur la question que vous posez alors vous devez le montrer . . . ou ne le montrez pas si vous n'avez pas besoin d'aide supplémentaire.
 

Ok ok désolé.

extern string     Heures="09:00;15:00;19:00;23:00;";
string            HeureSH[];

int start()
  {
//---- 
int times[]= {36000,21600,14400,14400};

   for(int i=0; i<ArraySize(Heures); i++)
   {
      datetime    want = TC - times[i];
   }

   int iBar= iBarShift(Symbol(), PERIOD_H1, want);
   double OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar);

   if (HeureSH(TimeToStr(iTime(Symbol(),PERIOD_H1,0),TIME_MINUTES)))
   {
      if(iOpen(Symbol(), PERIOD_H1, 0) < OpenPrice)
      {
         OrderSend( OP_SELL, .......);
      }
      if(iOpen(Symbol(), PERIOD_H1, 0) > OpenPrice)
      {
         OrderSend( OP_BUY, .......);
      }
   }

//----
   return(0);
  }

//+------------------------------------------------------------------+
void UpdateHSeSpeciales()
   {
      string hour1 = "";
      int count1 = 0;
      for(int k=0; k<StringLen(Heures); k++)
      {
         if(StringSubstr(Heures, k, 1) != ";")
         {
            hour1= hour1+ StringSubstr(Heures, k, 1);
         }
         else
         {
            ArrayResize(HeureSH, ArraySize(HeureSH)+1);
            HeureSH[count1] = hour1;
            hour1 ="";
            count1 +=1;
         }   
      }
   }
   bool HeureSH(string now1)
   {
      for(int k=0; k<ArraySize(HeureSH); k++)
      {
         if(now1 == HeureSH[k])
         {
            return(true);
         }
      }
   
      return(false);
   }

Donc par exemple, quand il est 09:00, l'iBar est la barre d'hier 23:00, 10 heures de moins que TimeCurrent. Quand il est 15:00, l'iBar est la barre d'aujourd'hui 09:00, ........ Ce que je veux : Si l'heure sélectionnée arrive, avoir une barre de référence qui est avant maintenant (TimeCurrent). Mon problème est que le programme ne prend que le dernier élément de "times[]", aucun autre. Je veux que si HeureSH[0], utiliser times[0] et continu. Que puis-je faire ?


PS : c'est tout ce que j'ai et dont j'ai besoin.

 

Bonjour,

Quelqu'un peut-il m'aider ?

 
Kane59:

Bonjour,

oh, quelqu'un peut-il m'aider ?

Vous ne rendez pas la tâche facile à quiconque pour vous aider, vous postez des morceaux de votre code ici et là... J'essaie de comprendre votre code. J'essaie de comprendre votre code, je ne peux pas l'exécuter pour voir ce qu'il fait car je n'ai pas le code complet, vous avez une fonction du même nom que votre tableau, c'est correct mais cela n'aide pas à la lisibilité.

Quand la fonction UpdateHSeSpeciales() est-elle appelée ?

 

Désolé, vraiment,

Je n'ai que ça mais c'est vrai que j'ai oublié "UpdateHSeSpeciales".


C'est appelé dans "init" quand le programme commence.