Mt4 Ende der Unterstützung. - Seite 25

 
Artyom Trishkin:

Sie müssen nur eine Funktion schreiben, bei der der Benutzer fragt: "Gibt es eine neue Bar auf der M5?" und erhält eine Ja/Nein-Antwort.

Zum Beispiel:

Hier ist Ihre Funktion IsNewBar() und wir werden sie weiterentwickeln und mit einer weiteren Erweiterung der Aufgabe verdrehen


Meiner Meinung nach ist dies kein gutes Beispiel, um die Nützlichkeit von OOP zu demonstrieren.
Hier ist zum Beispiel eine Variante mit nur einer Funktion:

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
void OnTick()
  {
   IsNewBar(0,false); // режим сбора информации
   if(IsNewBar()) Print("Пришел новый бар текущего ТФ");  // режим считывания информации
   if(IsNewBar(PERIOD_H4)) Print("Пришел новый бар H4");  // режим считывания информации
   if(IsNewBar(PERIOD_D1)) Print("Пришел новый бар D1");  // режим считывания информации
   
  }
bool IsNewBar(ENUM_TIMEFRAMES tf=PERIOD_CURRENT,bool out=true)
  {
   static const ENUM_TIMEFRAMES TF[22]=
     {
      PERIOD_CURRENT,PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M20,PERIOD_M30,
      PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,PERIOD_MN1
     };
   static bool newbar[22];
   static bool FirstTime=true;
   static int acb[22]; // array of current bars
   if(FirstTime)
     {
      for(int i=0;i<22;i++) acb[i]=Bars(Symbol(),TF[i]);
      FirstTime=false;
      return(false);
     }
   int curtf=0;
   while(TF[curtf]!=tf) curtf++;
   if(out) return (newbar[curtf]);
   for(int i=0;i<22;i++)
     {
      int CurBars=Bars(Symbol(),TF[i]);
      if(acb[i]<CurBars)
        {
         acb[i]=CurBars;
         newbar[i]=true;
        }
      else newbar[i]=false;
     }
   return(false);
  }

Sie können es natürlich ausOnTick entfernen und inOnTimer einfügen

 
Реter Konow:

Was diese Frage betrifft, glaube ich, dass Sie falsch liegen. Bitte fragen Sie beim Service Desk nach. Sie sollen die Frage beantworten, ob sich auf der Plattform unabhängig von der Ankunft der Notierungen neue Balken bilden oder nicht. Wenn nein, dann prüfen Sie bei einem neuen Balken, ob er mit einem Zitat versehen war. Wenn dies der Fall war, wurde der neue Stab gebildet. Wir können es so machen. Es gibt nicht viel zu ändern.

Oh mama mia... Lesen Sie einfach die Informationen. Ich bin sehr überrascht, dass Sie das nicht wissen, und wenn man Ihnen davon erzählt, haben Sie auch Zweifel. Bei solch kindischen Fragen würde ich mich nicht einmal an den Service Desk wenden - die würden Sie auslachen. Dann fragen Sie sie selbst - Sie haben einen Link zu servicedesk in Ihrem Profil.
 
Nikolai Semko:

Meines Erachtens ist dies kein gutes Beispiel, um die Nützlichkeit von OOP zu demonstrieren.
Hier ist zum Beispiel eine Variante, die nur eine Funktion verwendet:

können Sie ihn natürlich ausOnTick entfernen und inOnTimer einfügen

Ich habe mir die Logik nicht angeschaut, aber nehmen wir einmal an, dass es hypothetisch richtig funktioniert.

Und durch beliebige Personen?

Stellen Sie sich vor, das Programm verwendet eine Liste von Symbolen aus dem Fenster Marktübersicht, und der Benutzer kann die Symbolsätze jederzeit ändern.

 
Ich persönlich habe den OOP-Code von @Nikolai Semko nicht gesehen.


Hochachtungsvoll.

 

Artyom ist mit seiner Frage ein wenig im Rückstand, aber die Frage ist folgende: Schreiben Sie es im prozeduralen Stil, so dass es korrekt funktioniert

void OnTick()
 {
 
  if(IsNewBar("AUDCAD",PERIOD_H1)) {
   // задача №1
  }
 
  if(IsNewBar("GBPJPY",PERIOD_M15)) {
   // задача №2
  }
 
  if(IsNewBar("EURUSD",PERIOD_H4)) {
   // задача №3
  }

 }

// Функция "Новый бар"
bool IsNewBar(....) {
 здесь код, который нужно написать
}
 
Реter Konow:

Ja, mit einer Zeitschaltuhr. Es erscheint ein neuer Balken ohne Anführungszeichen. Wir sind genau an dem Ereignis interessiert , bei dem der Balken erscheint, während wir das Zitat in Optisk() festlegen können;

In jedem Fall erscheint ein Balken.


Hier haben wir die Erklärung der Balken:

Time[i] Die Öffnungszeit des Balkens ist in der Regel nicht mit der Ankunftszeit des Ticks identisch. Die Eröffnungszeit eines Balkens für einen beliebigen Zeitrahmen ist immer ein Vielfaches des Zeitrahmens. Jeder erste Tick, der innerhalb des Zeitrahmens auftritt , bildet einen Balken; wenn kein Tick innerhalb des Zeitrahmens angekommen ist, wird auch kein Balken innerhalb dieses Zeitrahmens gebildet.

 
Vitaly Muzichenko:

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

Ich wollte nach und nach Aufgaben hinzufügen, damit die Leute die Aufgabe schnell, bequem, einfach und leicht umsetzen können. Um später zu zeigen, wie einfach es ist, OOP zu verwenden.

Aber der Hauptverweigerer von OOP selbst wandte sich von der Lösung des Problems ab :)

 
Artyom Trishkin:

Ich wollte nach und nach Aufgaben hinzufügen, damit die Leute die Aufgabe schnell, bequem, leicht und einfach umsetzen können. Um dann zu zeigen, wie einfach es ist, dies mit OOP zu tun.

Aber der Hauptverweigerer von OOP selbst hat die Lösung der Aufgabe abgelehnt :)

Ja, ich habe mich nicht genau ausgedrückt, ich werde es umschreiben:

Artem hat nicht ein wenig die Frage geöffnet, und die Frage ist dies: in prozeduralen Stil zu schreiben, dass es richtig funktioniert

Vielleicht kommt er zurück und beweist, dass es ganz einfach ist

 
Vitaly Muzichenko:

Ich habe mich nicht richtig ausgedrückt, also werde ich es umformulieren:

Artyom hat die Frage nicht wirklich beantwortet, und die Frage ist folgende: Schreiben Sie in einem prozeduralen Stil, so dass es richtig funktioniert

Vielleicht kommt er zurück und beweist, dass es ganz leicht und einfach ist.

Mein Ziel war es, seinen prozeduralen Code so zu gestalten, dass er am Ende 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:

Ich hatte das Ziel, dass das Endergebnis sein würde, dass sein prozeduraler Code in einer solchen Schleife funktionieren würde:

Eine Symbolschleife, die prüft, ob sich ein neuer Balken öffnet, wenn eine Notierung eintrifft usw., könnte 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.