Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 375

 
Tapochun:

1. Determinare il tempo di apertura della candela giornaliera;

Determinate il numero di barre num sul TF che volete (se volete controllare l'estremo del giorno ogni 15 minuti - M15 barre);

3. Ricevere i dati alti per num bar;

3. Nel ciclo, confronta tutti i valori delle barre alte con la variabile dayHigh per la candela del giorno desiderato (inizialmente dayHigh = 0);

4. Se high > dayHigh, si memorizza il nuovo valore nella variabile dayHigh;

Questo è comprensibile, grazie. Ma finora è complicato per me... o meglio il punto 2, dovrebbe essere calcolato per ogni TF e messo in intervalli per trovare il numero di candele?

Non possiamo semplicemente trovare la data del timeframe corrente e cercare tutti i valori per la data, senza contare il numero di candele che sono passate?

 
-Aleks-:

È comprensibile, grazie. Ma finora è complicato per me... o più precisamente il punto 2, è fare un calcolo per ogni TF e metterlo in intervalli per trovare il numero di candele?

Non possiamo semplicemente trovare la data del timeframe corrente e cercare tutti i valori per la data, senza determinare il numero di candele che sono passate?

È facile determinareil numero di barre all'interno del giorno. Per esempio, per un grafico a 15 minuti. Dividere il numero di minuti in un giorno per 15 (1440 / 15 = 96 barre o un altro PERIOD_D1/PERIOD_M15 = 96)
 
Vitalii Ananev:
Il numero di barre intraday è semplice da determinare. Per esempio per un grafico a 15 minuti. Dividere il numero di minuti in un giorno per 15 (1440 / 15 = 96 barre o un altro PERIOD_D1/PERIOD_M15 = 96)
Non dovreste farlo! Non accettare mai come un dato di fatto che il numero di barre in un dato giorno sul TF sia lo stesso!
 
Vitalii Ananev:
È facile determinare il numero di barre in un giorno. Per esempio per il grafico a 15 minuti. Dividi il numero di minuti in un giorno per 15 (1440 / 15 = 96 barre o un altro PERIOD_D1/PERIOD_M15 = 96).

Lo capisco matematicamente, ma come farlo con le funzioni - questa è la domanda! Supponiamo che io ottenga l'ora corrente usando Time, e poi come

Penso di fare un contatore per ogni TF, con una nuova barra, che sarà azzerata all'inizio di un nuovo giorno, e azzerata per un giorno massimo, e prima di questo fare un confronto di ogni barra, ma come programmarlo?

 
Tapochun:
Non dovresti farlo! Non si dovrebbe mai prendere come un dato di fatto che il numero di barre in un dato giorno per TF sarà lo stesso!

Sì, per esempio ci può essere una chiusura anticipata il venerdì...

Quindi devi definire un giorno, e prendere un array per trovare il massimo del giorno senza tener conto del numero di candele, come fai?

 
-Aleks-:

Lo capisco matematicamente, ma come farlo con le funzioni - questa è la domanda! Supponiamo che io ottenga l'ora corrente usando Time, e poi come

Penso che dovrei fare un contatore per ogni TF, con una nuova barra, che sarà azzerato in caso di un nuovo giorno. Voglio azzerarlo per un giorno massimo e confrontare ogni barra prima di questo; ma come dovrei programmarlo?

Questo è approssimativamente il modo in cui possiamo trovare la prima barra corrispondente all'inizio del giorno.

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

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

Questo è più o meno come trovare la prima barra corrispondente all'inizio della giornata.

Per esempio abbiamo questo algoritmo.

Abbiamo trovato la prima barra - al momento in cui si forma questa barra sarà il massimo della giornata. Poi prendiamo la barra successiva e controlliamo il suo massimo, se è più alto del precedente, significa che è un nuovo massimo del giorno. E così via fino all'ultima barra della giornata.

 
#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);
  }
File:
toAleks.mq4  3 kb
 
Tapochun, Vitalii Ananev- Grazie! Ora cercherò di applicare ciò che ho imparato.
 
Tapochun:
Posso vedere un indicatore invece di uno script? Sto solo avendo difficoltà con tutte queste matrici temporali... Mi piacerebbe imparare da un esempio.
Motivazione: