Mt4 Ende der Unterstützung. - Seite 26

 

Wem meine Lösung gefällt, der kann mich persönlich anschreiben. Ich werde es verfeinern und verschenken.

Viel Glück für alle.

 
Реter Konow:

Ein Symbol-Zyklus, die Prüfung auf eine neue Bar-Eröffnung beim Eintreffen eines Kurses usw. kann leicht zu meiner Lösung hinzugefügt werden. Und was hat OOP damit zu tun?

Sie haben ein falsches Beispiel gewählt. Denken Sie in aller Ruhe über etwas anderes nach.

Und du tust es. Wenn man bedenkt, dass sich Charaktere verändern können - das ist ja auch beim Lesen von Charakteren so.

 
Artyom Trishkin:

Tun Sie es. Vorausgesetzt, dass Charaktere sich verändern können - denn wenn man die Charaktere liest, ist das wahr.


Und was, wenn ich das tue? Was sagen Sie dann? Ich verrate Ihnen ein Geheimnis: Für mich ist diese Art von Aufgabe ein absolutes Kinderspiel. Glauben Sie wirklich, dass ich es nicht schaffe? Das ist einfach nur naiv...

 
Реter Konow:

Und was, wenn ich das tue? Was sagen Sie dann? Ich verrate Ihnen ein Geheimnis: Für mich ist diese Art von Aufgabe ein absolutes Kinderspiel. Glauben Sie wirklich, dass ich es nicht schaffe? Das ist einfach nur naiv...

Nun, tun Sie es schon.

 
Vitaly Muzichenko:

Artyom hat die Frage nicht beantwortet, aber die Frage ist folgende: Schreiben Sie im prozeduralen Stil, so dass es richtig funktioniert

Keine Frage. Hedge, um den Vergleich von String-Operationen zu sparen, wenn der Kunde ein Verrückter ist und auf allen Symbolen gleichzeitig handeln will.

Aber es scheint, dass es nirgendwo anders möglich ist, Operationen und Speicher zu speichern - alles ist minimal

void OnTimer(){

   Alert(Fn_new_bar("EURUSD", PERIOD_D1)); }

//+------------------------------------------------------------------+

uint Sp_Adler32(string line){

   ulong s1 = 1;

   ulong s2 = 0;

   uint buflength=StringLen(line);

   uchar char_array[];

   ArrayResize(char_array, buflength,0);

   StringToCharArray(line, char_array, 0, -1, CP_ACP);

   for (uint n=0; n<buflength; n++){

      s1 = (s1 + char_array[n]) % 65521;

      s2 = (s2 + s1)     % 65521;}

   return ((s2 << 16) + s1);}

//+------------------------------------------------------------------+

bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf){

   static datetime st_time[]; 

   static uint     st_id[];

   

   //---- set

   datetime new_time = iTime(symb, tf, 0);     if(new_time==0) return(false); 

   uint     new_id   = Sp_Adler32(StringConcatenate(symb,EnumToString(tf))); 

   datetime old_time = 0; 

   uint     old_id   = 0;

   

   //---- find

   int size = ArraySize(st_time); 

   for(int i=0; i<size; i++){

      if(st_id[i]!=new_id) continue; 

      old_id   = st_id  [i]; 

      old_time = st_time[i];

      break;}

   

   //----add new element

   if(old_time==0){

      ArrayResize(st_time, size+1); st_time[size]=new_time;

      ArrayResize(st_id,   size+1); st_id  [size]=new_id; }

   

   //----

   return(old_time>0 && old_time<new_time);}


 
Реter Konow:

Ich entschuldige mich für die leichte Verzögerung.

Hier ist die erste Version der Funktion. Sie können es weiter verfeinern und entwickeln. Wenn Sie einen Fehler entdecken, geben Sie bitte Ihre Kommentare ab.


Der Punkt liegt nicht in OOP, sondern in der Tatsache, dass Ihr Code linear ist, obwohl Sie das wahrscheinlich nie lernen werden...

 
Galina Bobro:

Kein Problem. Hedge, um den Vergleich von String-Operationen zu speichern, gut, wenn der Kunde ist ein Verrückter und wird auf alle Zeichen gleichzeitig zu handeln.

Aber es scheint, dass es nirgendwo anders möglich ist, Operationen und Speicher zu speichern - alles ist minimal.


Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Mt4 Ende der Unterstützung.

Artyom Trishkin, 2017.09.10 23:21

Ich hatte das Ziel, dass das Endergebnis seines prozeduralen Codes in einer solchen Schleife funktioniert:

   ENUM_TIMEFRAMES array_timeframes[]=
      {
      PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M30,
      PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,PERIOD_MN1
      };
   int total=SymbolsTotal(true), total_tf=ArraySize(array_timeframes);
   for(int i=0; i<total; i++){
      string symbol_name=SymbolName(i,true);
      for(int j=0; j<total_tf; j++){
         if(IsNewBar(symbol_name,array_timeframes[j])){
            Print("Новый бар на ",symbol_name," ",EnumToString(array_timeframes[j]));
            }
         }
      }

 
Artyom Trishkin:


Aus Gewohnheit falsch benannt -bool Fn_new_bar(string symb, ENUM_TIMEFRAMES tf) ist die richtige Funktion.

 
Artyom Trishkin:

Dann tun Sie es jetzt.


GUT. Ihre Lösung funktioniert nur bei Zecken. Meiner ist mit einer Zeitschaltuhr ausgestattet. Glauben Sie, dass meine Methode der Zeitmessung mit Balkenauftritten einen Nachteil hat? Ja. So soll es sein. Ich werde eine Prüfung auf das Eintreffen eines Angebots hinzufügen, bevor ich eine neue Balkenmarkierung setze. Ich werde der Funktion einen weiteren Parameter hinzufügen - ein Symbol. Der Benutzer wählt das Symbol, mit dem er das neue Taktereignis empfangen möchte, und sendet es an die Funktion. Die Funktion prüft den Zeitpunkt des letzten Zitats dieses Symbols. Dann vergleichen wir den Zeitpunkt des formellen Auftretens des Balkens mit dem Zeitpunkt des Angebots und setzen das Ereignisflag.

Ich habe gerade erst begonnen, dieses Thema zu studieren, aber ich sehe keine Schwierigkeiten.

 
Galina Bobro:

Es geht nicht um OOP, sondern darum, dass Ihr Code linear ist, auch wenn Sie das vielleicht nie wissen...

Linear, nicht-linear... Reden Sie wieder von der Oper in der Programmierung?
Grund der Beschwerde: