Indicare una nuova barra - pagina 2

 
Doerk Hilger:

Il modo più semplice:

static datetime tlastbar=0;

datetime tnewbar=iTime(NULL,PERIOD_CURRENT,0);

bool isnewbar=tnewbar!=tlastbar;

tlastbar=tnewbar;

Per quanto ne so l'argomento è per mql5. Il tuo codice è solo per mql4.
 
Willbur:

Ecco la mia versione finale.

In effetti sono un po' preoccupato perché è così facile.

Alain: Sarebbe bello se tu emettessi la benedizione.

// -----------------------------------------------------------------------
bool NewBar(void)
{
bool iNewBar = false;
static double currPeriodProgress = 0;

   if(MathMod(TimeCurrent(),PeriodSeconds()) < currPeriodProgress) iNewBar = true;

   currPeriodProgress = MathMod(TimeCurrent(),PeriodSeconds());

   return(iNewBar);
}
// ------------------------------------------------------------------------
void OnTick()
{
    if(NewBar())     PlaySound("tick.wav");


Saluti da Colonia
Willbur

Il problema è che può essere usato solo da OnTick(). Da altri gestori di eventi non sei mai sicuro se TimeCurrent() è legato al simbolo che vuoi.

E vi suggerisco di non fare mai lo stesso calcolo due volte:

bool NewBar(void)
  {
   bool iNewBar=false;
   static double currPeriodProgress=0;

   double lastPeriodProgress=MathMod(TimeCurrent(),PeriodSeconds());

   if(lastPeriodProgress<currPeriodProgress) iNewBar=true;

   currPeriodProgress=lastPeriodProgress;

   return(iNewBar);
  }
 
Alain Verleyen:
Per quanto ne so l'argomento è per mql5. Il tuo codice è solo per mql4.
Cosa intendi con questo? È solo uno snipped e può essere incluso dove si vuole, ad esempio all'interno della sua funzione NewBar(). E imo è la soluzione più semplice e veloce e affidabile. Ho incluso questo in un derivato della classe CSymbolInfo per tutti i timeframe separatamente e funziona perfettamente.
 

Ho usato questi in MQL4

//global
long Bars_in_Chart;

   // detected new bar
   if(Bars_in_Chart<Bars)
   {
      Bars_in_Chart=Bars;
   }
 
Doerk Hilger:
Cosa intendi con questo? È solo uno snipped e può essere incluso dove si vuole, ad esempio all'interno della sua funzione NewBar(). E imo è la soluzione più semplice e veloce e affidabile. Ho incluso questo in un derivato della classe CSymbolInfo per tutti i timeframe separatamente e funziona perfettamente.
Non esiste una funzione iTime() in mql5.
 
Alain Verleyen:
Non esiste una funzione iTime() in mql5.
MT5, davvero? Ma MQL5 non è solo MT5, almeno così l'ho sempre capito, perché MT4 usa il compilatore MQL5. Ma in effetti non lo sapevo, io uso principalmente MT4. Comunque, grazie per le informazioni sulla restrizione.
 
Doerk Hilger:
MT5, davvero? Ma MQL5 non è solo MT5, almeno così l'ho sempre capito, perché MT4 usa il compilatore MQL5. Ma in realtà non sapevo che, io uso principalmente MT4. Comunque, grazie per l'informazione sulla restrizione.
No, mql4 è per MT4, mql5 è per MT5. Hanno un sottoinsieme di funzioni in comune, ma sono 2 linguaggi diversi.
 

MQL4 iTime() è facile e comprensibile per i commercianti, come la maggior parte delle altre funzioni di MQL4.

MQL5 è diverso, c'è bisogno di una laurea in informatica per codificarlo, e questo è ciò che abbatte la maggior parte delle persone.

Ecco un esempio che ho incontrato la settimana scorsa, quando volevo iniziare a convertire i miei EA MT4 in MT5 e la soluzione che ho trovato.


 
Alain Verleyen:
No, mql4 è per MT4, mql5 è per MT5. Hanno un sottoinsieme di funzioni in comune, ma sono 2 lingue diverse.

Il linguaggio è lo stesso ma hanno un piccolo sottoinsieme di funzioni non in comune ;) Comunque, probabilmente hai ragione con questa definizione. MQ ha fatto molto per generare confusione a questo punto.

 
Doerk Hilger:
MT5, davvero? Ma MQL5 non è solo MT5, almeno così l'ho sempre capito, perché MT4 usa il compilatore MQL5. Ma in realtà non sapevo che, io uso principalmente MT4. Comunque, grazie per le informazioni sulla restrizione.
Sai se c'è una libreria/classe pubblica che implementa le vecchie funzioni iClose, iTime ... solo per compatibilità? Avrebbe senso durante una conversione passo dopo passo.