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

 
Tapochun:

1. die Öffnungszeit der Tageskerze zu bestimmen;

Bestimmen Sie die Anzahl der Balken auf der TF, die Sie wünschen (wenn Sie den Tageshöchststand alle 15 Minuten überprüfen möchten - M15 Balken);

3. Empfangen Sie die Daten hoch für num Bars;

3. Vergleichen Sie in der Schleife alle Werte der hohen Balken mit der Variablen dayHigh für die gewünschte Tageskerze (anfangs dayHigh = 0);

4. Wenn high > dayHigh ist, speichern Sie den neuen Wert in der Variablen dayHigh;

Das ist verständlich, danke. Aber so weit ist es schwierig für mich... oder eher Punkt 2, ist es notwendig, Berechnung für jede TF zu tun und legte es in Bereichen, um die Anzahl der Kerzen zu finden?

Können wir nicht einfach das Datum des aktuellen Zeitrahmens herausfinden und alle Werte für das Datum durchsehen, ohne die Anzahl der vergangenen Kerzen zu zählen?

 
-Aleks-:

Das ist verständlich, vielen Dank. Aber so weit ist es kompliziert für mich... oder genauer gesagt Punkt 2, ist es zu tun, eine Berechnung für jede TF und legte es in Bereichen, um die Anzahl der Candlesticks zu finden?

Können wir nicht einfach das Datum des aktuellen Zeitrahmens herausfinden und alle Werte für das Datum durchsehen, ohne die Anzahl der abgelaufenen Kerzen zu ermitteln?

Es ist einfach,die Anzahl der Balken innerhalb eines Tages zu bestimmen. Zum Beispiel für ein 15-Minuten-Diagramm. Teilen Sie die Anzahl der Minuten eines Tages durch 15 (1440 / 15 = 96 Takte oder anders PERIOD_D1/PERIOD_M15 = 96)
 
Vitalii Ananev:
Die Anzahl der Intraday-Balken ist einfach zu bestimmen. Zum Beispiel für einen 15-Minuten-Chart. Teilen Sie die Anzahl der Minuten eines Tages durch 15 (1440 / 15 = 96 Takte oder anders PERIOD_D1/PERIOD_M15 = 96)
Sie sollten das nicht tun! Nehmen Sie niemals als Tatsache an, dass die Anzahl der Balken an einem bestimmten Tag auf der TF gleich bleibt!
 
Vitalii Ananev:
Die Anzahl der Takte pro Tag ist leicht zu ermitteln. Zum Beispiel für einen 15-Minuten-Chart. Teilen Sie die Anzahl der Minuten eines Tages durch 15 (1440 / 15 = 96 Takte oder anders PERIOD_D1/PERIOD_M15 = 96).

Das verstehe ich mathematisch, aber wie man das mit Funktionen macht - das ist die Frage! Angenommen, ich ermittle die aktuelle Zeit mit Time, und wie kann ich dann

Ich denke, um einen Zähler für jede TF, mit einem neuen Bar, die zu Beginn eines neuen Tages zurückgesetzt werden, und auf Null für einen Tag maximal zurückgesetzt werden, und vor, dass ein Vergleich der einzelnen Bar zu tun, aber wie es zu programmieren?

 
Tapochun:
Das sollten Sie nicht tun! Man sollte nie davon ausgehen, dass die Anzahl der Balken an einem bestimmten Tag bei TF gleich ist!

Ja, zum Beispiel kann es an einem Freitag eine frühe Schließzeit geben...

Sie müssen also einen Tag definieren und ein Array nehmen, um das Maximum für den Tag zu finden, ohne die Anzahl der Candlesticks zu berücksichtigen, wie machen Sie das?

 
-Aleks-:

Das verstehe ich mathematisch, aber wie man das mit Funktionen macht - das ist die Frage! Angenommen, ich ermittle die aktuelle Zeit mit Time, und wie kann ich dann

Ich denke, ich sollte einen Zähler für jeden TF mit einem neuen Balken erstellen, der bei einem neuen Tag auf Null zurückgesetzt wird. Ich möchte ihn für maximal einen Tag auf Null setzen und jeden Balken davor vergleichen; aber wie soll ich das programmieren?

So können wir ungefähr den ersten Balken finden, der dem Tagesbeginn entspricht.

 datetime BeginDay = iTime(Symbol(), PERIOD_D1, iBarShift(Symbol(), PERIOD_D1, Time[NumberBar]));  

 int StartBar = iBarShift(Symbol(), 0, BeginDay);
 
Vitalii Ananev:

So lässt sich der erste Balken, der dem Tagesbeginn entspricht, ungefähr finden.

Wir haben zum Beispiel diesen Algorithmus.

Wir haben den ersten Balken gefunden - in dem Moment, in dem er sich bildet, wird dieser Balken das Hoch des Tages sein. Dann holen wir den nächsten Balken und prüfen sein Maximum. Wenn es höher ist als das vorherige, bedeutet das, dass es ein neues Tageshoch ist. Und so weiter bis zum letzten Takt des Tages.

 
#property script_show_inputs
#property strict
//+------------------------------------------------------------------+
//| Входные параметры                                                |
//+------------------------------------------------------------------+
input ENUM_TIMEFRAMES inpUserTimeframe=PERIOD_M15;   // Пользовательский ТФ
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
// Определяем время открытия текущего дня
   datetime open_D1=iTime(_Symbol,PERIOD_D1,0);

// Определяем номер первого сформированного бара по пользовательскому ТФ за текущий день
   int last_utf = iBarShift( _Symbol, inpUserTimeframe, open_D1, true );
   if( last_utf == -1 )
     {
      Alert(EnumToString(inpUserTimeframe)+" ОШИБКА #",GetLastError(),": номер бара не определен! "+TimeToStr(open_D1));
      return;
     }

// Определяем максимум дня
   double dayHigh=0;
   double high;
   int highNum=0;

   for(int i=1; i<=last_utf; i++) // Цикл по сформированным свечам за текущий день
     {
      high = iHigh( _Symbol, inpUserTimeframe, i );   // Максимум на i свече
      if( high > dayHigh )                            // Если максимум дня превышен
        {
         dayHigh = high;                              // Запоминаем новый максимум
         highNum = i;                                 // Запоминаем номер свечи
        }
     }

   Alert(EnumToString(inpUserTimeframe)+": максимум дня = ",DoubleToString(dayHigh,_Digits)," обнаружен на свече #",highNum);
  }
Dateien:
toAleks.mq4  3 kb
 
Tapochun, Vitalii Ananev- Vielen Dank! Ich werde nun versuchen, das Gelernte anzuwenden.
 
Tapochun:
Kann ich einen Indikator anstelle eines Skripts sehen? Ich habe nur Schwierigkeiten mit all diesen Zeitfeldern... Ich würde gerne von einem Beispiel lernen.
Grund der Beschwerde: