Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 509

 
Beh, sì, questo è ovvio, ma non va bene. Non è bene infilare parametri di input in una classe.
 
Вадим Мотеюнас:

Salve, potreste dirmi perché in questo ciclo i miei ordini limite vengono cancellati solo se dopo aver piazzato un ordine limite un altro ordine limite non è stato piazzato sulla barra successiva, cioè un ordine limite viene cancellato solo se viene piazzato e poi seguito da due barre in cui non è stato piazzato alcun ordine limite

Quale ordine avete scelto qui?

for(i=0;i<=OrderTicket();i++)
 
Nikolay Gaylis:

E quale ordine ha scelto qui?

Ho avuto l'errore, invece di OrderTicket() ho sostituito anche una variabile ticket a cui è stato assegnato OrderSend, ancora non cancella nulla, ma come faccio a impostare il ciclo per passare attraverso gli ordini limite e cancellare quelli che sono rimasti sulla 2a barra?

 
Вадим Мотеюнас:

Vedo l'errore, ho anche sostituito una variabile per OrderTicket() con ticket OrderSend, ancora non cancella nulla, ma come faccio a configurare il ciclo per passare attraverso gli ordini limite e cancellare quelli che sono rimasti sulla 2a barra?

Questo è ottimale, almeno è così che ho imparato mql

Trovate un EA in kodobase che soddisfa approssimativamente le vostre esigenze, guardate il codice e se il codice è grande e non chiaro, cercate il prossimo.

Dopo aver trovato un codice più comprensibile, si inizia a studiarlo e a modificarlo, in modo da capire rapidamente come funziona

MQL5 Code Base: Советники
MQL5 Code Base: Советники
  • www.mql5.com
В разделе торговых советников вы найдете множество приложений, автоматизирующих вашу аналитику и торговлю. Здесь вы найдете самые разные приложения, обладающие различными торговыми алгоритмами и предоставляющими различную степень автоматизации. Имеются как простенькие эксперты, так и сложные торговые роботы, способные полностью автоматизировать...
 
Juer:
Beh, sì, è ovvio, ma non è buono. Non è bello infilare parametri di input in una classe.

Tuttavia, questi valori devono in qualche modo arrivarci )). Dopo tutto, il più delle volte il lavoro della classe si basa sui valori specificati dall'utente. Ma per qualche ragione non vuoi farlo. Non vi appariranno magicamente.

Di solito, i parametri di input nella fase di inizializzazione del programma sono trasferiti in una struttura speciale. Il più delle volte questi valori sono preprocessati (almeno, controllati per la correttezza). Quando viene creata una nuova istanza della classe, le viene passato un collegamento a questa struttura. Qual è l'inconveniente qui?

 
Ihor Herasko:

Tuttavia, questi valori devono in qualche modo arrivarci )). Dopo tutto, il più delle volte il lavoro della classe si basa sui valori specificati dall'utente. Ma per qualche ragione non vuoi farlo. Non vi appariranno magicamente.

Di solito, i parametri di input nella fase di inizializzazione del programma sono trasferiti in una struttura speciale. Il più delle volte questi valori sono pre-elaborati (almeno, controllati per la correttezza). Quando viene creata una nuova istanza della classe, le viene passato un riferimento a questa struttura. Qual è l'inconveniente qui?

L'inconveniente è solo nella necessità di passare questi valori ogni volta quando si crea un oggetto. Sono identici ogni volta. Va bene, lo creerò attraverso il costruttore ma è una soluzione privata. Il costruttore di default di un EA potrebbe contenere tali parametri, mentre sono molto diversi per un altro EA.

Forse la soluzione è fare una classe completamente diversa i cui metodi restituiranno i valori dei parametri. Poi avrei bisogno di inizializzare questa nuova classe solo una volta. E nella classe originale, quando si crea un oggetto (anche nello stesso costruttore), si richiedono i valori dei parametri della nuova classe.

 
Juer:

L'unico inconveniente è la necessità di passare questi valori ogni volta che un oggetto viene creato. Sono gli stessi ogni volta. Va bene, lo farò attraverso il costruttore, ma è una soluzione privata. Il costruttore di default di un EA può avere questi parametri, mentre il costruttore di default di un altro EA è completamente diverso.

Forse la soluzione è fare una classe completamente diversa i cui metodi restituiranno i valori dei parametri. Poi avrei bisogno di inizializzare questa nuova classe solo una volta. E nella classe originale, quando si crea un oggetto (anche nello stesso costruttore), si richiedono i valori dei parametri della nuova classe.

Sembra che tu risolva eroicamente il problema inventato.
 
Artyom Trishkin:
Sembra che tu stia eroicamente risolvendo un problema inventato.
Non ho letto attentamente il problema, ma qualcosa mi ha colpito che era lo stesso rastrello che ho calpestato e che mi hai aiutato a toglierlo di mezzo. Non è vero?
 
Alexey Viktorov:
Non ho letto attentamente il problema, ma qualcosa mi ha colpito che era lo stesso rastrello che stavo calpestando e tu mi hai aiutato a toglierlo di mezzo. Non è vero?
Non esattamente. Non avevi alcun desiderio di inizializzare il vuoto.
 
Artyom Trishkin:
Sembra che tu stia eroicamente risolvendo un problema inventato.

Sì, è quello che ho suggerito sopra, in effetti lo stesso modo in cui hai fatto tu con la struttura, solo più complicato.

-> E nella classe di origine, quando si crea un oggetto (anche nello stesso costruttore), richiedere i valori dei parametri dalla nuova classe.

Ma in generale dovrei passare un riferimento a questa classe ausiliaria alla classe sorgente. In breve, sì, lo stesso che con la struttura.

Creare una classe contenitore, attraverso la quale creare ulteriormente tutti questi oggetti. Poi questi parametri possono essere inizializzati una volta in questa classe contenitore. Questo è quello che penso di fare.

Motivazione: