Indicare una nuova barra - pagina 4

 
Donald Gibson:

Enhanced-MQL4?

Non ne ho mai sentito parlare.


Nemmeno io da ieri ;) E il nome corretto sembra essere"MQL4 aggiornato". MQ scrive:

(..) A partire dalla build 600, il linguaggio di programmazione MQL4 è stato completamente rivisto raggiungendo il livello di MQL5- ora è possibile sviluppare robot di trading in MQL4/5 utilizzando l'ambiente di sviluppo unificato MetaEditor, stile unico, librerie e strumenti di debug.

(...) Pertanto, abbiamo deciso di implementare in esso la massima quantità possibile di funzioni e caratteristiche del linguaggio MQL5 preservando completamente la funzionalità MQL4. In altre parole, tutte le potenti funzioni MQL5, compreso ООP e il compilatore di codice nativo, saranno disponibili in MQL4. (...)

Per ottenere questo, abbiamo sviluppato un compilatore unificato che supporta automaticamente entrambi i linguaggi MQL4 e MQL5.(...)

Il problema nella definizione è la parola "linguaggi". Il linguaggio è MQL, così come il C++ è un linguaggio e il Basic è un linguaggio. Updated-MQL4/MQL5 sono solo mod specifici della piattaforma di MQL, né più né meno, per cui il confronto tra MQL4 (nativo) e Updated-MQL4 è praticamente lo stesso che con C e C++. E la migrazione di MQL4.com in MQL5.com ha reso la confusione perfetta. Come dimostrano questi post, la maggior parte delle persone non associa l'OOP con MQL4, come ho fatto io. Per me è sempre stato MQL5 che supporta entrambe le piattaforme, MT4 e MT5.

Ma comunque, funziona abbastanza bene e MQLWhatever è di gran lunga la migliore interfaccia in confronto a tutte le altre cose schifose in giro.

 

@Lorentzos Roussos

Alain can correct me on this but you may find gaps in instances where on the time horizon of a bar there where no ticks , so no bar will be in place

Upppsss ... Non ho mai visto una tale parlantina. (Il che non significa nulla).

Io uso il mio "NewBar-indicator" per tirare gli stop automaticamente sul massimo o sul minimo della barra precedente.

(In effetti, è un po' più difficile, poiché considero "Innenstaebe e Aussenstaebe" (eng. "movimenti interni ed esterni" ???). Non ho idea di quale sia la traduzione corretta.

Ma ho intenzione di utilizzare questo solo in mercati liquidi che hanno almeno venti - fino a qualche centinaio di tick al minuto.

Non credo di trovare un periodo di dieci minuti senza alcun tick.

Comunque, il programma dovrebbe essere in grado di gestire questo.

Grazie!

Willbur

 
Willbur:

@Lorentzos Roussos

Upppsss ... Non ho mai visto una tale parlantina. (Il che non significa nulla).

Io uso il mio "NewBar-indicator" per tirare gli stop automaticamente sul massimo o sul minimo della barra precedente.

(In effetti, è un po' più difficile, poiché considero "Innenstaebe e Aussenstaebe" (eng. "movimenti interni ed esterni" ???). Non ho idea di quale sia la traduzione corretta.

Ma ho intenzione di utilizzare questo solo in mercati liquidi che hanno almeno venti - fino a qualche centinaio di tick al minuto.

Non credo di trovare un periodo di dieci minuti senza alcun tick.

Comunque, il programma dovrebbe essere in grado di gestire questo.

Grazie!

Willbur

stai usando iTime, se non c'è una nuova barra non sparerà comunque.sei al sicuro
 
stai usando iTime, se non c'è una nuova barra non sparerà comunque.sei al sicuro <br / translate="no">

Cosa intendi per "Stai usando iTime"? Ho capito che "iTime" è solo una variabile nel tuo programma - puoi chiamarla "Bert" o "Clarly" se vuoi ?!?

- - - - -

Oggi ho fatto alcuni test. E ho trovato alcune delle lacune che hai menzionato.

es. S&P500 alle 20:34 c'è una barra, per le 20:35 e 20:36 non ho ricevuto nessun tick e nessuna barra dal server (ActiveTrades). Il prossimo tick è arrivato alle 20:37.

Successivamente non ci sono barre nel grafico per questi periodi (vedi grafico M1 allegato).

Non ho controllato, ma penso che non ci siano barre anche all'interno della funzione CopyRates() per questo tempo.



Penso che dovresti controllare il tuo codice a questo punto.

Immagino che indicherà i tre primi tick della barra delle 20:37 come nuove barre.

(TimeCurrent() salta dalle 20:34 alle 20:37! Devi aggiungere PeriodeSeconds() tre volte per arrivarci).

void OnTick()  
{
//---   if(TimeCurrent()>=projection)   
    {Print("New Bar "+TimeToString(projection,TIME_DATE|TIME_MINUTES));   
     projection=projection+PeriodSeconds();   
    }

Willbur


 

Ciao a tutti,

Nel caso in cui qualcuno stia ancora cercando... ecco uno snipet del mio codice per assicurare che venga aperto un solo trade per barra.

  if (iBars(Symbol(),0) == BarsCurr)DisableTrading = 1;
  
  for(i=0;i<OrdersTotal();i++)
  {
  if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES) == True && OrderMagicNumber() == MagicNumber) DisableTrading = 1;
  }

  for(i=OrdersTotal();i>0;i--)
  {
  if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == True && OrderMagicNumber() == MagicNumber)
  {
  if ((OrderClosePrice() >= Open[0] && OrderClosePrice() <= Close[0]) && (OrderOpenPrice() >= Open[0] && OrderOpenPrice()<= Close[0]))
  {
  DisableTrading = 1;
  }
   }
      }

