Autoapprendimento del linguaggio MQL5 da zero - pagina 80

 

Ci sono errori, quindi il codice non funzionerà come l'autore intendeva. Devi capirlo. Avete il codice, avete le carte a portata di mano.


Da quello che hai mostrato, vedo che o le candele sono meno di 60, o l'handle di uno degli indicatori è INVALIDO, il che significa che i parametri gli vengono inviati in modo errato. Oppure c'è un errore in un'altra parte del codice che non vedo.

Saluti, Vladimir.

Ops, Alexey;)

 
MrBrooklin #:

Sono riuscito a scoprire da solo dove si trova il problema, ma la domanda riguardava qualcos'altro: cosa può essere affetto da questi errori e cosa dovrei cambiare nel codice per eliminarli?

Sinceramente, Vladimir.

Se si verifica un errore, l'Expert Advisor non sarà collegato al grafico.

Non dovete fare nulla. Cosa è già stato fatto - in caso di errore, l'Expert Advisor viene staccato dal grafico

e informa l'utente.

Questo errore non si verifica praticamente, tranne quando il computer è in disordine.

==

Tuttavia, se succede sempre durante il processo di sviluppo...

Significa che l'indicatore non è chiamato correttamente - fissa i parametri dell'indicatore.

 
Dmitry Fedoseev #:

Se si verifica l'errore, l'EA non si attaccherà al grafico.

Non avete bisogno di fare nulla. Cosa è già stato fatto - in caso di errore, l'Expert Advisor si stacca dal grafico

e informa l'utente.

Questo errore non si verifica praticamente, tranne quando il computer è in disordine.

==

Tuttavia, se succede sempre durante il processo di sviluppo...

Significa che l'indicatore è chiamato in modo errato - correggi i parametri dell'indicatore.

Grazie, Dmitry per la tua risposta completa e comprensibile!

Saluti, Vladimir.

 
SanAlex #:

qui funziona - forse non stai impostando correttamente il periodo

Grazie per la dritta!!! Infatti, il problema era che non potevo impostare i periodi per entrambi gli indicatori da "zero" in su nelle impostazioni del tester. Avrei dovuto impostarli almeno da "uno" in su.

Grazie a tutti per la vostra partecipazione!

Saluti, Vladimir.

 
MrBrooklin #:

P.S. Dovresti rimuovere il codice EA "spoils", perché questi "spoils" infastidiscono molte persone. Ho già rimosso il mio.

Quelli che sono molto fastidiosi lasciano andare i boschi periodicamente prendendo motherwort o tintura di agarico della mosca.

Anche a me non piacciono quei lacci, ma non li guardo e basta.

 
Non molte persone vogliono imparare la lingua. Perché dovrebbe essere
 
Vladimir Baskakov #:
Ho deciso di imparare la lingua, ma non molte persone hanno iniziato ad impararla. Per quale motivo?

Vladimir, è molto semplice. Ho imparato quello che dovevo imparare. Ora prendo diversi EA e li faccio per me. La cosa più importante è che ora non guardo più MQL5 come i caratteri cinesi, ma come un normale pezzo di software. Molte grazie a tutti i professionisti che mi hanno aiutato nel mio autoapprendimento!

Saluti, Vladimir.

 
MrBrooklin #:


Preferisco avere uno spoiler che scaricare un file e metterlo nella mia sandbox. )

 

Buongiorno a tutti e buon umore!

Continuare l'autoapprendimento del linguaggio di programmazione MQL5. Arrivò il momento in cui dovetti avere a che fare con gli array. Ho deciso di calcolare la dimensione del lotto in base al rischio specificato nei parametri di input. Non ho errori o avvertimenti dopo la compilazione, ma il codice della funzione non funziona. Potete dirmi, per favore, dov'è l'errore?

Saluti, Vladimir.

input double   Risk0=1.0;           //Риск (% от баланса)
.
.
.
.
input double   Risk9=1.0;           //Риск (% от баланса)

//+------------------------------------------------------------------+
//| Функция Money_Management рассчитывает размер лота в зависимости  |
//|  от риска, заданного во входных параметрах советника.            |
//+------------------------------------------------------------------+
double Money_Management()
  {
   static int Risk[];
   int Number=0;
//----+ Объвляем переменную для хранения размеров массивов переменных
   static int Size_ = 0;
//----+ Изменяем размер массивов переменных
   if(Number + 1 > Size_)
     {
      uint size = Number + 1;
      //---- Предварительно обнуляем ячейки массива
      Risk[Number] = false;
     }
   if(Risk[0] != Risk[Number])
     {
      Risk[Number] = Risk[0];
     }
   double Lots=AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk[Number]/100000*10;
   Lots=MathMin(5,MathMax(0.1,Lots));
   if(Lots<0.1)
      Lots=NormalizeDouble(Lots,2);
   else
     {
      if(Lots<1)
         Lots=NormalizeDouble(Lots,1);
      else
         Lots=NormalizeDouble(Lots,0);
     }
   return(Lots);
  }
//+------------------------------------------------------------------+
 
MrBrooklin del linguaggio di programmazione MQL5. Arrivò il momento in cui dovetti avere a che fare con gli array. Ho deciso di calcolare la dimensione del lotto in funzione del rischio specificato nei parametri di input. Non ho errori o avvertimenti dopo la compilazione, ma il codice della funzione non funziona. Potete dirmi, per favore, dov'è l'errore?

Sinceramente, Vladimir.

Spero vivamente che non l'abbiate scritto voi...

Ecco una funzione funzionante

/********************************************************************\
|   Calculate optimal lot size     Расчет объема лота                |
/********************************************************************/
double contractSize(double Lot)
 {
  double volume = Lot > 0.0 ? Lot : AccountInfoDouble(ACCOUNT_MARGIN_FREE)/10000,
         v = volume,
         volumeStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP),
         minLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN),
         maxLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
  v = round(volume/volumeStep)*volumeStep;
  return(fmin(maxLot, fmax(minLot, v)));
 }/******************************************************************/

Tutto quello che devi fare è inserire la quantità di rischio, in modo che non conti dal margine libero completo...