Progetto del consigliere

 
Salve.
Quando la quantità di codice cresce, a volte diventa difficile e confusa.
Ho visto codice EA con un enorme numero di linee di codice, mi chiedo come vengono progettati gli EA complessi, forse ci sono alcuni strumenti o tecniche per affrontare algoritmi così complessi?
 
Gregory Kovalenko:
Salve.
Quando la quantità di codice cresce, a volte diventa difficile e confusa.
Ho visto del codice EA con un enorme numero di linee di codice, mi chiedo come vengono progettati gli EA complessi, forse ci sono alcuni strumenti o tecniche per lavorare con algoritmi così complessi?

Quanto è troppo? È così tanto che non può essere suddiviso in file?

 
Gregory Kovalenko:
Salve.
Quando la quantità di codice cresce, a volte diventa difficile e confusa.
Ho visto codice EA con un enorme numero di linee di codice, mi chiedo come vengono progettati gli EA complessi, forse ci sono alcuni strumenti o tecniche per affrontare algoritmi così complessi?
Sì, è molto semplice: bisogna documentare con precisione le singole funzioni e allocarle in un file separato. Il file principale si ridurrà immediatamente e diventerà più leggibile
 

Due principi fondamentali:

1. Dividere il codice in funzioni. Una funzione dovrebbe essere più o meno completa dal punto di vista logico e non essere più di una schermata da coprire con uno sguardo.

2. Ridurre il numero di variabili globali. Dalle variabili globali, è desiderabile usare solo i parametri che non cambiano durante l'esecuzione del programma.

...e altro ancora:

3. programmazione orientata agli oggetti.

4. Mettere il codice in più file (questo complica un po' il debugging, ma ha un senso).

 
STARIJ:
È molto semplice: dobbiamo documentare con precisione le singole funzioni e allocarle in un file separato. Il file principale diventerà immediatamente più piccolo e più leggibile

Ho sempre un file mq4/mq5 e un mucchio di file mqh con classi, per ogni classe un file separato. In generale, è così che si fa nello sviluppo industriale. Niente file chilometrici dove tutto è mischiato.

A volte si può vedere un capolavoro dove l'intero EA è impacchettato in OnTick con gli stessi pezzi di codice per aprire gli ordini 20 volte ciascuno in questo brutto foglio. Voglio tirare fuori subito il sacchetto del vomito ))

 
Gregory Kovalenko:
Salve.
Quando la quantità di codice cresce, a volte diventa difficile e confusa.
Ho visto codice EA con un enorme numero di linee di codice, mi chiedo come siano progettati gli EA complessi, forse ci sono alcuni strumenti o trucchi per lavorare con algoritmi così complessi?

Non scrivere funzioni che sono sempre costanti e non cambiano mai in questo stile

void CloseOrders(int cmd)
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY && cmd==OP_BUY)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue))
                 {
                  Print("Order BUY not close! Error = ",GetLastError());
                 }
              }
            if(OrderType()==OP_SELL && cmd==OP_SELL)
              {
               if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red))
                 {
                  Print("Order SELL not close! Error = ",GetLastError());
                 }
              }
           }
        }
     }
  }

Scriveteli in modo conciso, tanto nessuno li guarda mai, e occupano la metà dello spazio.

void CloseOrders(int cmd) {
 for(int i=OrdersTotal()-1;i>=0;i--) {
  if(OrderSelect(i,SELECT_BY_POS)) {
   if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
    if(OrderType()==OP_BUY && cmd==OP_BUY) {
     if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue)) Print("Order BUY not close! Error = ",GetLastError());
    }
     if(OrderType()==OP_SELL && cmd==OP_SELL) {
      if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red)) Print("Order SELL not close! Error = ",GetLastError());
    }
}}}}


Commentare il codice tutto il tempo, di cosa è responsabile questo pezzo di codice, non è difficile, e ora saprete sempre qual è il codice, e ridurre il tempo per studiarlo

 
Vitaly Muzichenko:

Non scrivere funzioni che sono sempre costanti e non cambiano mai in questo stile

Scriveteli in modo conciso, tanto nessuno li guarda mai, e occupano la metà dello spazio.

Commentare il codice tutto il tempo, di cosa è responsabile questo pezzo di codice, non è difficile, e ora saprete sempre qual è il codice, e ridurre il tempo per studiarlo

Il commento deve occupare la metà del testo del programma

 
Vitaly Muzichenko:

Non scrivere funzioni che sono sempre costanti e non cambiano mai in questo stile

Scriveteli in modo conciso, tanto nessuno li guarda mai, e occupano la metà dello spazio.

Commentare il codice tutto il tempo, ciò che questo pezzo di codice è responsabile per, non è difficile, e qui al completamento sarà sempre sapere che cosa il codice, e ridurre il tempo di studiarlo

Riordinare le parentesi non rende il ritardo minore. Prima di dare consigli, alza almeno il tuo livello ad un livello medio.

 
STARIJ:

Il commento dovrebbe occupare metà del testo del programma

Bene, in questo caso il 90% del codice dovrebbe contenere commenti. E avete bisogno di quanto più codice senza senso e poco leggibile possibile per poter mettere più commenti!
 
Vasiliy Sokolov:
No, beh, allora il 90% del codice è costituito da commenti. E avete bisogno di quanto più codice inutile e poco leggibile possibile, in modo da poter mettere più commenti!

Anche le tue idee sono degne di nota. Dovreste discuterne più spesso

 

È da molto tempo che volevo chiederlo. Se in mcl5 si ottengono i dati degli indicatori dai file di inclusione, dalle classi, l'ottimizzazione sarà più veloce?

Cioè, non vengono chiamati gli handle degli indicatori nel codice dell'Expert Advisor stesso.