Versione beta del libro online sulla programmazione MQL4 - di Sergey Kovalev (SK.) - pagina 3

 
Climber:
Una settimana fa ho installato e provato Meta Trader per la prima volta e ho scoperto che questo terminale è molto più comodo di quelli che usavo prima (Rumus e Forex Trader). Circa due anni fa, quando ho conosciuto il Forex e ho aperto il mio primo conto demo, mi sono chiesto come automatizzare tutto. Poi ho aperto il terminale e ho visto il messaggio Autotrading nella sezione della posta. Ed eccomi qui))) Leggo intensamente il libro, e spero che presto scriverò il mio primo Expert Advisor per la mia strategia sviluppata. Non avevo assolutamente nulla a che fare con la programmazione prima, era persino difficile immaginare che avrei mai imparato a programmare))) Mentre leggevo, sono sorte delle domande, ma sono anche scomparse man mano che andavo avanti. La domanda è apparsa, ho guardato avanti e sono stato soddisfatto, perché ho visto la risposta dopo un paio di capitoli e sono tornato a leggere tutto in ordine. Sono stato particolarmente attratto dalla possibilità di testare la strategia su dati storici e regolare la strategia come risultato.
Comunque, grazie mille per il libro.


È eccellente. Sei un nuovo utente di MT. E tu non sai praticamente nulla di programmazione al momento.

Permettetemi di suggerirvi di riferire almeno due o tre volte al mese come vanno le cose (e più spesso se volete). Sarebbe estremamente interessante.

Nel frattempo, se mi permette, ho una domanda. Lei dice che è sorta una domanda che trova risposta nelle sezioni seguenti. Ho cercato di metterlo insieme in modo da evitare questa situazione. Potrebbe per favore chiarire a quale domanda si riferisce?

 
SK. писал (а):
Climber:
Una settimana fa ho installato e provato Meta Trader per la prima volta. Ho scoperto che questo terminale è molto più comodo dei miei precedenti (Rumus e Forex Trader). Circa due anni fa, quando ho conosciuto il Forex e ho aperto il mio primo conto demo, mi sono chiesto come automatizzare tutto. Poi ho aperto il terminale e ho visto il messaggio Autotrading nella sezione della posta. Ed eccomi qui))) Leggo intensamente il libro, e spero che presto scriverò il mio primo Expert Advisor per la mia strategia sviluppata. Non avevo assolutamente nulla a che fare con la programmazione prima, era persino difficile immaginare che avrei mai studiato programmazione))) Mentre leggevo, sono sorte delle domande, ma sono anche scomparse man mano che andavo avanti. La domanda è venuta fuori, ho guardato avanti e sono stato soddisfatto, come ho visto la risposta dopo un paio di capitoli e sono tornato a leggere tutto in ordine. Sono stato particolarmente attratto dalla possibilità di testare la strategia su dati storici e di correggerla di conseguenza.
Comunque, grazie mille per il libro.


È eccellente. Sei un nuovo utente di MT. E tu non sai praticamente nulla di programmazione al momento.

Posso offrirvi: di farmi sapere almeno 2 o 3 volte al mese come state andando (o più spesso, se volete). Sarebbe molto interessante.

Nel frattempo, se mi permette, ho una domanda. Lei dice che è sorta una domanda che trova risposta nelle sezioni seguenti. Ho cercato di metterlo insieme in modo da evitare questa situazione. Potrebbe per favore chiarire a quale domanda si riferisce?

Una volta ho usato Sign of Misery per facilitare il mio lavoro, dove si può scrivere un programma senza conoscere alcuna programmazione. Bastava specificare le azioni nell'ordine in cui venivano eseguite (l'ho usato principalmente come un automa, anche se ci sono molte più possibilità). Diciamo che ho un sacco di valori in 4 colonne in Excel (dati di rilevamento elettrico dalla geofisica, ogni 20 cm). Per l'ulteriore elaborazione di questi dati avevo bisogno di prendere i dati solo dai metri (cioè da 0, 1, 2, 3, 4 ....). Ho fatto questo programma per automatizzare le azioni, con comandi per emulare i tasti e cambiare le coordinate del mouse. L'ho compilato nell'ehe. Ma era solo una digressione. Il programma doveva fare delle etichette e impostare le condizioni di passaggio a queste etichette, cioè fare un ciclo di operazioni, con la condizione di uscire da questo ciclo. Quando sono arrivato alla questione della costruzione dell'EA avevo qualche idea sulla visione generale della struttura del codice. Ma quando ho iniziato a leggere il libro, ero un po' confuso dalla struttura della costruzione del programma e poi dalla funzione int start () che viene ripetuta ad ogni tick e se al momento della sua esecuzione ho scoperto il prezzo dell'offerta, esso viene scritto in una variabile e viene memorizzato in essa durante la sua esecuzione, allora come farò a sapere quando il prezzo è cambiato e il programma può eseguire qualsiasi altra azione in base al nuovo prezzo? Ho pensato che il prezzo nel mio programma sarà aggiornato da una specie di codice in loop, chiedendolo costantemente. Avevo anche un'altra domanda: quando si chiama una funzione e la sua esecuzione, immaginavo che sarebbe stata eseguita la funzione successiva, ma si è scoperto che il controllo ritorna alla funzione, seguendo quella che ha chiamato inizialmente la funzione. Ma questo fatto mi ha fatto particolarmente piacere, perché mi è diventato chiaro (perché ho pensato: e le altre azioni, che hanno seguito questa funzione, sono saltate in questo modo?) Ora ho una domanda come questa: Ho capito che durante l'esecuzione della funzione init, chiamerò una funzione per calcolare un prezzo di apertura adeguato per il mio ordine, e anche per calcolare una dimensione del lotto in base ai dati del saldo del mio conto; dopo che init è finito, inizierà l'esecuzione della funzione start, che conterrà un codice di "attesa" per Il prezzo necessario della transazione, e non appena verrà, l'ordine di apertura sarà eseguito (take profit non è assunto per mettere perché se ci sarà un salto che salterà oltre il valore ТР, non si attiverà, e il salto questo potenzialmente favorevole rispetto al valore ТР, quindi voglio formare l'ordine di chiudere l'ordine all'ultimo prezzo noto quando il prezzo corrente o è uguale, o < , o > specificato.o >); allora la cosa più misteriosa per me è dove scrivere il codice di attesa del prezzo di "chiusura" dell'ordine e tornare all'inizio, cioè calcolare di nuovo il prezzo stabilito e usare l'ordine "close". Cioè, devo calcolare il prezzo da fissare per l'apertura, aspettare questo prezzo, ecc. Ho guardato avanti nelle sezioni; credo di aver visto qualcosa nei titoli, che probabilmente risponderà alla mia domanda. Mentre sto finendo di leggere la sezione "Opening and Setting Orders". Ho iniziato a leggerlo ieri mattina.
Vi farò sapere i progressi naturalmente, come nella mia situazione e senza comunicazione)). Spero in un feedback costruttivo.
Grazie per il vostro tempo e la vostra attenzione.
 

Si prega di suddividere i seguenti messaggi in paragrafi, poiché è difficile capire ciò che viene scritto.

Climber:
Ma avendo iniziato a leggere il libro, ero un po' confuso dalla struttura della costruzione del programma e poi dalla funzione int start (), che viene ripetuta ad ogni tick e se al momento della sua esecuzione conosco il prezzo dell'offerta, poi viene scritto in una variabile e viene memorizzato in essa per tutto il tempo di esecuzione, allora come farò a sapere quando il prezzo è cambiato e il programma può eseguire qualsiasi altra azione basata sul nuovo prezzo? Ho pensato che il prezzo nel mio programma sarebbe stato aggiornato da qualche codice in loop, chiedendolo costantemente.

Hai ragione a dire che perché il programma possa funzionare in tempo reale, è necessario essere informati periodicamente sul fatto di un nuovo prezzo e sul prezzo stesso.

In effetti, ci sono 2 metodi:

Il primo modo è quello di eseguire in un ciclo infinito qualche funzione e da essa richiedere periodicamente il prezzo.
Ma questo metodo ha degli svantaggi:
- Se le richieste vengono fatte spesso, il risultato è un carico pesante sul canale di comunicazione e uno spreco di risorse del PC;
- Se fai ricerche poco frequenti, potresti perdere un nuovo prezzo tra una ricerca e l'altra.

Il 2° metodo (accettato come base nella tecnologia MQ) è abbastanza diverso in quanto il lancio del codice necessario appartiene al terminale. Il terminale riceve informazioni dal server, capisce che è arrivato un nuovo tick (il fatto di un nuovo prezzo e il prezzo stesso) e sulla base di queste informazioni, il terminale avvia la funzione(). Tutto questo è descritto nella sezione Programma in MQL4.

Scalatore:
Ora ho una domanda: mi sono reso conto che quando eseguo la funzione init chiamo la funzione di calcolo del prezzo aperto del mio ordine, e anche il calcolo della dimensione del lotto, basato sui dati del saldo del mio conto; dopo l'esecuzione init l'esecuzione inizierà la funzione start...

Non è corretto. init() e start() sono funzioni speciali. Sono chiamati dal terminale client secondo le loro proprietà (o più semplicemente, secondo le regole, condizioni sotto le quali sono chiamati per l'esecuzione). Questo è descritto nella sezione Funzioni speciali. La funzione init() viene eseguita una volta, quando il programma viene caricato nella finestra. E start() viene chiamato ad ogni tick. Questo è molto conveniente. Un tick è arrivato e ha portato un nuovo prezzo = il terminale lancia start() che viene eseguito fino all'esecuzione. Tutti i calcoli devono essere inseriti in esso - calcolo del numero di lotti, condizioni di apertura/chiusura degli ordini e tutto il resto.

Scalatore:
Poi la cosa più sconcertante per me è dove scrivere il codice che si aspetta il prezzo di "chiusura" dell'ordine e tornare all'inizio, cioè di nuovo, calcolando il prezzo di apertura, aspettando questo prezzo, ecc. Ho guardato avanti nelle sezioni; credo di aver visto qualcosa nei titoli, che probabilmente risponderà alla mia domanda. Mi piacerà leggere la sezione degli ordini di apertura e impostazione.

A giudicare dalle vostre domande, non avete bisogno di scrivere programmi e non avete bisogno di leggere quello che state leggendo ora. In questa situazione, si raccomanda vivamente di ricominciare a leggere il libro. Con costanza e senza fare il passo più lungo della gamba. E mentre andate avanti, digitate tutti gli esempi presentati in ME ed eseguiteli sul vostro PC. E non passate alla sezione successiva finché ogni lettera del codice non sia stata compresa appieno. Cercate i concetti di Tick, Controllo, Funzione, Funzione speciale, Operatore, e in generale controllate di tanto in tanto il Dizionario dei termini.

Scalatore:
Riferirò certamente i progressi come nella mia posizione e senza comunicazione)) Spero in un feedback costruttivo.
Grazie per il vostro feedback.

Spero che prenderai il consiglio correttamente e lo seguirai.

 
SK. ha scritto (a):
<br / translate="no">

Scalatore:
Allora la cosa più sconcertante per me è dove scrivere il codice in attesa del prezzo di "chiusura" e tornare all'inizio, cioè di nuovo contando il prezzo di apertura, aspettando questo prezzo, ecc. Ho guardato avanti nelle sezioni; credo di aver visto qualcosa nei titoli, che probabilmente risponderà alla mia domanda. Sto ancora leggendo la sezione degli ordini di apertura e impostazione.

A giudicare dalle domande che hai, non hai ancora bisogno di scrivere programmi e nemmeno di leggere quello che stai leggendo ora.

Credo di avere la struttura dell'esperto.
L'ho scarabocchiato velocemente nel vdp, ecco qui:

Init

Iniziare

Ho impostato il numero massimo di ordini aperti = 1;

Controlla quanti ordini sono aperti;

se 1 è aperto, allora chiamo la funzione per chiudere l'ordine,

Se nessun ordine è aperto, allora chiamo la funzione "calcola prezzo e numero di lotti".

--------------------------

Necessario per calcolare un prezzo di acquisto e di vendita favorevole e per calcolare il numero di lotti;

--------------------------

interrogando il prezzo corrente;

se il prezzo corrente >= prezzo d'affare da vendere,

quindi aprire un ordine di vendita pari al numero di lotti già determinato;

in caso contrario, confronta il prezzo attuale con il prezzo dell'offerta vincente;

se il prezzo corrente è <= prezzo Bid,

rispettivamente aprire un ordine di acquisto;

--------------------------

Chiama la funzione per chiudere l'ordine;

ritorna

deinit


Hai capito bene?
 
Climber:
Hai capito bene?

Beh, giusto nel complesso :) Congratulazioni a voi. È sempre bello capire qualcos'altro.

Comunque, segui il mio consiglio: devi tornare all'inizio. E ripartire dall'inizio senza saltare e saltellare, eseguendo metodicamente sul tuo PC tutti i codici suggeriti nel tutorial.

 
Parabellum:

C'è un interessante indicatore ROC nel libro - l'indicatore del tasso di cambiamento del prezzo(https://book.mql4.com/ru/samples/iroc). Capisco che questo libro è un libro di testo e l'autore non è obbligato a dare codice sorgente a semi o anche a quarti, ma l'idea dell'indicatore è molto buona, e l'ho modificato un po' per rendere il ritardo ancora più debole.

A proposito, il testo dell'indicatore pubblicato nella pagina stessa ha due errori di stampa nel codice e quindi non è compilabile.
      Line_4[i]=(Line_1[i]+Line_2[i]+Line_3[i])3;// Суммарный массив
      //-------------------------------------------------------- 17 --

      Line_5[i]= Sum(Aver_Bars+1); // Индик. массив сглаженной линии
Due volte manca il carattere di divisione (scomparso durante la creazione del file html?).
Il file indicatore linkato nel testo è normale.
 
SK. писал (а):

Beh, giusto nel complesso :) Congratulazioni a voi. È sempre bello capire qualcos'altro.

Ancora, segui il mio consiglio: devi tornare all'inizio e ripartire dall'inizio senza saltare e saltare, eseguendo metodicamente sul tuo PC tutti i codici suggeriti nel tutorial.


Sì, sono d'accordo, è molto importante vedere e sentire qualsiasi risultato di ciò che si legge, è quando si fissa nella memoria a lungo termine, tanto più sotto l'influenza del contenuto emotivo, appare più di un'associazione:) A proposito, volevo anche sottolineare che per stimolare l'interesse, è necessario tornare indietro o utilizzare quei capitoli che sono più importanti, poi l'interesse stesso porterà all'obiettivo e amplierà il cerchio della conoscenza. La cosa più difficile nella nostra situazione è capire cosa è interessante man mano che si va avanti, elaborare l'ordine che sarà più efficace, come vediamo l'efficacia di tutto ciò che possediamo. Metterei in relazione il funzionamento della memoria associativa con la memoria guidata, dove un'area distribuita esiste finché c'è almeno un collegamento (associazione) ad essa, più sono i collegamenti, più è probabile che l'area non venga rilasciata, garantendo così il suo utilizzo e la sua successiva utilità. È quindi necessario rifornire costantemente lo stock di associazioni per consolidare ciò che si è letto.

P.S.: Scusa se ho esagerato:)

 
timbo: A proposito, il testo dell'indicatore pubblicato sulla pagina stessa ha due errori di battitura nel codice, e quindi non è compilabile.
      Line_4[i]=(Line_1[i]+Line_2[i]+Line_3[i])3;// Суммарный массив
      //-------------------------------------------------------- 17 --

      Line_5[i]= Sum(Aver_Bars+1); // Индик. массив сглаженной линии
Il simbolo di divisione manca due volte (è scomparso durante la creazione del file html?).
Il file indicatore collegato nel testo è normale.


Sì, esiste una cosa del genere. Nel codice sorgente non sono ancora stati rilevati errori, ma i codici di testo sono incasinati in alcuni punti per qualche motivo. Risolveremo il problema.
 
xnsnet:

P.S.: Scusa se ho esagerato:)

:) Sì, un po' lì)))
 
C'è anche una piccola nota sul libro. È meglio usare esempi di vita reale, non intendo sui gatti, ma sul denaro o su cose che sono rilevanti. Per esempio, quando sono arrivato agli operatori di loop, l'esempio con le pecore ti distrae un po', inizi a pensare a come può essere usato nelle nostre condizioni, e questo distrae dal processo di percezione.

Sto già avendo difficoltà con i loop (tornerò su queste sezioni più di una volta), e poi ci sono le pecore.

Solo la mia opinione, se considerato un esempio specifico di trading (quasi raiding:)), ok, trading, poi se il lettore incontra un esempio simile alla sua idea (che non sa come implementare), egli considererà con grande interesse questo esempio e pensare come modificare e personalizzare per implementare la sua idea (penso che sai cosa voglio dire).

Ho avuto un esempio simile, ero interessato a come aprire un ordine per 1/3 del saldo. Non potete immaginare che tipo di operazioni matematiche sono state fatte nella mia testa per convertire 1/3 in dollari, in modo da ottenere la somma in lotti (0,1 o 3,5 lotti). E quanto sono stato felice quando ho visto un esempio diopenbuy.mq4, che apre un ordine di acquisto del valore del 35% dei fondi disponibili, con alcuni valori specificati di ordini stop. L'ho sfogliato, studiando ogni riga, cosa, perché e dove. Ho guardato le funzioni standard utilizzate in esso (MathFloor, MarketInfo. ....).
Motivazione: