Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 561

 
Ihor Herasko:

Semplice:

dà un errore

 
Aleksandr Lishchenko:

messaggio di errore

Dov'è l'errore? Che tipo di errore?

 

Salve. Ho un compito di controllare la correttezza del parametro del volume di trading specificato dall'utente, cioè il lotto specificato dovrebbe essere un multiplo del passo di cambio lotto. Per farlo, trovo un resto reale della divisione e lo confronto con uno zero o un valore molto vicino allo zero (per esempio, 0,000000001)

void OnStart()
{
   double volume = 0.03;
   Alert("Результат деления ", volume/MarketInfo(Symbol(), MODE_LOTSTEP));
   Alert("Шаг изменения лота ", MarketInfo(Symbol(), MODE_LOTSTEP));
   Alert("Вешественный остаток ", fmod(volume, MarketInfo(Symbol(), MODE_LOTSTEP)));
}

Risultato:

/*
   Вещественный остаток 0,009999999999999998
   Шаг изменения лота 0,01
   Результат деления 3,0
*/

Ho anche allegato uno screenshot.

Penso che il resto dovrebbe essere zero o un numero molto piccolo, ma il risultato è quasi 0,01 per qualche motivo? Allora come posso controllare il parametro di ingresso se, per esempio, l'utente imposta 0,001 per errore?

File:
4npm6qh.png  8 kb
 
Aleksandr Teleguz:

Salve. Ho un compito di controllare la correttezza del parametro del volume di trading specificato dall'utente, cioè il lotto specificato dovrebbe essere un multiplo del passo di cambio lotto. Per farlo, ottengo il resto reale della divisione e lo confronto con uno zero o un valore molto vicino allo zero (per esempio, 0,000000001)

Risultato:

Ho anche allegato uno screenshot.

Penso che il resto dovrebbe essere zero o un numero molto piccolo, ma il risultato è quasi 0,01 per qualche motivo? Allora come posso controllare il parametro di ingresso se, per esempio, l'utente imposta 0,001 per errore?

È un po' sbagliato. La prima cosa da fare è calcolare il valore corretto più vicino (in base al valore impostato), e poi controllare la differenza tra i valori ottenuti. Se è uguale a zero (o non più di DBL_EPSILON), allora tutto è a posto:

void OnStart()
{
   double volume = 0.03;

   double fVolumeMin = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MIN);   
   double fVolumeMax = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_MAX);   
   double fVolumeStep = SymbolInfoDouble(Symbol(), SYMBOL_VOLUME_STEP); 

   double fNearestCorrectVolume = VolumeCast(volume, fVolumeMin, fVolumeMax, fVolumeStep);
   if (fabs(fNearestCorrectVolume - volume) > DBL_EPSILON)
      Alert("Ошибка");
   else
      Alert("Все ОК");
}

La funzione VolumeCast può essere presa da qui.

 
Ihor Herasko:

Dove va male? Che tipo di errore dà?

1 errore(i), 0 avviso(i) 2 1
'if' - le espressioni non sono permesse su un globale

 

Pomeriggio!!!

Ragazzi, potete dirmi il codice su come collegare un EA ad un conto (per l'ultimo aggiornamento di MT4).

Grazie mille.

 
Aleksandr Lishchenko:

Buon pomeriggio!

Ragazzi, potete dirmi il codice su come collegare un EA ad un conto (per l'ultimo aggiornamento di MT4).

Grazie mille.

Vi è già stato dato il codice.

Hai fatto tu stesso l'errore - è scritto nella descrizione dell'errore che hai inserito il codice nell'area delle variabili globali e non dentro OnTick() o OnInit():

'if' - expressions are not allowed on a global scope

E con tale conoscenza state ancora cercando di proteggere il vostro codice da qualcun altro?
 
Artyom Trishkin:

Vi è già stato detto il codice.

Hai commesso tu stesso l'errore - ti è scritto nella descrizione dell'errore che hai inserito del codice nell'area delle variabili globali, non dentro OnTick() o OnInit():

'if' - expressions are not allowed on a global scope

E con questa consapevolezza stai ancora cercando di proteggere il tuo codice da qualcun altro?

Sto solo imparando!

Non giudicare! ;)

 
Aleksandr Lishchenko:

1 errore(i), 0 avviso(i) 2 1
'if' - le espressioni non sono permesse su un globale

Mostrami come hai applicato il codice. Hai appena copiato quello che ho scritto?

 
Ihor Herasko:

Mostrami come hai applicato il codice. Hai appena copiato quello che ho scritto?

L'ho fatto :)))