Autoapprendimento del linguaggio MQL5 da zero - pagina 48

 
Se lo scopo immediato è quello di implementare un semplice trailing stop, dovreste continuare a scrivere lo script aggiungendo i cicli for e while.

Non sono sicuro che lo script "pazienza sufficiente" abbia un'estensione logica. Probabilmente è meglio passare a una nuova idea che richiede di avere:

1. Un albero di condizioni if-else.
2. Funzioni di calcolo.
3. Cicli.

Dato che dovremo lavorare nel campo del trading algoritmico, sarebbe più conveniente se lo script fosse legato alla strategia di trading. Pensateci.

 
Per una migliore comprensione dei loop:

Un ciclo permette di passare una sezione di codice chiusa nel suo corpo più e più volte. I risultati di ogni passaggio saranno diversi dai risultati di altri passaggi, perché i valori delle variabili/funzioni chiamate possono essere diversi ad ogni passaggio. Il numero di iterazioni del ciclo è impostato dal programmatore, il valore della variabile o della funzione - dipende dal codice specifico.
 
MrBrooklin:

Alexei, stai scherzando? Sì, vorrei prima imparare le basi!

Con rispetto, Vladimir.


Non molto. A giudicare dalla dinamica e dalla tua base, teoria e pratica - è il tuo profilo dall'inizio alla fine. Quindi perché non... Non ora, ma più tardi... Quando ci prendi la mano e ti dai del tu con il codice.
 
Реter Konow:
Se il vostro obiettivo immediato è quello di implementare un semplice trailing stop, continuate a scrivere lo script aggiungendo i cicli for e while.

Non sono sicuro che lo script "pazienza sufficiente" abbia un'estensione logica. Probabilmente è meglio passare a una nuova idea che richiede di avere:

1. Un albero di condizioni if-else.
2. Funzioni di calcolo.
3. Cicli.

Dato che dovremo lavorare nel campo del trading algoritmico, sarebbe più conveniente se lo script fosse legato alla strategia di trading. Pensateci.

Grazie, Peter, per sostenere la mia intenzione di dotare lo script New7.mq5 di trailing stop, soprattutto ora che ho iniziato a studiare i cicli. A proposito, ho già provato la funzione Sleep nello script. È stato raccomandato di usare questa funzione quando si scrive il trailing stop. Da dove comincio? Probabilmente, sarebbe meglio descrivere prima l'intero algoritmo di trailing stop a parole, e poi procedere alla scrittura del codice?

Sinceramente, Vladimir.

 
Aleksey Masterov:

Non molto. A giudicare dalla dinamica e dalla tua base e dalla teoria e dalla pratica, è il tuo profilo dall'inizio alla fine. Quindi perché non... non ora, ma più tardi... Quando ci si prende la mano e ci si dà del tu.

Grazie, Alexey, per la tua fiducia in me. Tutto quello che devo fare è continuare il buon lavoro!

Sinceramente, Vladimir.

 
MrBrooklin:

Grazie, Peter, per sostenere il mio desiderio di dotare lo script New7.mq5 di trailing stop, soprattutto ora, quando ho iniziato a studiare i cicli. A proposito, ho già provato la funzione Sleep nello script. È stato raccomandato di usare questa funzione quando si scrive il trailing stop. Da dove comincio? Probabilmente, sarebbe meglio descrivere prima l'intero algoritmo di trailing stop a parole, e poi procedere alla scrittura del codice?

Sinceramente, Vladimir.

Oggettivamente, un semplice trailing stop non può essere scritto nello script. Mi spiego: i trailing stop non esistono da soli, nel "vuoto", sono "legati" a una posizione aperta, che, a sua volta, è "legata" a una strategia, e la strategia è implementata solo in un EA.

Il problema e la complessità del trailing nello script risiede nel fatto che è necessario raccogliere informazioni sulle posizioni aperte e i loro ordini nel ciclo, e poi selezionare l'ordine richiesto sul simbolo richiesto e calcolare la sua modifica. È complicato e confuso, ma per un EA, tutto è molto più facile. In primo luogo, saprete già quale ordine modificare, e in secondo luogo, saprete quando modificare, perché arriva l'evento OnTick.

Quindi, si mette un "ordine in sospeso" nello script, poi si innesca, si apre una posizione e si può seguire lo stop... Di cosa hai bisogno per questo:

1. Voglio mettere in loop lo script.
2. Scrivere la funzione di fissazione dell'evento di cambiamento del prezzo sul simbolo del testo.
3. funzione di scrittura della modifica dell'ordine di arresto.
4. Scrivere la condizione di scarico dello script (uscita dal ciclo loopless) alla chiusura della posizione.

Ho abbozzato approssimativamente lo schema della sceneggiatura, ma dovrò pensarci più seriamente.

P.S. La funzione Sleep è usata per ritardare l'esecuzione del codice quando è necessario. Per esempio, quando si fa una richiesta al server o si aspetta un evento. In uno script di trascinamento questa funzione sarà sicuramente necessaria.
 
Реter Konow:
I programmatori hanno paura di usare le variabili globali a causa degli errori che si verificano quando si cambiano i loro valori. Si crea una situazione in cui un errore è difficile da localizzare perché ogni funzione può cambiarli. Naturalmente, solo le variabili devono esistere nell'ambito globale che tutte le funzioni del programma devono vedere. Non può essere altrimenti.

Mi è sempre piaciuto usare le variabili globali perché fornivano una rapida crescita di funzionalità, e il programma si trasformava in un enorme cantiere attivo. Sono stato spesso criticato per il modo in cui scrivo il codice, ma questo è il motivo per cui è un cantiere: si pulisce dopo che il lavoro principale dell'edificio è stato fatto, e quando la casa è costruita, si può iniziare a piastrellare, dipingere e pulire il terreno. Fino ad allora, la priorità è montare le casseforme e versare il calcestruzzo).

Tuttavia, i programmatori la pensano diversamente. Essi "puliranno" e "cancelleranno" il loro codice, anche se si tratta di due righe e mezzo. Si pulirà il loro codice anche se è lungo due righe e mezzo, ma brillerà come... come una moneta nuova). Questa attitudine al codice è giustificata dalla loro professione di cui vivono, ma dal punto di vista creativo sono rigidi e poco sviluppati. È così che va...

Il mio consiglio: imparate a scrivere correttamente, ma a volte permettetevi di allontanarvi dalle regole e sperimentate per ottenere un'esperienza più varia. Vi aiuterà ad imparare e imparerete più velocemente.

C'è un'osservazione secondo la quale una volta che si inizia a fare la stampella, è difficile fermarsi, e di conseguenza, il codice del progetto si trasforma in quello che chiamano dre...code.

Lasciatemi spiegare:

  1. Avete un progetto con una soluzione intermedia funzionante e il numero di caratteristiche implementate conta=0.
  2. Il nostro compito è quello di implementare la funzione ++count.
  3. Per aggiungere le caratteristiche di cui abbiamo bisogno:
    • scrivere i metodi dell'albero degli oggetti e collegare tutte queste cose ai gestori di eventi con la logica (tempo stimato 3 ore *conteggio; count=0).
    • scrivere una stampella sotto forma di variabile globale e usarla in diversi metodi, dove ne abbiamo bisogno (tempo stimato 15 min *conteggio.).
  4. Bug di autonumerazione (questa è una segnalazione di bug per le meta-citazioni).
  5. Naturalmente, è stata scelta la versione stampella (è davvero difficile farci lavorare in questo caso)
  6. se (l'abbiamo fatto) goto 2
  7. altrimenti tutto va a rotoli, gridando help-mi e leggendo commenti esilaranti che è sbagliato farlo.

Spero che abbiate prestato attenzione al fatto, che il contatore delle caratteristiche implementate, aumenta il tempo di implementazione della prossima caratteristica, ma quando è implementato correttamente, si azzera?

Questa è un'idea molto esagerata, ma è così che funziona nella vita reale.

Quello che voglio dire è che se non riscrivi il progetto dopo aver implementato tutte le caratteristiche, andrà in produzione come uno spoiler illeggibile. E poi, il ciclo di vita di qualsiasi progetto porta a un mal di testa per il management: o mettere tutta la squadra su un refactoring globale di tutte quelle cose che sono state filate (e i concorrenti non dormono, loro, cattivi ragazzi, scrivono nuove funzionalità), o continuare a scrivere stampelle e patchare i bug, perdendo a torrenti.

 
Реter Konow:
Oggettivamente parlando, un semplice trailing stop non funzionerà nello script. Mi spiego: i trailing stop non esistono da soli, nel "vuoto", sono "legati" a una posizione aperta, che a sua volta è "legata" alla strategia, e la strategia è implementata solo in un Expert Advisor.

Il problema e la complessità di implementare il trailing nello script è che è necessario raccogliere informazioni sulle posizioni aperte e i loro ordini nel ciclo, e poi selezionare l'ordine giusto sul simbolo giusto e calcolare come modificarlo. È complicato e confuso, ma per un EA, tutto è molto più facile. In primo luogo, saprete già quale ordine modificare, e in secondo luogo, saprete quando modificare, perché arriva l'evento OnTick.

Quindi, si mette un "ordine in sospeso" nello script, poi si innesca, si apre una posizione e si può seguire lo stop... Di cosa hai bisogno per questo:

1. Per mettere in loop lo script.
2. La funzione di fissazione dell'evento di cambiamento del prezzo sul simbolo.
3. Funzione di scrittura della modifica dell'ordine di stop.
4. Scrivere la condizione di scarico dello script (uscita dal ciclo) alla chiusura della posizione.

Ho abbozzato approssimativamente lo schema della sceneggiatura, ma dovrò pensarci più seriamente.

P.S. La funzione Sleep è usata per ritardare l'esecuzione del codice quando è necessario. Per esempio, quando si fa una richiesta al server o si aspetta un evento. In uno script di trascinamento questa funzione sarà sicuramente necessaria.

Peter, creiamo del codice trailing nello script? Perfetto! Ora prendo ciò che hai elencato come sezioni di base e comincio a descriverle a parole, in modo che sia chiaro come dovrei scrivere le funzioni, i cicli, ecc. in seguito. È corretto?

Saluti, Vladimir.

 
MrBrooklin:

Peter, quindi creiamo il codice finale nello script? Grande! Quello che avete elencato lo prendo ora come sezioni di base e comincio a descriverle a parole, in modo che sia chiaro come scrivere funzioni, cicli, ecc. in seguito. È corretto?

Saluti, Vladimir.

Sì, esatto.
 
Vladimir Simakov:

C'è un'osservazione che una volta che si inizia a scricchiolare, è difficile fermarsi, e di conseguenza, il codice del progetto si trasforma in ciò che è noto come d.c.

Lasciatemi spiegare:

  1. Avete un progetto con una soluzione intermedia funzionante e il numero di caratteristiche implementate conta=0.
  2. Il nostro compito è quello di implementare la funzione ++count.
  3. Per aggiungere le caratteristiche di cui abbiamo bisogno:
    • scrivere i metodi dell'albero degli oggetti e collegare tutte queste cose ai gestori di eventi con la logica (tempo stimato 3 ore *conteggio; count=0).
    • scrivere una stampella sotto forma di variabile globale e usarla in diversi metodi, dove ne abbiamo bisogno (tempo stimato 15 min *conteggio.).
  4. Bug di autonumerazione (questa è una segnalazione di bug per le meta-citazioni).
  5. Naturalmente, abbiamo scelto una stampella (è davvero difficile farci lavorare in questo caso)
  6. se (l'abbiamo fatto) goto 2
  7. altrimenti tutto va a rotoli, gridando help-mi e leggendo commenti esilaranti che è sbagliato farlo.

Spero che abbiate prestato attenzione al fatto, che il contatore delle caratteristiche implementate, aumenta il tempo di implementazione della prossima caratteristica, ma quando è implementato correttamente, si azzera?

Questo è molto esagerato, ma è così che funziona nella vita reale.

Quello che voglio dire è che se non riscrivi il progetto dopo aver implementato tutte le caratteristiche, andrà in produzione come uno spoiler illeggibile. E poi, il ciclo di vita di qualsiasi progetto porta a un mal di testa per il management: o mettere l'intera squadra su un refactoring globale di tutte quelle cose che hanno filato (e i concorrenti sono svegli, loro, i cattivi, stanno scrivendo nuove funzionalità), o continuare a scrivere stampelle e patchare i bug, perdendo a torrenti.

Anche se questo messaggio è principalmente indirizzato a Peter, ti chiedo di scriverlo senza alcuno slang, al fine di comprendere appieno i tuoi messaggi, in un linguaggio accessibile all'allievo del 1° anno di scuola di programmazione, poiché l'argomento è per principianti da zero.

Saluti, Vladimir.