Autoapprendimento del linguaggio MQL5 da zero - pagina 28

 
Vasiliy Sokolov:

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.

Quindi come pensi che una persona dovrebbe imparare? Direttamente dalla filosofia dell'OLP? È impossibile.
 

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.

 
MrBrooklin:

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'
  • Expert Advisor può essere ottimizzato da 'Working
  • timeframe' Ci
  • può essere solo un trade 'enter market' per barra (questo è un parametro interno, non è messo nei parametri di input e non ha niente a che vedere con il parametro 'Only one positions
  • ')
  • Quando si lavora in modalità 'inside bar' ('Search signals,
  • o uguale a '10') la barra corrente è la barra #0, in
  • modalità 'Search signals, in seconds'('Search signals, in seconds
  • ' inferiore a '10') la barra corrente è la barra #1
  • : ' parametro - restrizione su quale lato scambiare. Può assumere i valori 'Consentito solo posizioni BUY', 'Consentito solo posizioni SELL' e 'Consentito posizioni BUY e SELL
  • '
  • Parametro 'Usa controllo orario'- cornice temporale per la ricerca di segnali di trading da 'Inizio ora':'Inizio minuto' a'Fine ora':'Fine minuto'
  • .
  • Il parametro 'Pips Or Points:'
  • imposta il
  • calcolo standard di Stop Loss, Take Profit e Trailing

  • и

    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'.

    iFractals iAMA
    iFractals iAMA
    • www.mql5.com
    Получать сигнала на откате (по iFractals (Fractals) ), а тренд определять по iAMA (Adaptive Moving Average, AMA). По индикатору iAMA (Adaptive Moving Average, AMA) определяется тренд. Условия тренда: на текущем баре и на двух предшествующих индикатор равномерно растёт (тренд вверх) или равномерно падает (тренд вниз). При этом цена (High или...
     

    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).
    Документация по MQL5: Основы языка / Функции / Функции обработки событий
    Документация по MQL5: Основы языка / Функции / Функции обработки событий
    • www.mql5.com
    В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
     
    Roman Shiredchenko:

    Ecco il primo che ho ricevuto come portafortuna :-)

    Usate la sua expa come modello nella vostra ricerca - codice competente!

    lì e


    "L'
  • Expert Advisor può essere ottimizzato da 'Working
  • timeframe' Ci
  • può essere solo un trade 'enter market' per barra (questo è un parametro interno, non è messo nei parametri di input e non ha niente a che vedere con il parametro 'Only one positions
  • ')
  • Quando si lavora in modalità 'inside bar' ('Search signals,
  • o uguale a '10') la barra corrente è la barra #0, in
  • modalità 'Search signals, in seconds'('Search signals, in seconds
  • ' inferiore a '10') la barra corrente è la barra #1
  • : ' parametro - restrizione su quale lato scambiare. Può assumere i valori 'Consentito solo posizioni BUY', 'Consentito solo posizioni SELL' e 'Consentito posizioni BUY e SELL
  • '
  • Parametro 'Usa controllo orario'- cornice temporale per la ricerca di segnali di trading da 'Inizio ora':'Inizio minuto' a'Fine ora':'Fine minuto'
  • .
  • Il parametro 'Pips Or Points:'
  • definisce il
  • calcolo standard di Stop Loss, Take Profit e Trailing

  • и

    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.

     
    Vasiliy Sokolov:

    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.

     
    MrBrooklin:

    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.

    Sì, giudizio interessante.

    1. qualsiasi programma è una gerarchia di blocchi di funzione ed è un sistema di parametri correlati e reciprocamente dipendenti.

    2. L'evento è il risultato dell'interazione del programma con l'ambiente software esterno, o di cambiamenti interni. L'ambiente "informa" dell'evento chiamando il programma (OnTick, OnChartEvent...).

    4. L'ambiente (terminale) è neutrale per il programma, ma può influenzarlo.

    5. Il programma riceve informazioni sul suo ambiente nel terminale e nel mercato per mezzo di funzioni speciali e può usarle nella sua logica.

    6. Il programma può ricevere informazioni su se stesso o sui suoi oggetti tramite query speciali e usarle nella sua logica.

    7. Gli eventi sono descritti in dichiarazioni if().

    8. Gli eventi sono gestiti da gestori che reagiscono ai cambiamenti.

    9. La reazione può essere un cambiamento di stato degli oggetti (cambiamento di massa dei loro parametri) o un lavoro di calcolo.

    10. I gestori di eventi sono raggruppati in strutture gerarchiche (modelli di eventi).

    11. Gli oggetti software possono iscriversi a vari eventi ed essere nella lista dei destinatari.

    ... e molto di più... :)

    P.S. Vasiliy lo descriverà meglio e più chiaramente.
     

    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)
     
    Hai inondato un nuovo arrivato di informazioni inutili).
     
    Реter Konow:
    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.

    Motivazione: