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
Proprio così! Tutti cercano di imparare la programmazione usando idee sbagliate sul software basate sull'esperienza di vita. Per esempio, che un programma è come un testo di un libro con un indice, un'introduzione, un sommario e una conclusione. Cioè, che il programma è una specie di schema sequenziale dall'inizio alla fine. All'inizio questa idea funziona, ma poi, man mano che il programma diventa più complesso, sorgono difficoltà e non è possibile scrivere un programma funzionante in modo affidabile. Kovalev è molto bravo a rendere servizi ribassisti: cerca di spiegare al lettore, utilizzando il suo accessibile apparato concettuale, che il programma è lo stesso libro con tale e tale schema. Ma non ci sono schemi! Lo script ha uno "schema" fondamentalmente diverso dall'Expert Advisor, e l'Expert Advisor ha uno schema diverso dall'indicatore.
Vasiliy Sokolov:
... 4) Il blocco più strano è il blocco "gestione degli errori". Puoi entrarci, ma non puoi uscirne. Cioè, il programma ha preso un errore e si blocca in questo blocco (probabilmente si blocca finché non viene riavviato completamente, o, meglio ancora, il terminale si blocca saldamente, per essere sicuro che non farà più errori - questa è l'idea!) ...
Ciao Vasiliy! Grazie per la spiegazione dettagliata e altamente qualificata! L'unica cosa su cui non sono d'accordo è il punto 4. Il punto è che le frecce vanno sia da e verso l '" Unità di gestione degli errori". La linea che collega questa unità all'altra ha delle frecce alle sue estremità e dal curriculum di informatica dell'istituto ricordo ancora che significa un processo bidirezionale, cioè avanti e indietro. Pertanto, non ho dubbi sulla situazione. Per quanto riguarda il resto del tuo messaggio, tutto è chiaro per me.
Saluti, Vladimir.
Ciao Vasily! Grazie per la spiegazione dettagliata e altamente qualificata! L'unica cosa su cui non sono d'accordo è il punto 4. Il fatto è che le frecce vanno sia da e verso l'"Unità di trattamento degli errori". La linea che collega questa unità all'altra ha delle frecce alle sue estremità e dal programma di informatica dell'istituto ricordo ancora che significa un processo bidirezionale, cioè avanti e indietro. Pertanto, non ho dubbi sulla situazione. Per quanto riguarda il resto del tuo messaggio, tutto è chiaro per me.
Saluti, Vladimir.
Proprio così, il primo ha preso piede :-)
Usate la sua expa come modello nella vostra ricerca - codice competente!
lì e
"L'и
Invertire e altre cose e inserire librerie standard nel codice all'inizio per semplificare l'apertura della posizione - STUDIARE E NON PREOCCUPARSI.
Il flag'Positions: Only one' impostato a'true' permette all'Expert Advisor di non avere più di una posizione sul mercato. Il flag'Positions: Reverse' è responsabile dell'inversione dei segnali. Interessante flag'Positions: Close opposite' - se questo flag è impostato a'true' prima di aprire una posizione, garantisce la cancellazione delle posizioni opposte.Print log' stampa il log esteso di tutte le operazioni. Il parametro'Freeze and StopsLevels Coefficient' definisce un coefficiente per i livelli di stop e freeze per i casi in cui questi livelli sono uguali a zero per un simbolo. Si raccomanda di applicare un valore di '3'.
Scriverò dei principi che consiglio vivamente all'autore per la consapevolezza di ciò che è il programma. A differenza degli opuscoli di Kovalev, dove parte del materiale è corretto, parte contiene errori grossolani, e parte è una speculazione generale con il lettore, questi principi sono SEMPRE e al 100% corretti, non importa quello che si scrive in MQL: Expert Advisors, script, o Expert Advisors:
Primo principio. Qualsiasi programma in MQL gestisce gli eventi. Un evento è una notifica che contiene informazioni su qualcosa, di solito su qualcosa che è cambiato. Per esempio, è arrivato un nuovo tick o il nostro ordine in sospeso è stato eseguito. Altri eventi non contengono alcuna informazione, accadono e basta. Per esempio, l'evento "timer" può chiamare la funzione utente con una periodicità impostata. Non notifica all'utente che qualcosa è cambiato. Chiama semplicemente il codice dell'utente, quindi non ha bisogno di informazioni aggiuntive. Dalla definizione dell'evento, seguono diversi metodi non banali:
- La prima implicazione è che una volta ricevuto un evento, dovremmo gestirlo il prima possibile. Ci possono essere molti eventi, e gli eventi possono accumularsi in una coda. MeteTrader (non il nostro programma) gestisce gli eventi. Per fare questo utilizza una risorsa speciale chiamata flusso. Questa risorsa è molto preziosa e limitata. Il thread di proprietà di MetaTrader esegue generosamente il nostro codice rozzo, sub-ottimale e lento scritto in uno script sulla CPU del nostro PC. Se l'elaborazione degli eventi rallenta il thread nel nostro codice, in alcuni casi altri programmi in esecuzione in MetaTrader non saranno in grado di eseguire correttamente. Aspetteranno che noi liberiamo il thread dai nostri calcoli inutili e poi eseguiranno il loro codice sul thread liberato.
- Ci sono molti eventi. Possiamo gestire molti degli eventi disponibili o solo uno. Quando facciamo uno script, gestisce solo un evento, OnStart, che accade una volta sola. Quando scriviamo un Expert Advisor, esso può gestire più eventi contemporaneamente. Questo significa che è inutile stipare il vostro programma nel paradigma "programma questo libro". Invece, dovremmo solo capire che il programma è un gestore di certi eventi. Possono essere chiamati in qualsiasi ordine, possono non essere chiamati affatto. Gli eventi sono indipendenti l'uno dall'altro. Così, le parti del programma che gestiscono questi eventi non dipendono l'una dall'altra. Sono non lineari e non sequenziali.
(Questo è tutto per ora, continuerò se ne avrò voglia).Ecco il primo che ho ricevuto come portafortuna :-)
Usate la sua expa come modello nella vostra ricerca - codice competente!
lì e
"L'и
Invertire e altre cose e collegare le librerie standard nel codice all'inizio per semplificare l'apertura della posizione - STUDIARE E NON PREOCCUPARSI. Inoltre, abituatevi a scrivere codice standard - c'è l'indentazione e tutto il resto
Il flag'Positions: Only one' impostato a'true' permette all'Expert Advisor di non avere più di una posizione sul mercato. Il flag'Positions: Reverse' è responsabile dell'inversione dei segnali. Interessante flag'Positions: Close opposite' - se questo flag è impostato a'true' prima di aprire una posizione, garantisce la cancellazione delle posizioni opposte.Print log' stampa il log esteso di tutte le operazioni. Il parametro'Freeze and StopsLevels Coefficient' definisce un coefficiente per i livelli di stop e freeze per i casi in cui questi livelli sono uguali a zero per un simbolo. Si raccomanda di usare il valore '3'.
Ciao Roman! Grazie per l'esempio. Molte volte ho cercato di capire i codici scritti da Vladimir Karputov, ma per me è ancora un livello irraggiungibile. Un po' più tardi, quando avrò più informazioni in testa, è probabile che tornerò ai suoi codici. Ma grazie per il consiglio!
Saluti, Vladimir.
Scriverò dei principi che consiglio vivamente all'autore per la consapevolezza di ciò che è il programma. A differenza degli opuscoli di Kovalev, dove parte del materiale è corretto, parte contiene errori grossolani, e parte è una speculazione generale con il lettore, questi principi sono SEMPRE e al 100% corretti, non importa quello che si scrive in MQL: Expert Advisors, scripts o Expert Advisors:
Primo principio. Qualsiasi programma in MQL gestisce gli eventi. Un evento è una notifica che contiene informazioni su qualcosa, di solito su qualcosa che è cambiato. Per esempio, è arrivato un nuovo tick o il nostro ordine in sospeso è stato eseguito. Ci sono eventi che non hanno informazioni ma accadono e basta. Per esempio, l'evento "timer" può chiamare la funzione utente con una periodicità impostata. Non notifica all'utente che qualcosa è cambiato. Chiama semplicemente il codice dell'utente, quindi non ha bisogno di informazioni aggiuntive. Dalla definizione dell'evento, seguono diversi metodi non banali:
- La prima implicazione è che una volta ricevuto un evento, dovremmo gestirlo il prima possibile. Ci possono essere molti eventi, e gli eventi possono accumularsi in una coda. MeteTrader (non il nostro programma) gestisce gli eventi. Per fare questo utilizza una risorsa speciale chiamata flusso. Questa risorsa è molto preziosa e limitata. Il thread di proprietà di MetaTrader esegue generosamente il nostro codice rozzo, sub-ottimale e lento scritto in uno script sulla CPU del nostro PC. Se l'elaborazione degli eventi rallenta il thread nel nostro codice, in alcuni casi altri programmi in esecuzione in MetaTrader non saranno in grado di eseguire correttamente. Aspetteranno che noi liberiamo il thread dai nostri calcoli inutili e poi eseguiranno il loro codice sul thread liberato.
- Ci sono molti eventi. Possiamo gestire molti degli eventi disponibili o solo uno. Quando facciamo uno script, gestisce solo un evento, OnStart, che accade una volta sola. Quando scriviamo un Expert Advisor, esso può gestire più eventi contemporaneamente. Questo significa che è inutile stipare il vostro programma nel paradigma "programma questo libro". Invece, dovremmo solo capire che il programma è un gestore di certi eventi. Possono essere chiamati in qualsiasi ordine, possono non essere chiamati affatto. Gli eventi sono indipendenti l'uno dall'altro. Quindi, le parti del programma che elaborano questi eventi non dipendono l'una dall'altra. Sono non lineari e non sequenziali.
(Questo è tutto per ora, continuerò se ne avrò voglia).Ben fatto Vasily, aspetto il seguito, se non ti dispiace scriverlo! Tutto quello che mi hai detto è stato laconico e comprensibile per me!
Saluti, Vladimir.
Ben fatto Vasily, non vedo l'ora di vedere il seguito, se non ti dispiace scriverlo! Tutto quello che hai riportato è conciso e comprensibile per me!
Saluti, Vladimir.
Andare avanti:
- Poiché ci sono molti eventi, ci sono molti gestori di eventi. Poiché gli eventi sono chiamati in modo incoerente, anche i loro gestori di eventi sono chiamati in modo incoerente. Poiché c'è una chiamata incoerente, i gestori di eventi non possono dipendere l'uno dall'altro, e nemmeno dai dati dell'altro. L'unico costrutto che soddisfa questi requisiti rigorosi è una funzione.
- Le funzioni non possono dipendere l'una dall'altra. Se una funzione restituisce la somma a+b, e la seconda funzione restituisce il prodotto a*b, allora il risultato di queste due funzioni non dipenderà dalla sequenza delle chiamate. Possiamo chiamare la prima funzione con gli argomenti 3 e 5 e ottenere 8. Poi chiama la seconda funzione con gli stessi argomenti e ottiene 24. Poi scambiatevi le chiamate. I risultati saranno gli stessi. La funzione di addizione restituirà sempre 8 con gli argomenti 3 e 5. La funzione di moltiplicazione restituirà sempre 24 con gli stessi argomenti.
- È chiaro da quanto sopra che il gestore dell'evento può essere solo una funzione. Se si verifica un nuovo evento di tick, questo è gestito dalla funzione OnTick. Se si verifica l'evento Start (un lancio una tantum dello script), questo è gestito dalla funzione speciale OnStart.
- Questa funzione è universale. Questa funzione può gestire non solo gli eventi. La funzione può restituire qualcosa di utile, per esempio l'ora corrente. Una funzione può eseguire calcoli complessi con gli argomenti che le vengono passati e restituire il risultato finale di questi calcoli come un unico valore. Infine, una funzione può essere un fornitore di dati: Si chiama la funzione e si ottengono da essa i dati di cui si ha bisogno, come le citazioni.
- Internamente, MetaTrader consiste di migliaia di funzioni, di cui circa 1500 mila sono gentilmente messe a disposizione degli utenti. Queste sono funzioni molto utili. Vi permettono di controllare il tempo del sistema e di ottenere i dati di uno strumento che vi interessa. Le funzioni sono utilizzate per inviare ordini di compravendita. Potete aprire il manuale ICL e vedere che consiste di funzioni e dei loro argomenti. Quindi MetaTrader, per quanto riguarda i programmi utente, è un unico grande insieme di funzioni.
- Le funzioni universali non sono sufficienti. Non importa quante nuove funzioni vengano aggiunte al sistema, ci sarà sempre carenza di esse. La ragione è che ognuno ha esigenze diverse. Non esiste una funzione unica per tutte le occasioni. Le funzioni più comuni e versatili sono già incluse in MetaTrader e ci vengono gentilmente offerte. Tuttavia, le esigenze degli utenti sono infinite. MetaQuotes non può soddisfare le esigenze individuali di 100.000 utenti del loro terminale. Invece, hanno fatto qualcosa di più flessibile: hanno lasciato che gli utenti creassero da soli le caratteristiche che volevano. Gli utenti ne hanno beneficiato. Invece di usare una funzione di sistema che non è adatta a loro, possono scrivere la propria funzione che risolve perfettamente il loro problema. Nessuna funzione del sistema è perfetta a causa della sua universalità.
- L'abilità con cui un utente è in grado di scrivere le proprie funzioni e di capire come funzionano ti dice quanto è abile un programmatore. Se capisce che un programma è un insieme disgiunto di gestori (sotto forma di funzioni) che non gestiscono in modo coerente gli eventi in arrivo, è buono. Se sa scrivere le proprie funzioni, questo è un altro vantaggio. Se può combinare il lavoro di diverse funzioni (sia le sue che quelle del sistema) in un algoritmo comune, questo è un altro vantaggio per lui.
- Se capisci che tutto in MetaTrader (il quarto e il quinto) è in qualche modo basato su funzioni, funzioni e funzioni - tutto diventa improvvisamente chiaro. L'aiuto non è più presentato come un libro spesso con un mucchio di frammenti di codice sparsi, ma come una guida alle funzioni disponibili e a ciò che fanno. Tutto il resto, come i tipi di dati, gli array, le strutture, le classi, è irrilevante. Si tratta di sostenere le funzioni in modo che possano restituire qualcosa e accettare qualcosa.
(questo è tutto per ora)Un principiante è sommerso da informazioni inutili).
Questo suggerisce che non dovresti ostentare i tuoi desideri in questo modo. Vladimir avrebbe anche potuto fare domande specifiche su questa o quella funzione e ricevere consigli utili, piuttosto che le sciocchezze degli "esperti" come imparare il C++ o imparare l'assembler. Potresti iniziare a studiare le schede perforate.