Autoapprendimento del linguaggio MQL5 da zero - pagina 75

 

Buona giornata e buon umore a tutti!

Continuo a studiare il linguaggio di programmazione MQL5. Ho fatto una piccola modifica al codice di Vasiliy Sokolov per aprire solo una posizione al giorno, come originariamente previsto nell'algoritmo dell'Expert Advisor. Il cambiamento è evidenziato in giallo.

Cordiali saluti, Vladimir.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Зададим условия для открытия позиций BUY и SELL
   double price=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
   double point=SymbolInfoDouble(Symbol(),SYMBOL_POINT);
   int digits=(int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);
   price=NormalizeDouble(price,digits);

   if(IsMainPositionOpen() == false && IsTimeForOpen())
     {
      if(TickUP()==(price+point))
         OpenBUY();
      else
        {
         if(TickDOWN()==(price-point))
            OpenSELL();
        }
     }
   if(IsTimeForClose())
      CloseALL();
 
Vasiliy Sokolov:

Anche il blocco OnInit è sovrapensiero e non è ancora scritto in modo corretto. Prima di tutto, dovresti cercare di scrivere identificatori, non numeri. Restituisce INIT_SUCCEED invece di -1. In secondo luogo, l'interruttore è eccessivo qui. Questo codice dovrebbe contenere sia if che switch. Prima devi scrivere uno e poi l'altro - solo olio.

In terzo luogo, dobbiamo monitorare tutti i tipi di account. Abbiamo Demo e poi abbiamo Real. E poi c'è il Concorso. Ma anche se non ci fosse un terzo conto, ci dovrebbe essere uno stub che catturi tutte le altre varianti:

Probabilmente sarebbe più ragionevole spiegare come funzionano le eccezioni, altrimenti non si capirà perché dovrebbe esserci un qualsiasi controllo su qualcosa che non si conosce.

Nel senso più esagerato, dovrebbe essere così:

1. avviare un programma da eseguire

2. lavorare attraverso l'algoritmo e uscirne in due direzioni:

a) Vero - l'algoritmo ha funzionato correttamente

b) Falso - l'algoritmo non ha funzionato

Allo stesso tempo, lavorare su a) significa che qui sono soddisfatte tutte le opzioni che il programmatore vuole implementare, e su b) tutto il resto, e non importa, se è necessario o no. Cioè, il programmatore implementa solo la funzionalità che vuole e tutto il resto dovrebbe essere escluso.

 
Konstantin:

Probabilmente ha più senso spiegare il lavoro con le eccezioni, altrimenti non si capisce perché sia necessario controllare qualcosa che non si conosce in primo luogo.

Nella sua forma più esagerata, dovrebbe essere come segue:

1. avviare un programma da eseguire

2. lavorare attraverso l'algoritmo e uscirne in due direzioni:

a) Vero - l'algoritmo ha funzionato correttamente

b) Falso - l'algoritmo non ha funzionato

Allo stesso tempo, lavorare su a) significa che qui sono soddisfatte tutte le opzioni che il programmatore vuole implementare, e su b) tutto il resto, e non importa, se è necessario o no. Cioè il programmatore implementa solo la funzionalità che inserisce, e tutto il resto dovrebbe essere buttato via come eccezione.

Ciao Konstantin, grazie per il tuo chiarimento.

Cari partecipanti di questo thread! Ancora una volta vorrei ringraziare tutti voi per i suggerimenti costruttivi e i consigli che mi hanno aiutato nell'apprendimento del linguaggio di programmazione MQL5.

Per ora ho messo in pausa perché il mio lavoro principale non mi permette di dedicare molto tempo e attenzione all'autoapprendimento, ma per ora il risultato principale è raggiunto - capisco le basi della programmazione, leggo codici di terzi e scrivo le mie funzioni.

Pubblicherò la versione di Trailing_Stop (v.1).mq5 Expert Advisor con commenti dettagliati su ogni linea di codice, in una forma accessibile per uno studente di 1° grado di una scuola di programmazione, come ho promesso prima, ma un po' più tardi.

Saluti, Vladimir.

 

Buona giornata e buon umore a tutti!

Continuo a studiare il linguaggio di programmazione MQL5. Finalmente ho abbastanza tempo per scrivere una versione dell'Expert Advisor con commenti dettagliati su ogni linea di codice, in una forma accessibile agli studenti del primo anno di una scuola di programmazione. Poiché il codice dell'Expert Advisor è abbastanza voluminoso, lo pubblico come un file chiamato Trailing_Stop_gv.22.mq5.

Prima di pubblicare il codice, abbiamo controllato l'Expert Advisor nel tester delle strategie. Non sono stati trovati problemi. Il sistema di netting della contabilità delle posizioni è utilizzato nell'Expert Advisor. Questo sistema di contabilità significa che in un momento sul conto, ci può essere solo una posizione aperta per uno stesso simbolo (titolo).

In questo momento, l'Expert Advisor ha implementato la capacità di:

  1. Controllate il conto di trading su cui intendete installarlo. Se l'Expert Advisor sarà installato su un conto demo, allora nella casella di messaggio apparirà il permesso di continuare a lavorare. Se si tenta di installare l'Expert Advisor su un conto reale, la finestra del messaggio mostrerà un avvertimento che non può continuare a lavorare, e poi verrà automaticamente cancellato dalla finestra di lavoro del terminale di trading.
  2. Una volta al giorno di trading, alle 9 in punto ora di Mosca, apri automaticamente una posizione nella direzione in cui è diretto il primo tick. Per esempio, se il primo tick è diretto verso l'alto alle 9 del mattino ora di Mosca, allora verrà aperta una posizione BUY; se il primo tick è diretto verso il basso, allora verrà aperta una posizione SELL.
  3. Impostare la dimensione del lotto.
  4. Impostare la dimensione dello stop loss.
  5. Specifica il livello relativo al prezzo di apertura, al quale lo Stop Loss viene spostato a Breakeven.
  6. Imposta il passo di trailing dello stop loss.

Questa versione di Expert Advisor implementa la maggior parte dei suggerimenti, precedentemente suggeriti da Vasily Sokolov.

ATTENZIONE!!!

Questo Expert Advisor è stato sviluppato secondo il piano di autoapprendimento per i conti demo, ed è inteso solo per scopi di formazione! Non è destinato al trading su un conto reale e al profitto!

Sinceramente, Vladimir.

File:
 
MrBrooklin:

Buona giornata e buon umore a tutti!

Continuo a studiare il linguaggio di programmazione MQL5. Finalmente ho abbastanza tempo per scrivere una versione dell'Expert Advisor con commenti dettagliati su ogni linea di codice, in una forma accessibile agli studenti del primo anno di una scuola di programmazione. Dato che il codice dell'Expert Advisor è abbastanza ingombrante, lo pubblico come un file chiamato Trailing_Stop (v.2).mq5.

Prima di pubblicare il codice, abbiamo controllato l'Expert Advisor nel tester delle strategie. Non sono stati trovati problemi. Il sistema di netting della contabilità delle posizioni è utilizzato nell'Expert Advisor. Questo sistema di contabilità significa che in un determinato momento sul conto, ci può essere solo una posizione aperta per lo stesso simbolo (strumento finanziario).

In questo momento, l'Expert Advisor ha implementato la capacità di:

  1. Controllate il conto di trading su cui intendete installarlo. Se l'Expert Advisor sarà installato su un conto demo, allora nella casella di messaggio apparirà il permesso di continuare a lavorare. Se si tenta di installare l'Expert Advisor su un conto reale, la finestra del messaggio mostrerà un avvertimento che non può continuare a lavorare, e poi verrà automaticamente cancellato dalla finestra di lavoro del terminale di trading.
  2. Una volta al giorno di trading, alle 9 in punto ora di Mosca, apri automaticamente una posizione nella direzione in cui è diretto il primo tick. Per esempio, se il primo tick è diretto verso l'alto alle 9 del mattino ora di Mosca, allora verrà aperta una posizione BUY; se il primo tick è diretto verso il basso, allora verrà aperta una posizione SELL.
  3. Impostare la dimensione del lotto.
  4. Imposta la dimensione dello stop loss.
  5. Specificare il livello relativo al prezzo di apertura, al quale lo Stop Loss viene spostato a Breakeven.
  6. Imposta il passo di trailing dello stop loss.

Questa versione di Expert Advisor implementa la maggior parte dei suggerimenti, precedentemente suggeriti da Vasily Sokolov.

ATTENZIONE!!!

Questo Expert Advisor è stato sviluppato secondo il piano di autoapprendimento per i conti demo, ed è inteso solo per scopi di formazione! Non è destinato al trading su un conto reale e al profitto!

Sinceramente, Vladimir.

Ciao, non si compila.

Trailing_Stop_gv.22.mq5

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

capito - nome senza parentesi per creare Trailing_Stop (v.2) Expert Advisor

 
SanAlex:

Ciao - non si compila.

Ho appena scaricato il file dal sito e controllato nel mio MetaEditor, tutto si compila bene.

Saluti, Vladimir.

 
MrBrooklin:

Ho appena scaricato il file dal sito e controllato nel mio MetaEditor, tutto si compila bene.

Saluti, Vladimir.

Grazie per il lavoro. non ho inserito correttamente il nome quando ho creato l'Expert Advisor. tutto funziona.

 
SanAlex:

Grazie per il lavoro. non ho inserito correttamente il nome quando ho creato l'esperto. tutto funziona.

Piacere mio!

Saluti, Vladimir.

 

Cari partecipanti di questo thread!

Ancora una volta vorrei ringraziare tutti voi per i vostri suggerimenti costruttivi, suggerimenti e consigli, che mi hanno aiutato ad imparare le basi del linguaggio di programmazione MQL5. Un ringraziamento speciale a Vasily Sokolov! Dio vi benedica tutti!

Con grande rispetto per tutti, Vladimir.

 

Buona giornata e buon umore a tutti!

Continuo a studiare il linguaggio di programmazione MQL5. Attualmente sto scrivendo il codice per un nuovo EA. Ho affrontato un punto, che non capisco bene come risolvere. Il compito sembra essere semplice - voglio che il mio Expert Advisor lavori sul grafico della coppia di valute, che è impostato nei parametri di input dell'EA. Se viene fatto un tentativo (ad esempio, per errore) di installarlo sul grafico di un'altra coppia di valute, l'Expert Advisor dovrebbe fare un avviso sull'impossibilità di continuare a lavorare.

Ecco lo schema del codice del programma:

input string Symbol_Main="GBPUSDrfd";  //Валютная пара, на которую ставим советник

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   /* Определим график валютной пары, на который будем устанавливать советник*/
   string currency_chart=SymbolInfoString(Symbol(),SYMBOL_DESCRIPTION);
   if(currency_chart==Symbol_Main) //если график валютной пары совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и продолжаем работу советника */
      MessageBox("Работа советника на данной валютной паре разрешена!");
      return(INIT_SUCCEEDED); //возвращаем для функции OnInit значение означающее "удачная инициализация"
     }
   else //в противном случае, если график валютной пары не совпадает со входным параметром
     {
      /* выводим окно сообщений на торговом терминале и закрываем советник */
      MessageBox("Работа советника на данной валютной паре запрещена! Выходим!");
      return(INIT_FAILED); //возвращаем для функции OnInit значение означающее "неудачная инициализация"
     }
  }

Il compilatore non mostra alcun errore. Il codice che non funziona è evidenziato in giallo. Forse è perché non capisco bene il significato dell'identificatore SYMBOL_DESCRIPTION - descrizione stringa del carattere. Ho provato a usare altri identificatori ma il risultato è lo stesso. Forse la funzione SymbolInfoString() non è affatto necessaria qui? Ho scritto il nome della coppia di valute GBPUSDrfd solo perché ho intenzione di usare l'Expert Advisor su Alpha-Forex, mentre tutti i simboli di questo broker hanno il finale rfd.

Caro Expert Advisor, ti prego di consigliarmi in che direzione pensare!

Saluti, Vladimir.

Motivazione: