Caso impossibile: EA non funziona solamente su un PC specifico!!!!

 

Buongiorno,

ho creato anni fa un EA che ad oggi è cresciuto ed è diventato molto complesso. Funziona perfettamente e non ha alcun problema/bug, tutto funziona come io voglio che funzioni.

Lo tengo costantemente aggiornato e costantemente in funzione su conti real di vari brokers e demo per le prove.

Al momento gira su varie VPS e su vari PC (per backtest) senza problemi.

Ma c'è un fatto che mi sta facendo impazzire: su un PC e solo su quello, il calcolo del lottaggio è errato e non capisco il perchè! Non funziona!

  • Il PC ha windows 10 pro (e non è l'unico che ho con questa versione)
  • Ho disinstallato e reinstallato MT4 cancellando anche cartelle rimaste e chiavi nei registri di sistema
  • Le impostazioni di MT4 sono le stesse per tutti e pure la valuta del conto, anche in backtest
  • La versione di Mt4 è Luglio 2024 su tutti
  • L'EA è lo stesso identico, compilato nello stesso momento, lo stesso file, con lo stesso setup parametri

Ma solo su questo dannato PC non funziona il calcolo del lottaggio! Tutto il resto dell'EA funziona e non capisco!

Questo il codice che uso da anni per calcolare il lotto nel mio EA:

      double balance = AccountBalance();  // ottengo la quantità di moneta depositata nel conto trading

      double baseLotSize = 0,01; // indica la più piccola variazione di lottaggio ammessa, in questo caso 0.01 per esempio

      double  BalancePerMinLot = 1.000;  // indica ogni quanta moneta del balance aumentare il lotto della variazione minima ( baseLotSize)

      volume = balance < BalancePerMinLot ? baseLotSize : MathFloor(balance / BalancePerMinLot) * baseLotSize;

In questo caso esempio il risultato sarà:

  • se balance è inferiore a 1.000 il lottaggio sarà =  baseLotSize ovvero 0,01 lotti
  • se balance è superiore a 1.000, (ad esempio 10.000) allora si farà ( balance / BalancePerMinLot ) * baseLotSize  = (10.000 / 1.000) * 0.01 = 0,10 lotti

Mentre solo in quel determianto PC il risultato è il seguente:

  • se balance è superiore a 1.000, (ad esempio 10.000) allora si farà ( balance / BalancePerMinLot ) * baseLotSize  = 10 lotti anzichè 0,10 lotti.
  • Non capisco dove sia il problema dato che è solo su quel pc quel comportamento.
  • Inoltre proseguendo il backtest il lottaggio non cambio con i guadagni che vengono incassati ma tutte le trade vengono eseguite a 10 lotti , costanti
  • Se invece il capitale è inferiore a BalancePerMinLot, allora correttamente i lottaggio sarà 0,01!

Per assurdo, sul pc buggato, se  BalancePerMinLot = 100 dovrebbe fare un lottaggio 10 volte più grande mentre invece apre trades con lottaggio 10 volte più piccolo pari a 1 lotto.

A chi è capitato un mistero del genere?


Grazie!

Jack

 
ALESSANDRO VIDALI:

Buongiorno,

ho creato anni fa un EA che ad oggi è cresciuto ed è diventato molto complesso. Funziona perfettamente e non ha alcun problema/bug, tutto funziona come io voglio che funzioni.

Lo tengo costantemente aggiornato e costantemente in funzione su conti real di vari brokers e demo per le prove.

Al momento gira su varie VPS e su vari PC (per backtest) senza problemi.

Ma c'è un fatto che mi sta facendo impazzire: su un PC e solo su quello, il calcolo del lottaggio è errato e non capisco il perchè! Non funziona!

  • Il PC ha windows 10 pro (e non è l'unico che ho con questa versione)
  • Ho disinstallato e reinstallato MT4 cancellando anche cartelle rimaste e chiavi nei registri di sistema
  • Le impostazioni di MT4 sono le stesse per tutti e pure la valuta del conto, anche in backtest
  • La versione di Mt4 è Luglio 2024 su tutti
  • L'EA è lo stesso identico, compilato nello stesso momento, lo stesso file, con lo stesso setup parametri

Ma solo su questo dannato PC non funziona il calcolo del lottaggio! Tutto il resto dell'EA funziona e non capisco!

Questo il codice che uso da anni per calcolare il lotto nel mio EA:

      double balance = AccountBalance();  // ottengo la quantità di moneta depositata nel conto trading

      double baseLotSize = 0,01; // indica la più piccola variazione di lottaggio ammessa, in questo caso 0.01 per esempio

      double  BalancePerMinLot = 1.000;  // indica ogni quanta moneta del balance aumentare il lotto della variazione minima ( baseLotSize)

      volume = balance < BalancePerMinLot ? baseLotSize : MathFloor(balance / BalancePerMinLot) * baseLotSize;

In questo caso esempio il risultato sarà:

  • se balance è inferiore a 1.000 il lottaggio sarà =  baseLotSize ovvero 0,01 lotti
  • se balance è superiore a 1.000, (ad esempio 10.000) allora si farà ( balance / BalancePerMinLot ) * baseLotSize  = (10.000 / 1.000) * 0.01 = 0,10 lotti

Mentre solo in quel determianto PC il risultato è il seguente:

  • se balance è superiore a 1.000, (ad esempio 10.000) allora si farà ( balance / BalancePerMinLot ) * baseLotSize  = 10 lotti anzichè 0,10 lotti.
  • Non capisco dove sia il problema dato che è solo su quel pc quel comportamento.
  • Inoltre proseguendo il backtest il lottaggio non cambio con i guadagni che vengono incassati ma tutte le trade vengono eseguite a 10 lotti , costanti
  • Se invece il capitale è inferiore a BalancePerMinLot, allora correttamente i lottaggio sarà 0,01!

Per assurdo, sul pc buggato, se  BalancePerMinLot = 100 dovrebbe fare un lottaggio 10 volte più grande mentre invece apre trades con lottaggio 10 volte più piccolo pari a 1 lotto.

A chi è capitato un mistero del genere?


Grazie!

Jack

Ciao Jack,

Capisco perfettamente la tua frustrazione, soprattutto quando tutto sembra identico ma su un singolo PC il comportamento dell'EA è diverso. Vista la tua descrizione dettagliata, posso suggerire alcune ipotesi che potrebbero aiutarti a risolvere questo mistero.

  1. Impostazioni Internazionali e Separatore Decimale: Una delle prime cose che mi vengono in mente riguarda le impostazioni internazionali di Windows, in particolare il separatore decimale. Se quel PC ha una configurazione locale diversa (ad esempio, utilizza una virgola come separatore decimale anziché un punto), questo potrebbe causare problemi nel modo in cui MT4 gestisce i calcoli dei lotti. Ti consiglio di controllare le impostazioni del pannello di controllo di Windows:

    • Vai su Pannello di controllo > Orologio e opzioni internazionali > Area geografica.
    • Assicurati che il separatore decimale sia impostato correttamente e in linea con gli altri PC (solitamente un punto ".").
  2. Impostazioni dell'Account e del Broker: Anche se dici che la valuta del conto e le impostazioni di MT4 sono le stesse, vale la pena verificare se ci sono differenze nelle condizioni dell'account o specifiche del broker che potrebbero influire sul calcolo del lotto. Ad esempio, controlla se ci sono impostazioni di leva finanziaria diverse o requisiti di margine specifici su quel PC che potrebbero causare questo comportamento anomalo.

  3. Precisione del Tipo di Dati: Un'altra possibile causa potrebbe essere legata alla precisione del calcolo del lotto. Anche se utilizzi MathFloor , potresti provare a utilizzare NormalizeDouble per garantire che il risultato sia sempre corretto:

    mql4
    volume = balance < BalancePerMinLot ? baseLotSize : NormalizeDouble(MathFloor(balance / BalancePerMinLot) * baseLotSize, 2);

    Anche se non dovrebbe fare una grande differenza, questo potrebbe aiutare a prevenire eventuali problemi di arrotondamento.

  4. Controllo delle Variabili Globali o dei Settaggi Specifici: Verifica se ci sono variabili globali o impostazioni specifiche all'interno dell'EA che potrebbero differire su quel PC. È possibile che qualche parametro o condizione specifica, salvata a livello locale, possa influenzare il comportamento dell'EA.

  5. Backup e Reset Completo del PC: Se tutto il resto fallisce, potrebbe essere utile fare un backup dei dati e provare a fare un reset completo del sistema operativo su quel PC. Questo dovrebbe eliminare qualsiasi differenza nascosta che potrebbe influire su MT4.

Spero che una di queste soluzioni possa aiutarti a risolvere il problema. Facci sapere se riesci a trovare la causa, sono curioso anch'io di capire cosa stia succedendo!

Buona fortuna,