Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1076

 

Come si legge un file grande in una riga?

FileReadString()

Quando si legge da un file bin, si deve specificare la lunghezza di una stringa da leggere. Quando si legge da un file txt la lunghezza della stringa non è richiesta, e la stringa sarà letta dalla posizione corrente al carattere di avanzamento di riga "\r\n". Quando si legge da un file csv, anche la lunghezza della stringa non è richiesta, la stringa sarà letta dalla posizione corrente fino al delimitatore più vicino o fino al carattere finale della stringa di testo.

L'unico flag per l'intero file è FILE_BIN, ma in MQL5, a differenza di MQL4, è limitato a 4095 byte. Come posso ottenere un testo grande da un file su una sola riga?
 
Сергей Таболин:

Non è quello che voglio dire.

"E con un NOT logico da risolvere - invertire i bit, ma non ho un terminale - non riesco a ricordare come fare un NOT bitwise in MQL, e non voglio leggere l'aiuto online".

Voglio dire o mi dai una prova o non confondere le acque ))))

"Chiunque può commettere un errore. Solo i forti possono ammettere un errore!". Se nessuno l'ha ancora espresso, questa è la mia saggezza ))). Se qualcuno l'ha già detto - ho ripetuto la saggezza di un uomo saggio ))))

Continuo a non capire le sue affermazioni? Sta suggerendo che dovrei provarle qualcosa? - Perché? ))))

Qui ho riprodotto via NOT e controllato tutte le varianti discusse:

void OnStart()
  {
//---
   uint TForiginal=OBJ_PERIOD_M1|OBJ_PERIOD_M2|OBJ_PERIOD_M3|OBJ_PERIOD_M4|OBJ_PERIOD_M5|OBJ_PERIOD_M6|OBJ_PERIOD_M10|
                   OBJ_PERIOD_M12|OBJ_PERIOD_M15|OBJ_PERIOD_M20|OBJ_PERIOD_M30|OBJ_PERIOD_H1;

   uint TFwithNOT=(~OBJ_PERIOD_H1&OBJ_PERIOD_H2)-1;
   uint TFwithShift=OBJ_ALL_PERIODS>>9;
   Print("TForiginal = ",TForiginal);
   Print("TFwithNOT = ",TFwithNOT);
   Print("TFwithShift = ",TFwithShift);
  }
//+------------------------------------------------------------------+

La variante NOT funziona con qualsiasi TF, ma si riempie secondo (~TF_ al di sotto del quale visualizziamo & TF_uno più vecchio del TF richiesto)-1;

 

Buona giornata a tutti! Un'altra domanda...

C'è un programma MQL5, ha un'impostazione (molto) di "parametri di ingresso". Il programma esegue calcoli e crea/cancella e gestisce oggetti grafici secondo necessità.

Dopo il cambiamento dei parametri di input dalla finestra di setup viene generato l'eventoInit, che porta all'inizializzazione del programma e agli oggetti "ricalcola" e "ridisegna", che è, in linea di principio, ciò che è necessario, mal'eventoInitviene generato anche quando viene cambiato il periodo del grafico (e altro), come risultato il processo si ripete ogni volta, anche quando non è necessario.

Domanda:Come posso escludere l'inizializzazione del programma all'eventoInit sei parametri d'ingresso non sono cambiati ma lasciare l'inizializzazione all'inizio del programma (terminale)?

Possibile variante: ricordare i valori impostati e confrontarli quando si verifica l'evento Init e se sono diversi permettere l'inizializzazione, ma ci sono molti parametri di input...

 
Anzhela Sityaeva:

Buona giornata a tutti! Un'altra domanda...

C'è un programma MQL5, ha un'impostazione (molto) di "parametri di ingresso". Il programma esegue calcoli e crea/cancella e gestisce oggetti grafici secondo necessità.

Dopo il cambiamento dei parametri di input dalla finestra di setup viene generato l'eventoInit, che porta all'inizializzazione del programma e agli oggetti "ricalcola" e "ridisegna", che è, in linea di principio, ciò che è necessario, ma l'eventoInit viene generato anche quando viene cambiato il periodo del grafico (e altro), come risultato il processo si ripete ogni volta, anche quando non è necessario.

Domanda:Come posso escludere l'inizializzazione del programma all'eventoInit se i parametri d'ingresso non sono cambiati ma lasciare l'inizializzazione all'inizio del programma (terminale)?

Possibile variante: ricordare i valori impostati e confrontarli quando si verifica l'evento Init e se sono diversi permettere l'inizializzazione, ma ci sono molti parametri di input...

Ecco alcuni consigli per un altro problema simile

Forum sul trading, sistemi di trading automatico e test di strategia

Funziona nell'EA, ma non nell'indicatore, musica all'avvio dell'indicatore

Ihor Herasko, 2019.06.17 14:12

Sì.

  1. Quando l'indicatore si avvia, crea una variabile terminale globale. Come - sono in piedi.
  2. Viene suonato un saluto.
  3. Allo scarico (controllato in OnDeinit) la variabile terminale globale viene cancellata.
  4. Se durante il funzionamento il TF viene cambiato o i parametri cambiati, allora all'uscita in OnInit viene controllata la variabile globale del terminale. Se lo è, allora il saluto non viene suonato. In caso contrario, il saluto viene riprodotto.

Forum sul trading, sistemi di trading automatico e test di strategia

Funziona in Expert Advisor, ma non è corretto nell'indicatore, musica all'avvio dell'indicatore

Taras Slobodyanik, 2019.06.17 16:25

5. Si può anche lasciare un oggetto sul grafico e controllare il suo stato di presenza quando si inizia.

 
Alexey Viktorov:

Ecco alcuni consigli per un altro problema simile



Grazie per la risposta, sembra che nel nostro caso dovremo tenere traccia dello stato di un paio di dozzine di cambi di corrispondenzedescrivendo questo tramite un "vuoto" su un grafico per tenere traccia dei loro cambiamenti, o sopportare un'inizializzazione inutile finché non ci sono troppi oggetti...
 
Anzhela Sityaeva:
Grazie per la risposta, sembra che nel nostro caso dovremo tenere traccia dello stato di un paio di dozzine di cambi di corrispondenze descrivendolo attraverso un "vuoto" sul grafico per tenere traccia dei loro cambiamenti, o sopportare un'inizializzazione inutile finché non ci sono troppi oggetti...

Ma la domanda che hai fatto era.

Anzhela Sityaeva:

Buona giornata a tutti! Un'altra domanda...

C'è un programma MQL5, ha impostazioni (molto) "Parametri di ingresso". Il programma esegue calcoli e crea/cancella e gestisce oggetti grafici secondo necessità.

Dopo il cambiamento dei parametri di input dalla finestra di setup viene generato l'eventoInit, che porta all'inizializzazione del programma e agli oggetti "ricalcola" e "ridisegna", che è, in linea di principio, ciò che è necessario, ma l'eventoInit viene generato anche quando viene cambiato il periodo del grafico (e altri), come risultato il processo si ripete ogni volta, anche quando non è necessario.

Domanda:Come posso escludere l'inizializzazione del programma all'eventoInit se i parametri di input non sono cambiati ma lasciare l'inizializzazione all'inizio del programma (terminale)?

Possibile variante: ricordare i valori impostati e confrontarli quando si verifica l'evento Init e se sono diversi permettere l'inizializzazione, ma ci sono molti parametri di input...

E nella vostra situazione, uno di questi consigli eviterà questi inutili ridisegni degli oggetti. E se questi oggetti sono cancellati in OnDeinit(), dovreste proibire la cancellazione anche lì quando cambiate il grafico.

Questo è un forum per il trading, sistemi di trading automatico e test di strategia.

Come cancellare la variabile globale del terminale alla chiusura del grafico?

Alexey Viktorov, 2019.06.29 08:40

Fate attenzione a questa tabella

PROGRAMMA RAGIONEVOLE

0

Expert ha smesso di funzionare chiamando ExpertRemove()

RAGIONE_REMOVE

1

Programma rimosso dal grafico

MOTIVO_RICOMPILAZIONE

2

Programma ricompilato

MOTIVO_CAMBIAMENTO GRAFICO

3

Il simbolo del grafico o il periodo è stato cambiato

MOTIVO_CHARTCLOSE

4

Il grafico è chiuso

RAGIONE_PARAMETRI

5

I parametri di input sono stati cambiati dall'utente

CONTO REASON_ACCOUNT

6

Un altro conto è stato attivato o ricollegato al server commerciale perché le impostazioni del conto sono state cambiate

MOTIVO_TEMPLATE

7

Un altro modello di grafico è stato applicato

MOTIVO_INITFAILED

8

Il gestore OnInit() ha restituito un valore diverso da zero

RAGIONE_CHIUSA

9

Il terminale è stato chiuso


e su questa linea del tuo codice

   if(reason==1) GlobalVariableDel("val");

Ma se ricordo bene l'inizio del tuo problema, è meglio mettere la condizione così

   if(reason != REASON_CHARTCHANGE) GlobalVariableDel("val");

 
Alexey Viktorov:

Ma nella tua domanda era

Nella vostra situazione, uno di questi suggerimenti eviterà questi inutili ritracciamenti di oggetti. E se questi oggetti sono cancellati in OnDeinit(), allora dovreste proibire la cancellazione anche lì quando cambiate il grafico.


La direzione è chiara, facciamo un tentativo... Grazie per la vostra risposta.
 
Non ho trovato un esempio di EA in Codebase dove si possa impostare una condizione di chiusura, non solo SL/TP standard. Qualcuno può darmi un suggerimento?
 
Sprut112:
Non ho trovato un esempio di EA in Codebase dove si possa impostare una condizione di chiusura, non solo SL/TP standard. Qualcuno può darmi un suggerimento?

Qual è la differenza tra condizione di apertura e di chiusura?

 
Sprut112:
Non ho trovato in Codebase un esempio di EA dove si possa scrivere la condizione di chiusura di una posizione, e non solo lo SL/TP standard. Qualcuno può dirmelo?

Vladimir Karputov aveva tali condizioni nei suoi codici, ma dovete imparare a leggere il suo codice da soli)