Wie erhalte ich Open, Low, High, Close Parameter in MQL5? - Seite 5

 
Igor Makanu:

Sie können entweder die Klasse CNewbar verwenden, oder im Forum nach NewBar suchen


Sie haben einen iTime-Anruf in Ihrer Klasse. Mir wurde geraten, es zu vergessen). Außerdem, wo ist die Garantie, dass es nicht die gleiche Arbeit wie CopyRates macht? Du rufst sie bei jeder Zecke an. Wie auch immer, ich rufe CopyRates bei jedem Tick auf und das Problem ist gelöst.

 
Artyom Trishkin:

Ja, bei jedem Ticken überprüfen wir die Uhrzeit:

Kurz und bündig:

ich schreibe nur auf den Knien - um die Idee zu zeigen, nicht die Genauigkeit des Schreibens

Es macht keinen Sinn, einen neuen Takt zu berechnen, wenn die Berechnung selbst CopyRates oder sein Gegenstück beinhaltet. Die gleichen Kosten werden anfallen.

Ich melde mich bei jeder Zecke. Ups.

 
Igor Makanu:

Sie können entweder die Klasse CNewbar verwenden, oder im Forum nach NewBar suchen

ZS: ganzer Artikel!https://www.mql5.com/ru/articles/159



OK, das Übliche...hoppla, hoppla, hoppla...und keine einzige Codezeile ))))

Ich habe mein Beispiel angeführt, um zu zeigen, dass es nicht immer bequem (und selten notwendig) ist, ein Array von aufeinanderfolgenden OHLC-Werten zu erhalten. Bei praktischen Problemen müssen Sie normalerweise eine Auswahl von OHLC-Werten aus verschiedenen Balken erhalten (Indikatoren werden nicht berücksichtigt)

Ok, sei nicht krank!

Ach, kommen Sie. Dicke Menschen sind meist warm. Deshalb können Sie diese Vergleiche auch nutzen. Wen kümmert es, ob Sie OHLC brauchen... Igor hat gesagt, du sollst Fraktale benutzen, also benutze sie...

 
Реter Konow:

Sie haben einen iTime-Anruf in Ihrer Klasse. Mir wurde geraten, es zu vergessen). Außerdem, wo ist die Garantie, dass es nicht die gleiche Arbeit wie CopyRates macht? Du rufst sie bei jeder Zecke an. Kurz gesagt, ich werde CopyRates bei jedem Tick aufrufen und das Problem ist gelöst.

Dies ist länger als der einmalige Aufruf von CopyTime() oder iTime() pro Tick.

CopyRates() wird nur aufgerufen, wenn Sie alle Werte des Balkens auf einmal benötigen - im Moment der Definition eines neuen Balkens.

 
Реter Konow:
Es macht keinen Sinn, einen neuen Takt zu berechnen, wenn die Berechnung selbst CopyRates oder sein Gegenstück beinhaltet. Die gleichen Kosten werden anfallen.

Ich melde mich bei jeder Zecke. Spas.

Antwort: Sie liegen falsch.

 
Artyom Trishkin:

Dies ist länger als der einmalige Aufruf von CopyTime() oder iTime() pro Tick.

Rufen Sie CopyRates() nur dann auf, wenn Sie alle Balkenwerte auf einmal benötigen - zum Zeitpunkt der Definition eines neuen Balkens.

Gut. Die Einstellung, iXXX-Funktionen zu vergessen, muss also vergessen werden).

 
Реter Konow:

Gut. Wir müssen also die iXXX-Funktionen vergessen)).

Ja, natürlich. Nicht alles, was sie sagen, ist nützlich. Und ich kann so einen Blödsinn sagen :)))

Aber hier - aus Geschwindigkeitsgründen: CopyRates() ist nützlich, wenn Sie mehrere Werte eines Balkens gleichzeitig abrufen müssen (Ihr Fall). Es ist langsamer als CopyTime() oder iTime(), aber wenn Sie CopyOpen(), CopyHigh(), CopyLow() und CopyClose() + (CopyTime(), falls erforderlich) aufrufen, dann ist es langsamer als der einzelneAufruf CopyRates(), der alle erforderlichen Werte auf einmal zurückgibt.

Fazit: Bei jedem Tick arbeiten wir mit CopyTime() oder iTime(), um einen neuen Balken zu bestimmen, und im Moment des Erscheinens eines neuen Balkens rufen wir CopyRates() einmal auf.

Und Sie sollten keine religiösen Aussagen berücksichtigen, die durch nichts als den Glauben bestätigt werden. Sie können selbst prüfen, was wäre schneller für Ihren Fall der Definition einer neuen Bar - CopyTime() oder iTime() - vor kurzem in MQL5 Funktion implementiert, die das Schreiben von Cross-Plattform-Code erleichtert (es ist eine Lüge - da MQL4 enthält auch CopyXXX Funktionen, aber die Portierung von MQL4 Code in MQL5 ist einfacher - Sie brauchen nicht zu wiederholen iXXX Funktionen)

 
Реter Konow:
Woher wüssten Sie sonst, dass sich die Öffnungszeit des aktuellen Taktes geändert hat?
//+------------------------------------------------------------------+
//|                                                       NewBar.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

MqlDateTime time;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{

   EventSetMillisecondTimer(100);
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   EventKillTimer();   
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{

   
}

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{
   TimeGMT(time);   
   //TimeLocal(time);

   if(NewMinute())
   {
     Print("Я новая минута");
   }		
}

//####################################################################

//Получить новое время
int zero = 0;
bool NewMinute()
{
  int minute = time.min; //time.sec; time.hour;  time.day; 
  if(zero != minute)
  {    
    zero = minute;
    return(true);
  }
  else return(false); 
}
 
Реter Konow:

Sie haben einen iTime-Anruf in Ihrer Klasse. Mir wurde geraten, es zu vergessen). Außerdem, wo ist die Garantie, dass es nicht seinerseits die gleiche Aufgabe wie CopyRates erfüllt? Du rufst sie bei jeder Zecke an. Kurz gesagt, ich werde CopyRates bei jedem Tick aufrufen und das Problem ist gelöst.

Schreibst du immer nur und versuchst nicht zu lesen? Ich habe dir einen Link zu einem ganzen Artikel über die neue Bar gegeben! Artikel werden geprüft - geprüft von Leuten mit einer anderen Kompetenz als denen, die ständig im Forum schreiben ;)

ZS: Wenn Sie aufhören zu schreiben und anfangen zu lesen, wie der Artikel auf meinem Link, können Sie einen anderen Weg finden (SERIES_LASTBAR_DATE ), um die iXXX() nicht zu verwenden - ich habe Ihnen gesagt, sie nicht zu verwenden ))) - Wer würde Bugs und Fehler melden, die Entwickler schlampig veröffentlicht )))))

 
Igor Makanu:

Schreibst du immer nur und versuchst nicht zu lesen? Ich habe dir einen Link zu einem ganzen Artikel über die neue Bar gegeben! Die Artikel werden geprüft - und zwar von Leuten mit einer anderen Kompetenz als denen, die ständig im Forum schreiben ;)

ZS: Wenn Sie aufhören zu schreiben und anfangen zu lesen, wie der Artikel auf meinem Link, können Sie einen anderen Weg finden ( SERIES_LASTBAR_DATE ), um die iXXX() nicht zu verwenden - ich habe Ihnen gesagt, sie nicht zu verwenden ))) - wer würde die Bugs und Fehler, die die Entwickler veröffentlicht schlampig ))))) sagen.

Es gab einige Probleme mit SERIES_LASTBAR_DATE. Das wurde hier vor langer Zeit schon einmal diskutiert. Vielleicht wurde sie repariert.