Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
***Ps: (Non voglio dimenticare questo). Certo a molti di noi non piace non sapere cosa c'è nei codici che stiamo usando. O ci consumiamo nel cercare di capire i codici di qualcun altro, altrimenti probabilmente non li useremmo. Tuttavia, la maggior parte delle funzioni native (esempio OrderSend()) in mql4 sono oggetti dal nostro punto di vista. Noi non vediamo i loro codici ma li accettiamo. Credo che questa accettazione delle librerie di altri sia qualcosa che un programmatore professionale che lavora su grandi progetti deve accettare e su cui deve costruire. Altrimenti sei bloccato a ricreare la ruota.
Credo che tu stia descrivendo un flusso di programma. Non credo che questa sia la big_idea dietro l'OOP. (imo) OOP cerca di affrontare i seguenti problemi. Sono un noob OOP, ma sto formando la mia visione del mondo su di esso.
1) Le vostre funzioni sono indipendenti dalle variabili globali? In altre parole, le vostre funzioni sono oggetti indipendenti? Incapsulamento
2) La tua funzione nasconde i dettagli come i nomi delle variabili locali? Semplifica il volume dei codici sullo schermo? Astrazione
3) Ha la capacità di creare copie duplicate di se stessa per le modifiche? Come la capacità di creare i propri tipi di dati? Ereditarietà.
4) Ha la capacità di cambiare al volo? Esempio: la funzione può gestire sia integer_array che double_array? Polimorfismo.
I modi in cui l'OOP può aiutare a costruire l'ea è simile a come un ea_builder aiuta un non_programmatore a costruire un expert_advisor. Basta prendere la vostra Order_Accounting_Function -> Data_Function -> Event Tracking Function -> Volume Defining Function -> Trading Criteria Defining Function -> Trade Functions -> Error Processing Function. E boom, avete un Expert_Advisor. Tutte le funzioni di definizione dei criteri di trading che avete sviluppato nel corso degli anni possono essere facilmente sostituite.
Per esempio, se tu volessi modificare il mio expert advisor, dovresti studiare dove sono applicate le mie variabili globali e quali altre funzioni dipendono da esse (come i tuoi array di stato o di stato). L'OOP lo rende as_simple_as Accounting(Option_3); Display(Option_1); Caption(Option_5); TradingSys(Option_7); VolumeSize(Option2); OrderType(Option_2) e questo è l'intero esperto.
Questo rende più facile per qualcun altro usare il tuo set di librerie, e di solito ciò che funziona per qualcun altro funziona anche per te in futuro. Se non altro, pensate agli oggetti stand_alone in una catena di montaggio :)
Mi sono dilettato un po' con MQL5 e non ho avuto bisogno di usare alcuna OOP nel codice che ho scritto
Le classi e l'OOP sono un'aggiunta opzionale in MQL5. Il framework della piattaforma non le usa direttamente. Per esempio, ci si potrebbe aspettare che la piattaforma abbia qualcosa come una collezione Orders che contenga una lista di oggetti Order, permettendo di scrivere codice come il seguente:
Ma questo non è il caso. Invece, il modo in cui si fa questo è fondamentalmente identico tra MQL4 e MQL5:
(Ci si potrebbe anche aspettare che ogni EA che si scrive sia una classe derivata da una classe ExpertAdvisor che ha cose come le funzioni virtuali OnTick e OnInit nella sua dichiarazione. Ma non è nemmeno questo il caso. Il framework MQL5 rimane fondamentalmente non-OOP, ma con la possibilità di usare OOP per qualsiasi compito in cui sia utile).
Di conseguenza, si può continuare ad usare il codice MQL4 su MQL5 attraverso una serie di funzioni di aiuto come string OrderSymbol() {return OrderGetString(ORDER_SYMBOL);}. L'unica area in cui questo si rompe è l'accesso alle serie temporali, perché è organizzato in modo molto diverso in MQL5. Una funzione come iOpenMQL4() in https://www.mql5.com/en/articles/81 funziona, ma è terribilmente lenta e inefficiente per un uso ripetuto.
(Se a qualcuno interessa ancora, la segnalazione del bug che ha dato il via a questo thread è ancora valida nella build 535. Lo stesso vale per https://forum.mql4.com/56885/page20#861740, anche se sembra che MetaQuotes abbia avuto un tentativo fallito di risolverlo).
Sono d'accordo con RaptorUK, la documentazione su mql5.com su OOP è almeno imperfetta. Ma purtroppo non conosco un buon riferimento su oop. Tutto quello che ho letto è o troppo astratto o troppo basilare, prendendo pera e mela come esempio di oggetti e frutta come classe.
La programmazione OOP è utile solo se hai un grande progetto. Un grande progetto non è necessariamente 1 EA, il tuo progetto può essere quello di costruire una serie di EA con indicatori, ecc...Allora è bene riutilizzare il codice, e OOP riguarda principalmente il riutilizzo del codice, ti aiuta a costruire una struttura che può essere facilmente riutilizzata in altri programmi. Sfortunatamente ora non ho il tempo di andare in profondità con questo. Ma è nei miei piani scrivere alcuni articoli su questo.
Un esempio di un grande progetto è il Wizard MQL5 creato da Metaquotes. Ti permette di creare un EA in 5 minuti con alcuni input dell'utente. Si basa sulla Libreria Standard mql5 che fornisce tutti gli elementi necessari per costruire un EA. La stessa procedura guidata può probabilmente essere fatta in modo procedurale, ma sarebbe molto più difficile a mio parere. E poi bisogna mantenere questo codice. Ma questi Standard libray sono difficili da capire perché non sono ben documentati e descritti. Ho creato un topic per centralizzare tutto ciò che esiste sull'argomento (mql5 wizard non oop).
Credo che tu stia descrivendo un flusso di programma. Non credo che questa sia la big_idea dietro l'OOP. (imo) OOP cerca di affrontare i seguenti problemi. Sono un noob OOP, ma sto formando la mia visione del mondo su di esso.
1) Le vostre funzioni sono indipendenti dalle variabili globali? In altre parole, le vostre funzioni sono oggetti indipendenti? Incapsulamento
2) La tua funzione nasconde i dettagli come i nomi delle variabili locali? Semplifica il volume dei codici sullo schermo? Astrazione
3) Ha la capacità di creare copie duplicate di se stessa per le modifiche? Come la capacità di creare i propri tipi di dati? Ereditarietà.
4) Ha la capacità di cambiare al volo? Esempio: la funzione può gestire sia integer_array che double_array? Polimorfismo.
I modi in cui l'OOP può aiutare a costruire l'ea è simile a come un ea_builder aiuta un non_programmatore a costruire un expert_advisor. Basta prendere la vostra Order_Accounting_Function -> Data_Function -> Event Tracking Function -> Volume Defining Function -> Trading Criteria Defining Function -> Trade Functions -> Error Processing Function. E boom, avete un Expert_Advisor. Tutte le funzioni di definizione dei criteri di trading che avete sviluppato nel corso degli anni possono essere facilmente sostituite.
Per esempio, se tu volessi modificare il mio expert advisor, dovresti studiare dove sono applicate le mie variabili globali e quali altre funzioni dipendono da esse (come i tuoi array di stato o di stato). L'OOP lo rende as_simple_as Accounting(Option_3); Display(Option_1); Caption(Option_5); TradingSys(Option_7); VolumeSize(Option2); OrderType(Option_2) e questo è l'intero esperto.
Questo rende più facile per qualcun altro usare il tuo set di librerie, e di solito ciò che funziona per qualcun altro funziona anche per te in futuro. Se non altro, pensate agli oggetti stand_alone in una catena di montaggio :)
Le classi e l'OOP sono un'aggiunta opzionale in MQL5. Il framework della piattaforma non le usa direttamente. Per esempio, ci si potrebbe aspettare che la piattaforma abbia qualcosa come una collezione Orders che contenga una lista di oggetti Order, permettendo di scrivere codice come il seguente:
Ma non è questo il caso. Invece, il modo in cui si fa questo è fondamentalmente identico tra MQL4 e MQL5:
(Ci si potrebbe anche aspettare che ogni EA che si scrive sia una classe derivata da una classe ExpertAdvisor che ha cose come le funzioni virtuali OnTick e OnInit nella sua dichiarazione. Ma non è nemmeno questo il caso. Il framework MQL5 rimane fondamentalmente non-OOP, ma con la possibilità di usare l'OOP per qualsiasi compito in cui sia utile).
Di conseguenza, si può continuare ad usare il codice MQL4 su MQL5 attraverso una serie di funzioni di aiuto come string OrderSymbol() {return OrderGetString(ORDER_SYMBOL);}. L'unica area in cui questo si rompe è l'accesso alle serie temporali, perché è organizzato in modo molto diverso in MQL5. Una funzione come iOpenMQL4() in https://www.mql5.com/en/articles/81 funziona, ma è terribilmente lenta e inefficiente per un uso ripetuto.
L'OOP è abbastanza comune attualmente e attirerà più codificatori veri al MQL. Ma l'editor simile al blocco note respingerà la maggior parte di loro, ne sono sicuro.