Errori, bug, domande - pagina 849

 
Heroix:

Si tratta di 2 terminali su 1 computer. A tutti i suggerimenti del terminale per aggiornare - rispondo "sì".

Il file è stato trasferito su flash da un altro computer come .mql5, aperto e compilato da diversi editor di due terminali.

In generale, come ho capito, ho bisogno di aggiornare MT...

Se stai aggiornando manualmente, devi anche trasferire la cartella /MQL5, perché contiene un gran numero di librerie standard che stai usando.

Dato che hai trasferito solo gli eseguibili e il tuo codice sorgente come file mq5, hai fatto un errore.

 
OrderLots() e iClose come possibile in MQL 5???
 

Aggiornato a bild 695. Un errore è apparso durante la compilazione di Object.mqh.


 
denkir:

Aggiornato a bild 695. Un errore ha iniziato ad apparire durante la compilazione di Object.mqh.

Hai aggiornato automaticamente o hai solo spostato i file?

Se lo avete fatto automaticamente, quando memorizzate i file in UserData, copiate la directory /MQL5 dalla radice del programma alla directory dei dati (potete aprirla dal menu File).

 
Agli sviluppatori

Che fine ha fatto il calendario economico, esiste?

Domanda supplementare: su quali dati si basava e come può essere "collegato" alla DC?

 
papaklass: I dati non coincidono, ma dovrebbero, perché il secondo e il terzo caso sono parti separate della prima condizione. Non riesco a capire qual è il problema.

Questa è la condizione

if( mn < STP || mn >= STP )

- Per quale motivo è formulato in questo modo? Così com'è, funzionerà per qualsiasi mn e STP. Perché abbiamo bisogno di introdurlo? E le prossime due opzioni - c'è un cutoff specifico di certe situazioni.

Ma tutto sembra logico: uno + due == tri (senza entrare nei dettagli dei calcoli uno, due e tre) in tutte e tre le varianti.

 
papaklass:

Ecco di cosa sto parlando. Voglio dividere lo spazio comune (caso 1) in due gruppi (casi 2 e 3). Logicamente, l'espressione uno + due == tri dovrebbe essere vera, ma non lo è. Nella prima condizione uno=148, e nella seconda 172. Inoltre non c'è partita per due e per tre. Non so quale sia il problema.

Forse il problema sta in una condizione comune? Questo codice dipende da qualcos'altro?

Solo un esempio banale:

condizione (a): aprire se la barra su H1 sale. TP=SL=100

condizione (b): aprire se la barra su H1 diminuisce. TP=SL=100

Condizione aggiuntiva: non controlliamo le condizioni per la seconda volta, se abbiamo già una posizione.

Quindi se abilitiamo (a) più (b) apriremo ogni volta che il TP/SL viene attivato.

se includiamo (a) apriremo in tutte le prime volte più (!!!!) alcune altre volte in cui non abbiamo aperto perché abbiamo aperto prima con la condizione (b)

e per includere solo la condizione (b), allo stesso modo

 
papaklass: Logicamente, l'espressione uno + due == tri dovrebbe essere corretta, ma non funziona per me.

Guardate più da vicino: questo è esattamente il confronto (uno + due == tri) che viene eseguito, per ciascuna delle opzioni.

papaklass: Nella prima condizione uno=148, e nella seconda 172.

Bene, questa è un'altra domanda, cioè perché il valore di uno della prima variante non è uguale al valore di uno della seconda e della terza variante.

State introducendo una condizione restrittiva nella seconda e terza variante rispetto alla prima. Considerate perché, per esempio, nella seconda variante il valore di uno aumenta rispetto alla prima variante. Non è chiaro dalla parte citata del codice finora.

 
papaklass:

Al post precedente.

Nel terzo caso: uno=0, due=124, tri=124.

I dati non corrispondono, ma dovrebbero, perché il secondo e il terzo caso sono parti separate della prima condizione. Non riesco a capire qual è il problema.

PS: ingresso int STP=200;

Risultato corretto con il cambiamento del set di dati, poiché lo spazio mn<STP è stato escluso.

if( /*mn < STP || */ mn >= STP ){
 
papaklass: Nei miei esempi faccio solo il campionamento:

1. Scelgo sia lo spazio2 (uno) che lo spazio3 (due); 230 = 148 + 82, cioè spazio2 (uno) = 148 e spazio3 (due)=82.

2. ... Dovrebbe rimanere 148, ed è diventato 172.

3. ... Dovrebbe rimanere 82, e diventa 124.

È di questo che sto parlando: la domanda per voi èperché il valore di uno della prima opzione non è uguale al valore di uno della seconda e della terza opzione.

I valori di spazio2 e spazio3 dovrebbero essere costanti, perché le condizioni per ottenere questi spazi sono le stesse in tutti e tre gli esempi che ho dato nei post precedenti.

Per trovare un errore in questo presupposto logico, suggerisco di fare molto semplicemente: stampare ogni caso di aumento di "spaziX" in tutte e tre le varianti, confrontare i risultati e analizzare per quale motivo i "valori di spazi2 e spazi3" non sono uguali.

Addendum. ilunga ha già accennato al fatto che alcune transazioni potrebbero essere perse quando si passa da una variante all'altra. Avete una funzione/metodo killer OpenPosition() incorporata nel corpo dell'operatore if(). E funziona in tempi diversi a seconda della condizione controllata dall'operatore if().