Le ibars possono essere sostituite con le barre e il disabletrading = 1 significa non fare nulla. La parte delle barre può essere ulteriormente compresa usando ciò che è postato normalmente. Metti BarsCurr = 0 nella parte di inizializzazione e BarsCurr = Bars nella parte di ordine di acquisto/vendita del tuo codice.

Ho un problema però, sto cercando di implementare l'ordine di chiusura con l'inversione del segnale... qualche idea?

 

Poiché il dibattito sul riconoscimento dei NewBars è diventato un po' più lungo, riassumerò brevemente i risultati.

Ambiente tecnico:

Se un cambiamento (nuovo trade o nuova determinazione del prezzo) viene rilevato dal server, il server invia un segnale al terminale. Il programma del terminale attiva la routine OnTick ().

Con questo segnale otteniamo le seguenti informazioni:

Time Current ( ) - il tempo del server quando il tick è stato inviato.

Informazioni sull'ultimo tick - SymbolInfoTick()
- Tempo del server in cui il tick è sorto
- Chiedere
- Offerta
- Ultimo prezzo (non con tutti i provider)
- un flag che indica cosa è stato cambiato.

Informazioni sulla barra corrente
- CopyRates()
- un "nome" per la barra, ad esempio "10:20:00".
- Aperto-Alto-Basso-Chiuso

Riconoscere una nuova barra (es. Periodo = M1)

Perché il server invia un segnale solo se qualcosa è cambiato,
le barre con il nome "hh.mm:00" possono apparire più tardi di "hh:mm:00"

Questo può causare situazioni particolari per i simboli con poca liquidità.

Le soluzioni che trattano la durata del periodo non lo rilevano:

TimeCurrent() barre "nome"
Ultimo Tick 10:10:07 10.10:00
Next Tick 10:11:30 10:11:00

Né con questo (Zero tick in un periodo):

TimeCurrent() barre "nome"
Ultimo Tick 10:10:30 10:10:00
Next Tick 10:13:40 10:13:00 Manca la barra delle 10:12:00!

Molto raramente ho visto situazioni (durante un carico molto alto sul server?) in cui il tempo del server è già passato al periodo successivo mentre le barre no.

TimeCurrent() barre "nome"
Ultimo Tick 10:10:00 10:09:00
Tick successivo 10:10:00 10:10:00

Conclusione:

Va bene usare il TimeCurrent() per sopprimere l'inutile CopyRate().

Una volta che il TimeCurent() raggiunge il nuovo periodo si deve controllare se anche la barra è cambiata.

Questo mi riporta al codice che Alain ha portato nella discussione molto presto:

https://www.mql5.com/en/forum/22983

Willbur

Improve your time execution by removing Bars function calls
Improve your time execution by removing Bars function calls
  • www.mql5.com
After a basic profiling I get the following results :.
 

@emeka Mbanefo

il mio manuale non menziona una funzione chiamata "iBars".

Sei sicuro che si tratti di codice MQL5?

Willbur

 
Willbur:

@emeka Mbanefo

Il mio manuale non menziona una funzione chiamata "iBars".

Sei sicuro che questo sia il codice MQL5?

Willbur

Ah, non è per mql5. È per mql4, credo. Comunque, l'iBars sono io che gioco. Il suo Bars è una funzione generale, come ho già detto.

Sto ancora aspettando l'assistenza per il codice di inversione del segnale.

Grazie.

 
emeka Mbanefo:

Ah, non è per mql5. È per mql4, credo. Comunque, l'iBars sono io che gioco. Il suo Bars come funzione generale, come ho già detto.

Sto ancora aspettando l'assistenza per il codice di inversione del segnale.

Grazie.

  • Per favore non dirottare altri topic con contenuti non correlati.
  • Questo argomento riguarda mql5, come già detto.
  • Questo argomento riguarda il rilevamento di una nuova barra, non il trading solo una volta per barra.
  • iBars non è affidabile per rilevare la nuova barra.
Indicate a new bar
Indicate a new bar
  • www.mql5.com
Another idea could be the check wether the number of bars has been incremented.