Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 865

 
Aleksey Vyazmikin:

Per favore aiutatemi a risolvere questo problema.

Supponiamo che io abbia un timeframe corrente M1, ho bisogno di sapere l'ora dell'ultima barra N della data barra di qualsiasi TF superiore, l'ora può non essere 60 minuti, ma 45 o qualsiasi altra ora, e inoltre ci sono i fine settimana, ho bisogno di sapere la data dell'ultima barra del TF corrente da qualsiasi TF.

Come si fa?

Si specifica il numero della barra, il nome del simbolo e il timeframe richiesto:

//+------------------------------------------------------------------+ 
//| 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);
  }

Controlla (per sicurezza) - se la funzione restituisce il tempo D'1970.01.01 00:00:00' - allora c'è un errore.

 

Ho riscontrato un problema con un ordine di vendita che non viene piazzato

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)

Ho capito bene che il broker ha accettato l'ordine e poi l'ha rifiutato?

Su quali basi allora e perché no? Non ci sono più errori nei log. Prima di questo errore c'erano più di 50 ordini senza errori. Dopo questo errore non abbiamo registrato alcun errore.

È possibile sbarazzarsi di questo problema?

 
Vladimir Karputov:

Specifica il numero della barra, il nome del simbolo e il timeframe richiesto:

Controlla (per sicurezza) - se la funzione restituisce il tempo D'1970.01.01 00:00:00' - allora c'è un errore.

Uso questa funzione, è peggiore di quella che suggerisci?

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }

Il problema è che se il timeframe corrente è 1 minuto, voglio sapere il numero dell'ultima barra del timeframe corrente nel timeframe selezionato, ma è passato molto tempo (un gap a causa del fine settimana o perché la sessione serale ha chiuso alle 23-50, e la successiva ha aperto solo alle 10-00), allora restituisco 09:59 invece di 23:49:00, richiedo il tempo così

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

Ecco perché ho chiesto, come ottenere questo tempo dell'ultima barra con qualsiasi combinazione di TF?

 
Aleksey Vyazmikin:

...

Il problema è che se ho un timeframe corrente di 1 minuto, voglio sapere il numero dell'ultima barra del timeframe corrente nel timeframe selezionato, ...

Alla frase evidenziata il mio cervello è esploso.

 
Vladimir Karputov:

Alla frase evidenziata il mio cervello è esploso.

C'è un errore di battitura, ho bisogno della data dell'ultima barra del timeframe corrente, che si riferisce alla barra selezionata del timeframe superiore.

È chiaro?
 
Aleksey Vyazmikin:

C'è un errore di battitura, ho bisogno della data dell'ultima barra del timeframe corrente, che si riferisce alla barra selezionata del timeframe superiore.

È chiaro?

No, non è chiaro. Il mio cervello continua a ribollire ed esplodere :). Una barra appartiene solo al proprio timeframe.

 
Aleksey Vyazmikin:

Un errore di battitura, ho bisogno della data dell'ultima barra del timeframe corrente, che si riferisce alla barra selezionata del timeframe superiore.

È chiaro?

Se ho capito bene la sua richiesta, allora:

1. Determinare il tempo di chiusura della barra desiderata del timeframe superiore.

2. Calcola il tempo della barra del TF basso che chiude insieme alla barra del TF alto.

3. Su questo lasso di tempo chiedi la barra del TF più giovane (la richiesta non è rigorosa) - ottieni la barra più vicina a sinistra sulla linea temporale - quella che ti serve.

4. Controlla, se necessario, che questa barra sia dentro la barra del TF superiore (escludi la variante quando le barre del TF junior non sono presenti nella barra del TF senior per qualche motivo).

 
Vladimir Karputov:

No, non è così. Il cervello continua a ribollire ed esplodere :). Una barra appartiene solo al suo timeframe.

Ok, passiamo alla visualizzazione dei pensieri :)

In bianco ho mostrato dove stiamo facendo la richiesta, in giallo il tempo della barra che dovremmo ottenere.

È più chiaro? In caso contrario, si prega di fare domande.

 
Aleksey Vyazmikin:

OK, passando alla visualizzazione dei pensieri :)

Il bianco mostra dove stiamo facendo la richiesta, il giallo il tempo della barra che dovremmo ottenere.

È più chiaro? In caso contrario, si prega di fare domande per chiarire.

1. L'immagine è piccola - la prossima volta metti 2m per 2m :)

2. Di nuovo, non capisco cosa intendi: mi hai mostrato un grafico su qualche timeframe. Qual è il problema per richiedere la barra numero N in questo lasso di tempo?

 
Vladimir Karputov:

1. L'immagine è piccola - la prossima volta metti 2 metri per due insieme :)

2. Non capisco di nuovo il pensiero - hai mostrato un grafico su qualche timeframe. Qual è il problema nel richiedere una barra numero N su questo timeframe?

1. Posso fare di più - nessun problema ;)

2. L'orizzonte temporale mostrato nell'angolo in alto a sinistra è M5. Non posso chiedere il numero di barra N perché non so come saperlo esattamente, soprattutto se lo spostamento non è 1 barra di TF superiore, ma più barre.

Proverò per uno spostamento di una barra il seguente algoritmo:

1. Scopri quante barre sono passate dall'inizio del TF superiore corrente

2. Spostare il numero ottenuto di 1 barra e trovare il tempo utilizzando la funzione iTime

Motivazione: