Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 784

 
Aleksey Vyazmikin:

Per favore, aiutatemi a creare una funzione.

Ho un TF corrente e un TF stimato, la funzione dovrebbe restituire la differenza tra i due TF in qualsiasi combinazione, se la misura fosse in barre

Calcolo TF 15 15 15 60 60 60 240 240 240
Corrente TF 15 5 1 15 5 1 60 15 5
Differenza in Nbar 1 3 15 4 12 60 4 16 48

Come implementare questo correttamente?


L'ho fatto in questo modo.

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

Il problema è che ho bisogno di questa felicità per l'indicatore, ma non vuole inizializzarsi correttamente e a questo codice

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

return(INIT_SUCCEEDED); }

Reagisce così:

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

La cosa più confusa è che stampa un test che è già nel corpo di OnCalculate!

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

La prima volta il lasso di tempo era definito correttamente, ma la seconda volta no...

Non so cosa ci sia di strano...

Anche se lo so, è la chiamata dell'indicatore dall'indicatore... correndo in tondo...
 
Aleksey Vyazmikin:

L'ho fatto così

Il problema è che ho bisogno di questa felicità per l'indicatore, ma è strano e non vuole inizializzarsi correttamente, in risposta a questo codice

Reagisce così:

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

La cosa più confusa è che stampa un test che è già nel corpo di OnCalculate!

La prima volta il lasso di tempo era definito correttamente, ma la seconda volta no...

Non so cosa siano queste meraviglie.

Anche se lo so, sta chiamando l'indicatore dall'indicatore... correndo in tondo...

Perché devo fare tutta questa fatica?

Non è più facile?

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

Cosa sono tutti questi colpi di scena?

Non renderebbe tutto più facile?


Quindi il thread è per i principianti, ecco perché non sapevo di questa possibilità, grazie per averlo fatto notare.

 

Potete dirmi qual è la funzioneiBarShift più affidabile con due TF in questo momento?

Ho il compito di trovare, per esempio, su una barra al minuto il valore dell'indicatore dal TF superiore, per esempio, M15. I tempi possono essere qualsiasi, il che complica la soluzione.

Per un'ora TF, ho fatto attraverso la struttura, ma se è M15, allora qui sono confuso...

 
Aleksey Vyazmikin:

Potete dirmi qual è la funzione iBarShift più affidabile con due TF in questo momento?

Ho il compito di trovare, per esempio, su una barra al minuto il valore dell'indicatore dal TF superiore, per esempio, M15. I tempi possono essere qualsiasi, il che complica la soluzione.

Per un'ora TF, ho fatto attraverso la struttura, ma se è M15, qui sono confuso...

Gira questo script:Ricerca del bar più vicino

 
Vladimir Karputov:

Gira questo script:Ricerca del bar più vicino


Grazie.

 
Aleksey Vyazmikin:

Quindi il thread è per i principianti, ecco perché non sapevo di questa funzione, grazie per il suggerimento.

Aleksey, mql4 ce l'ha da molto tempo.


Aleksey Vyazmikin:

Potete dirmi qual è la funzione iBarShift più affidabile con due TF in questo momento?

Ho il compito di trovare, per esempio, su una barra al minuto il valore dell'indicatore dal TF superiore, per esempio M15. I tempi possono essere qualsiasi, il che complica la soluzione.

Per un'ora TF, ho fatto attraverso la struttura, ma se è M15, sono confuso qui...

In questo caso dovresti provare a dimenticare la numerazione delle barre come era in mql4. In mql5 tutto è quasi risolto dal tempo della barra. In un pizzico, potete usare la funzione Bars().

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:
Alexei, questo è stato disponibile in mql4 per molto tempo.

Apparentemente questo dimostra che nemmeno io conosco bene mql4, cosa che non ho mai sostenuto...

Alexey Viktorov:

E in questo caso cercate di dimenticare la numerazione delle barre come era in mql4. In mql5 tutto è quasi risolto dal tempo della barra. In un pizzico, provate ad usare la funzione Bars().

Sei sicuro dell'arrotondamento?

Supponiamo che il tempo su m1 sia 14:44, ma ho bisogno di 14:30 (prima barra di M15).

 
Aleksey Vyazmikin:

Apparentemente questo dimostra che nemmeno io conosco molto bene mql4, cosa che non ho mai sostenuto...

Sei sicuro dell'arrotondamento?

Diciamo che il tempo su m1 è 14:44 e ho bisogno di ottenere un tempo di 14:30 (prima barra di m15).

Questo è qualcosa di un'altra serie. Cosa devi ottenere alle 14:44 dal periodo della barra M15 delle 14:30? Prendete la funzione Copy**** e metteteci PERIOD_M15 e il tempo 14:44 e vedete cosa ottenete. E quando il risultato non è quello che ti aspetti, allora le domande saranno diverse.

 
Alexey Viktorov:

È qualcosa di un'altra serie. Cosa devi ottenere alle 14:44 dal periodo della barra M15 delle 14:30? Prendete la funzione Copy**** e metteteci PERIOD_M15 e il tempo 14:44 e vedete cosa ottenete. E quando il risultato non è quello che ti aspetti, allora le domande saranno diverse.


Sì, è lì che lavoravo. Comunque, ho ricevuto un aiuto. Grazie anche a te.

Motivazione: