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

 
Aleksey Vyazmikin:

Bitte helfen Sie mir, dieses Problem zu lösen.

Angenommen, ich habe einen aktuellen Zeitrahmen M1, muss ich die Zeit des letzten Balkens N des gegebenen Balkens eines beliebigen oberen TF wissen, die Stunde kann nicht 60 Minuten, sondern 45 oder eine andere Zeit sein, und außerdem gibt es Wochenenden, ich muss das Datum des letzten Balkens des aktuellen TF von jedem TF wissen.

Wie kann ich das tun?

Sie geben die Bar-Nummer, den Symbolnamen und den gewünschten Zeitrahmen an:

//+------------------------------------------------------------------+ 
//| Get Time for specified bar index                                 | 
//+------------------------------------------------------------------+ 
datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=Period();
   datetime Time[1];
   datetime time=0; // datetime "0" -> D'1970.01.01 00:00:00'
   int copied=CopyTime(symbol,timeframe,index,1,Time);
   if(copied>0)
      time=Time[0];
   return(time);
  }

Prüfen Sie (nur für den Fall), ob die Funktion die Zeit D'1970.01.01 00:00:00' zurückgibt - dann liegt ein Fehler vor.

 

Ich bin auf ein Problem gestoßen, bei dem ein Verkaufsauftrag nicht erteilt wurde

2018.05.23 12:07:55.002 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.112 Trades  '50250084': accepted market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.113 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397 placed for execution
2018.05.23 12:07:55.114 Trades  '50250084': rejected market sell 0.01 EURUSD tp: 1.17397 (rejected)

Verstehe ich das richtig, dass der Makler den Auftrag angenommen und dann abgelehnt hat?

Aus welchen Gründen denn und warum nicht? In den Protokollen sind keine Fehler mehr zu finden. Vor diesem Fehler gab es mehr als 50 Aufträge ohne Fehler. Nach diesem Fehler haben wir auch keine weiteren Fehler registriert.

Ist es möglich, dieses Problem loszuwerden?

 
Vladimir Karputov:

Geben Sie die Strichnummer, den Symbolnamen und den gewünschten Zeitrahmen an:

Prüfen Sie (nur für den Fall), ob die Funktion die Zeit D'1970.01.01 00:00:00' zurückgibt - dann liegt ein Fehler vor.

Ich verwende diese Funktion. Ist sie schlechter als die von Ihnen vorgeschlagene?

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime iTime(string symbol,int tf,int index)
  {
   if(index < 0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[];
   if(CopyTime(symbol,timeframe,index,1,Arr)>0)
      return(Arr[0]);
   else return(-1);
  }

Das Problem ist, dass, wenn der aktuelle Zeitrahmen ist 1 Minute, ich will die Zahl der letzten Bar des aktuellen Zeitrahmens in den ausgewählten Zeitrahmen zu wissen, aber eine Menge Zeit vergangen ist (eine Lücke wegen des Wochenendes oder weil der Abend-Sitzung um 23-50 geschlossen, und die nächste nur um 10-00 geöffnet), dann gebe ich 09:59 statt 23:49:00, fordere ich die Zeit so

datetime         StopDt=iTime(Symbol(),TF_iDeltaP,_Shift-1)-60;

Deshalb frage ich, wie man den Zeitpunkt des letzten Taktes mit beliebigen Kombinationen von TFs ermitteln kann?

 
Aleksey Vyazmikin:

...

Das Problem ist, dass wenn ich einen aktuellen Zeitrahmen von 1 Minute habe, ich die Nummer des letzten Balkens des aktuellen Zeitrahmens im ausgewählten Zeitrahmen wissen möchte, ...

Bei dem hervorgehobenen Satz explodierte mein Gehirn.

 
Vladimir Karputov:

Bei dem hervorgehobenen Satz explodierte mein Gehirn.

Hier gibt es einen Tippfehler, ich brauche das Datum des letzten Balkens des aktuellen Zeitrahmens, der sich auf den ausgewählten Balken des oberen Zeitrahmens bezieht.

Ist das klar?
 
Aleksey Vyazmikin:

Hier gibt es einen Tippfehler, ich brauche das Datum des letzten Balkens des aktuellen Zeitrahmens, der sich auf den ausgewählten Balken des oberen Zeitrahmens bezieht.

Ist das klar?

Nein, das ist nicht klar. Mein Gehirn sprudelt und explodiert ständig :). Ein Balken gehört nur zu seinem eigenen Zeitrahmen.

 
Aleksey Vyazmikin:

Ein Tippfehler, ich brauche das Datum des letzten Balkens des aktuellen Zeitrahmens, der sich auf den ausgewählten Balken des oberen Zeitrahmens bezieht.

Ist das klar?

Wenn ich Ihre Anfrage richtig verstanden habe, dann:

1 Bestimmen Sie die Schlusszeit des gewünschten Balkens des oberen Zeitrahmens.

2. Berechnen Sie die Zeit des Balkens des niedrigen TF, der zusammen mit dem Balken des hohen TF schließt.

3. Fragen Sie in diesem Zeitrahmen nach dem Balken der jüngeren TF (die Anfrage ist nicht strikt) - holen Sie den Balken, der auf der Zeitachse am weitesten links liegt - den, den Sie brauchen.

4. Prüfen Sie gegebenenfalls, ob sich dieser Balken innerhalb des Balkens der oberen TF befindet (schließen Sie die Variante aus, wenn die Balken der unteren TF aus irgendeinem Grund nicht innerhalb des Balkens der oberen TF liegen).

 
Vladimir Karputov:

Nein, das tut es nicht. Das Gehirn sprudelt und explodiert ständig :). Ein Balken gehört nur zu seinem Zeitrahmen.

Ok, weiter geht's mit der Visualisierung von Gedanken :)

In weiß habe ich gezeigt, wo wir die Anfrage stellen, in gelb die Taktzeit, die wir bekommen sollten.

Ist es deutlicher? Wenn nicht, stellen Sie bitte Fragen.

 
Aleksey Vyazmikin:

OK, weiter mit der Visualisierung von Gedanken :)

Weiß zeigt an, wo wir die Anfrage stellen, gelb die Taktzeit, die wir bekommen sollten.

Ist das klarer? Falls nicht, stellen Sie bitte Fragen zur Klärung.

1. Das Bild ist klein - das nächste Mal bitte 2m mal 2m :)

2. Auch hier verstehe ich nicht, was Sie meinen: Sie haben mir ein Diagramm mit einem bestimmten Zeitrahmen gezeigt. Wo liegt das Problem bei der Beantragung der Strichnummer N in diesem Zeitrahmen?

 
Vladimir Karputov:

1. Das Bild ist klein - das nächste Mal bitte 2 Meter mal zwei auf einmal :)

2. Ich verstehe den Gedanken wieder nicht - Sie haben ein Diagramm mit einem bestimmten Zeitrahmen gezeigt. Was ist das Problem bei der Beantragung einer Bar-Nummer N in diesem Zeitrahmen?

1. Ich kann mehr machen - kein Problem ;)

Der in der oberen linken Ecke angezeigte Zeitrahmen ist M5. Ich kann nicht nach der Taktnummer N fragen, da ich nicht weiß, wie ich sie genau erfahren kann, insbesondere wenn die Verschiebung nicht 1 Takt der oberen TF ist, sondern mehrere Takte.

Ich werde versuchen, mit dem folgenden Algorithmus eine Verschiebung um einen Takt zu erreichen:

1. Ermitteln Sie, wie viele Takte seit Beginn der aktuellen oberen TF vergangen sind.

2. Verschieben Sie die erhaltene Zahl um 1 bar und ermitteln Sie die Zeit mit der Funktion iTime