Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 784

 
Aleksey Vyazmikin:

Bitte helfen Sie mir bei der Ausarbeitung einer Funktion.

Ich habe einen aktuellen TF und einen geschätzten TF, die Funktion sollte die Differenz zwischen den beiden TFs in allen Kombinationen zurückgeben, wenn die Messung in Balken war

Berechnung TF 15 15 15 60 60 60 240 240 240
Aktuelle TF 15 5 1 15 5 1 60 15 5
Differenz in Nbar 1 3 15 4 12 60 4 16 48

Wie kann man das richtig umsetzen?


Ich habe es so gemacht.

int TFk()
{
   int K=0;
   K=TF_transfer(TF)/TF_transfer(Period());
//   Print(TF_transfer(TF),"   ",TF_transfer(Period()));
//Print (K);
   if   (K<1)return(1);
   else      return(K);
}


int TF_transfer(ENUM_TIMEFRAMES tf)
  {
   if (tf==PERIOD_CURRENT) return(0);
   if (tf==PERIOD_M1) return(1);
   if (tf==PERIOD_M5) return(5);
   if (tf==PERIOD_M15) return(15);
   if (tf==PERIOD_M30) return(30);
   if (tf==PERIOD_H1) return(60);
   if (tf==PERIOD_H4) return(240);
   if (tf==PERIOD_D1) return(1440);
   if (tf==PERIOD_W1) return(10080);
   if (tf==PERIOD_MN1) return(43200);  
   if (tf==PERIOD_M2) return(2);
   if (tf==PERIOD_M3) return(3);
   if (tf==PERIOD_M4) return(4);
   if (tf==PERIOD_M6) return(6);
   if (tf==PERIOD_M10) return(10);
   if (tf==PERIOD_M12) return(12);
   if (tf==PERIOD_H2) return(120);
   if (tf==PERIOD_H3) return(180);  
   if (tf==PERIOD_M6) return(360);
   if (tf==PERIOD_H8) return(480);
   if (tf==PERIOD_H12) return(720);
   return(1);
  }

Das Problem ist, ich brauche dieses Glück für den Indikator, aber es will nicht, sich richtig zu initialisieren und zu diesem Code

int OnInit()
  {
   Print ("K=",TFk()," Период=",Period());

return(INIT_SUCCEEDED); }

Sie reagiert folgendermaßen:

2017.09.22 14:23:27.742 donchian_channel_prognoz_MTF (Eu Splice,M5) K=3 Period=5

2017.09.22 14:23:27.776 donchian_channel_prognoz_MTF (Eu Splice,M5) test

2017.09.22 14:23:27.790 donchian_channel_prognoz_MTF (Eu Splice,M15) K=1 Period=15

Das Verwirrendste ist, dass ein Test gedruckt wird, der sich bereits im Körper von OnCalculate befindet!

if(BarsCalculated(handle)<0) {Print ("test");return(0);}

Beim ersten Mal war der Zeitrahmen korrekt definiert, beim zweiten Mal jedoch nicht...

Ich weiß nicht, was so seltsam ist...

Obwohl ich weiß, dass es der Indikator ist , der den Indikator aufruft... die sich im Kreis drehen...
 
Aleksey Vyazmikin:

Ich habe es so gemacht

Das Problem ist, ich brauche dieses Glück für den Indikator, aber es ist seltsam und will nicht richtig zu initialisieren, in Reaktion auf diesen Code

Sie reagiert folgendermaßen:

2017.09.22 14:23:27.742 donchian_channel_prognoz_MTF (Eu Splice,M5) K=3 Period=5

2017.09.22 14:23:27.776 donchian_channel_prognoz_MTF (Eu Splice,M5) test

2017.09.22 14:23:27.790 donchian_channel_prognoz_MTF (Eu Splice,M15) K=1 Period=15

Das Verwirrendste ist, dass ein Test gedruckt wird, der sich bereits im Körper von OnCalculate befindet!

Beim ersten Mal war der Zeitrahmen korrekt definiert, beim zweiten Mal jedoch nicht...

Ich weiß nicht, was diese Wunder sind.

Obwohl ich weiß, dass es den Indikator vom Indikator aus aufruft... die sich im Kreis drehen...

Warum muss ich mir diese ganze Mühe machen?

Ist das nicht einfacher?

K = PeriodSeconds(TF)/PeriodSeconds(Period());
 
Alexey Viktorov:

Was hat es mit all den Drehungen und Wendungen auf sich?

Würde das die Sache nicht einfacher machen?


Der Thread ist also für Anfänger, deshalb wusste ich nichts von dieser Möglichkeit, danke für den Hinweis.

 

Können Sie mir bitte sagen, was ist die zuverlässigsteiBarShift Funktion mit zwei TFs gerade jetzt?

Ich habe die Aufgabe, z.B. auf einem Minutenbalken den Indikatorwert der oberen TF, z.B. M15, zu finden. Die Zeitrahmen können beliebig sein, was die Lösung erschwert.

Für eine Stunde TF, habe ich durch die Struktur, aber wenn es M15 ist, dann bin ich hier verwirrt ...

 
Aleksey Vyazmikin:

Können Sie mir bitte sagen, was ist die zuverlässigste iBarShift Funktion mit zwei TFs gerade jetzt?

Ich habe die Aufgabe, z.B. auf einem Minutenbalken den Indikatorwert der oberen TF, z.B. M15, zu finden. Die Zeitrahmen können beliebig sein, was die Lösung erschwert.

Für eine Stunde TF, habe ich durch die Struktur, aber wenn es M15 ist, hier bin ich verwirrt ...

Dreh dieses Skript:Suche nach der nächstgelegenen Bar

 
Vladimir Karputov:

Dreh dieses Skript:Suche nach der nächstgelegenen Bar


Ich danke Ihnen.

 
Aleksey Vyazmikin:

Der Thread ist also für Anfänger gedacht, deshalb wusste ich nichts von dieser Funktion, danke für den Hinweis.

Aleksey, mql4 hat es schon vor langer Zeit.


Aleksey Vyazmikin:

Können Sie mir bitte sagen, was ist die zuverlässigste iBarShift Funktion mit zwei TFs gerade jetzt?

Ich habe eine Aufgabe zu finden, zum Beispiel auf eine Minute bar den Wert des Indikators aus dem oberen TF, zum Beispiel M15. Die Zeitrahmen können beliebig sein, was die Lösung erschwert.

Für eine Stunde TF, habe ich durch die Struktur, aber wenn es M15, ich bin hier verwirrt ...

In diesem Fall sollten Sie versuchen, die Nummerierung der Balken, wie sie in mql4 war, zu vergessen. In mql5 ist fast alles durch die Barzeit gelöst. Notfalls können Sie auch die Funktion Bars() verwenden.

int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
Alexej, diese Funktion ist in mql4 schon seit langem verfügbar.

Offensichtlich zeigt dies, dass ich mich auch mit mql4 nicht gut auskenne, was ich nie behauptet habe...

Alexey Viktorov:

Und in diesem Fall versuchen Sie, die Taktnummerierung zu vergessen, wie sie in mql4 war. In mql5 ist fast alles durch die Taktzeit gelöst. Notfalls können Sie auch die Funktion Bars() verwenden.

Sind Sie sicher, dass die Rundung richtig ist?

Angenommen, die Zeit auf m1 ist 14:44, aber ich brauche 14:30 (erster Takt von M15).

 
Aleksey Vyazmikin:

Offensichtlich zeigt das, dass ich mich auch mit mql4 nicht sehr gut auskenne, was ich nie behauptet habe...

Sind Sie sicher, dass Sie gerundet haben?

Nehmen wir an, die Zeit auf m1 ist 14:44 und ich muss eine Zeit von 14:30 (erster Takt von m15) erhalten.

Dies ist etwas aus einer anderen Serie. Was müssen Sie um 14:44 Uhr aus der M15-Taktperiode von 14:30 Uhr holen? Nehmen Sie die Funktion Copy****, geben Sie PERIOD_M15 und die Zeit 14:44 ein und sehen Sie, was Sie erhalten. Und wenn das Ergebnis nicht das ist, was Sie erwarten, dann werden die Fragen anders lauten.

 
Alexey Viktorov:

Es ist etwas aus einer anderen Serie. Was müssen Sie um 14:44 Uhr aus der M15-Taktperiode von 14:30 Uhr holen? Nehmen Sie die Funktion Copy****, geben Sie PERIOD_M15 und die Zeit 14:44 ein und sehen Sie, was Sie erhalten. Und wenn das Ergebnis nicht das ist, was Sie erwarten, dann werden die Fragen anders lauten.


Ja, das war die Richtung, in der ich gearbeitet habe. Wie auch immer, ich habe etwas Hilfe bekommen. Auch Ihnen vielen Dank.

Grund der Beschwerde: