Sie haben den offenen Preis der Kerze zu einer bestimmten Stunde. - Seite 3

 

Okay, okay, ich gebe Ihnen das:

#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);
Es wird nur eine von #define berücksichtigt. Das Array HeureSH[] wird korrekt ausgeführt und wenn die geschriebene Zeit eintrifft, ist es wahr, es ist korrekt, das ist nur times[k] nicht alle vier #define berücksichtigen.
 
Kane59:

Okay, das gebe ich zu:

Es wird nur eines von #define berücksichtigt. Das Array HeureSH[] wird korrekt ausgeführt und wenn die geschriebene Zeit eintrifft, ist es wahr, es ist korrekt, das ist nur times[k] berücksichtigt nicht alle vier #define.

Das Problem ist ziemlich offensichtlich ...

string            HeureSH[];

also dieses Array hat eine Größe von 0, da du es so deklariert hast ... also diese Schleife ...

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

beginnt bei 0 und endet, wenn k >= 0 ist (0 ist die Größe des Arrays)

 

Ok, ich habe das geschrieben, weil ich dachte:

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, ich habe das geschrieben, weil ich dachte:

Ich glaube, du musst eine String-Manipulation vornehmen, du musst deinen String in einzelne Zeiten zerlegen, jede davon in eine Datetime umwandeln und sie in deinem HeureSH[] Array speichern ... Auf diese Weise mit Strings zu arbeiten, kann ein wenig knifflig sein, nicht schwer, aber leicht zu vermasseln. Dann fängt dein Code vielleicht an, ein wenig Sinn zu ergeben ... .


Übrigens, dies sind die String-Funktionen , mit denen Sie arbeiten müssen, studieren Sie sie sorgfältig, viel Spaß.
 

Hallo

Ich arbeite daran, aber ich verstehe das nicht:

RaptorUK:

Das Problem ist ziemlich offensichtlich...

also dieses Array hat eine Größe von 0, da du es so deklariert hast ... also diese Schleife ...

beginnt bei 0 und endet, wenn k >= 0 ist (0 ist die Größe des Arrays)

Können Sie versuchen, mir mehr Details zu erklären?


Für HeureSH[] habe ich Linien verwendet, um diese in 4 Strings zu unterteilen, um 4 verschiedene Stunden zu haben.

Nochmals editieren:

Ich habe ArraySize(HeureSH) in eine Druckfunktion geschrieben und es gibt mir: 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

Ich habe noch einmal getestet und es wird nur der letzte Wert ausgewählt:

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

Also die letzte "14400". Warum wählt es nicht andere in der gleichen Reihenfolge des Arrays "HeureSH[]" ?


Gibt es ein Problem mit dem Zyklus "For"?
 
Kane59:

Hallo

Ich arbeite daran, aber ich verstehe es nicht:

Können Sie versuchen, mich mit mehr Details zu erklären?


Für HeureSH[] habe ich Linien verwendet, um diese in 4 Strings zu unterteilen, um 4 verschiedene Stunden zu haben.

Nochmal editieren:

Ich habe ArraySize(HeureSH) in eine Druckfunktion geschrieben und es gibt mir: 4

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

Der Code, den du gezeigt hast, führt zu dem, was ich beschrieben habe. Wenn du mehr Code hast, der Auswirkungen auf die Frage hat, die du stellst, dann musst du ihn zeigen ... oder ihn nicht zeigen, wenn du keine weitere Hilfe brauchst.
 

Ok ok sorry.

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);
   }

Wenn es zum Beispiel 09:00 Uhr ist, ist der iBar der Balken von gestern 23:00 Uhr, 10 Stunden weniger als TimeCurrent. Wenn es 15:00 ist, ist der iBar der Balken von heute 09:00, ....... Was ich will: Wenn die gewählte Stunde kommt, einen Referenzbalken haben, der vor Jetzt (TimeCurrent) ist. Mein Problem ist, dass das Programm nur das letzte Element von "times[]" keine anderen nimmt. Ich möchte, wenn HeureSH[0], verwenden Sie times[0] und continu. Was kann ich tun?


PS: das ist alles, was ich habe und brauche.

 

Hallo!

kann mir jemand helfen?

 
Kane59:

Hallo!

oh kann mir jemand helfen?

Du machst es niemandem leicht, dir zu helfen, du postest hier und da ein paar Teile deines Codes. Ich versuche, Ihren Code zu verstehen, ich kann ihn nicht ausführen, um zu sehen, was er tut, da ich nicht den vollständigen Code habe, Sie haben eine Funktion mit dem gleichen Namen wie Ihr Array, das ist OK, aber es hilft nicht, die Lesbarkeit.

Wann wird UpdateHSeSpeciales() aufgerufen?

 

Tut mir wirklich leid,

Ich habe nur das, aber es ist wahr, ich vergesse "UpdateHSeSpeciales".


Es wird in "init" aufgerufen, wenn das Programm beginnt.

Grund der Beschwerde: