Autoapprendimento del linguaggio MQL5 da zero - pagina 81

 
Alexey Viktorov #:

Spero davvero che tu non abbia scritto questo...

Ecco una funzione funzionante

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

Grazie, Alexey, per il tuo feedback! La mia versione del calcolo del lotto funziona, e solo la parte di codice in cui è scritto l'array non funziona.

Originariamente l'ho progettato per essere in grado di impostare diverse dimensioni di rischio per diverse coppie di valute.

Ad essere onesti, non capisco bene come utilizzare il tuo codice per un EA multicurrency.

Saluti, Vladimir.

 
MrBrooklin #:

Grazie, Alexey, per il tuo feedback! Il calcolo del lotto nella mia versione funziona, e solo quella parte del codice, dove viene scritto l'array, non funziona.

È stato originariamente progettato per consentire di specificare diverse dimensioni di rischio per diverse coppie di valute.

Ad essere onesti, non capisco bene come utilizzare il tuo codice per un EA multicurrency.

Sinceramente, Vladimir.

Molto semplice. Non pensavo che avresti avuto delle difficoltà dopo tutto quello che hai imparato.

/********************************************************************\
|   Calculate optimal lot size     Расчет объема лота                |
/********************************************************************/
//double contractSize(double Lot)
double contractSize(string symbol, double risk)
 {
//  double volume = Lot > 0.0 ? Lot : AccountInfoDouble(ACCOUNT_MARGIN_FREE)/10000,
  double volume = AccountInfoDouble(ACCOUNT_MARGIN_FREE)*risk/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)));
 }/******************************************************************/

E la funzione si chiama

double lot = contractSize(symbol[Number], Risk[Number]);
 
Alexey Viktorov #:

Molto semplice. Non pensavo, dopo tutto quello che hai imparato, che avresti avuto problemi con questo...

E la funzione viene chiamata.

Grazie ancora, Alexey, cercherò di usarlo nel mio EA stasera.

Sono piuttosto nuovo agli array, da qui le difficoltà. Fino ad ora non ne avevo bisogno, ma ora mi rendo conto che questa è una grande lacuna che dovrò colmare nel prossimo futuro. Ho iniziato a studiare l'articolo di Dmitry Fedoseyev, ma finora c'è molto che non è chiaro. Ho bisogno di tempo per assimilare il materiale.

Saluti, Vladimir.

 
SanAlex #:

Ecco qualcosa con cui ho pasticciato.

Forse dovreste prima capire il succo del discorso.
 
SanAlex #:

qualcosa - ho provato il codice dappertutto - sembra funzionare.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Sta per iniziare - ho un altro ostacolo sulla strada.

Sasha, scrivi anche questi codici su richiesta nel freelance? Mi sono sempre chiesto come fate a scrivere codici di 2 o più MIGLIAIA di linee. Ma ora comincio a capirlo... Calcola il numero di linee nel mio codice e nel tuo... E controllando la massima diffusione, è una sciocchezza... È molto più facile usare l'opzione "non lo so".

  MqlTick tick;
    if(!SymbolInfoTick(posSymbol, tick))
      return;
    if(tick.ask-tick.bid > inpSpred)
      return;

Se volete che funzioni, ma non tutti sono in grado di capire quello che avete scritto, potete fare con tre righe

  MqlTick tick;
    if(!SymbolInfoTick(posSymbol, tick) || tick.ask-tick.bid > inpSpred)
      return;
 
SanAlex #:

questo codice è preso dal terminale

Continuate a fare un buon lavoro.
 
SanAlex #:

Non so scrivere il codice da solo - prendo tutte le funzioni dalla documentazione e con un po' di smanettamenti le modifico per i miei scopi.

\\\\\\\\\\\\\\\\\\\\

Guardo anche i vostri codici e nel codebase. Sto imparando - non sono un teorico - è più facile scavare da solo che spiegare - come scavare.

È già chiaro che si può solo scavare. Perché mettere i codici qui?
 
SanAlex #:

solo per... solo per farvi divertire.

A chi altro farete le vostre domande intelligenti?

Ti hanno dato dieci anni per una ragione.
 
SanAlex #:

Lascia il Golfo di Finlandia e vieni nel Mar Nero con noi

In realtà sono a Kaliningrad
 
SanAlex #:

Lascia il Golfo di Finlandia e vieni nel Mar Nero con noi

Motivazione: