errore 4756 - pagina 3

 
BHC:

Il mio EA sta portando strani errori con la build 778. Il volume di 0,1 è normalizzato e chiaramente non valido.

Puoi controllare le proprietà del simbolo Silver e farci sapere quali sonoSYMBOL_VOLUME_MIN e SYMBOL_VOLUME_STEP. Non è sempre sufficiente normalizzare, per esempio se il tuo Volume Step fosse 0.5 allora Normalize non ti aiuterebbe.
 
RaptorUK:
Puoi controllare le proprietà del simbolo Silver e farci sapere quali sonoSYMBOL_VOLUME_MIN e SYMBOL_VOLUME_STEP. Non sempre è sufficiente normalizzare, per esempio se il tuo Volume Step fosse 0.5 allora Normalize non ti aiuterebbe.

Questa fonte

Print(" volume step: ",SymbolInfoDouble(_trade_symbol,SYMBOL_VOLUME_STEP),", volume minimum: ",", ",SymbolInfoDouble(_trade_symbol,SYMBOL_VOLUME_MIN)); return;
         

Dà questo nei log del tester...

2013.03.12 12:46:01 Core 1 2013.01.23 13:32:59 volume step: 0.1, volume minimum: , 0.1

 
BHC:

Questa fonte

Dà questo nei log del tester...

2013.03.12 12:46:01 Core 1 2013.01.23 13:32:59 volume step: 0.1, volume minimum: , 0.1

Il problema potrebbe essere nella tua segnalazione di errore, non ho controllato con mql5 ma questo non funzionerà con mql4 . . .

if(_result.retcode != ( 0 || TRADE_RETCODE_PLACED || TRADE_RETCODE_DONE))

invece prova questo . .

if( _result.retcode != 0 && _result.retcode != TRADE_RETCODE_PLACED && _result.retcode != TRADE_RETCODE_DONE )
 
Questo ha eliminato gli errori! Grazie
 
BHC:
Questo ha eliminato gli errori! Grazie
if(_result.retcode != ( 0 || TRADE_RETCODE_PLACED || TRADE_RETCODE_DONE))

C'è qualche lingua dove questa sintassi è valida?

 
Anche io non mi ero mai imbattuto in questo... Penso di averlo ottenuto dall'implementazione di ordercheck da parte di qualcuno. Era su questo sito...
 
angevoyageur:

C'è qualche lingua dove questa sintassi è valida?

Forse, se le variabili fossero di tipo bool potrebbe avere un senso. Ho visto alcune persone fare cose simili sul forum di mql4, è un errore semplice da fare.
 
RaptorUK:
Era questo il thread che hai trovato?https://www.mql5.com/en/forum/10850 riporta lo stesso problema che sto avendo io

Non ho visto questo thread.

La soluzione è come ti ho detto, con il gestore di eventi OnTradeTransaction() (NON USARE QUESTO CODICE COSI' COM'E', E' PER PROVE E TEST):

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
                        {

    if (trans.type == TRADE_TRANSACTION_DEAL_ADD) {

        if (execution == SYMBOL_TRADE_EXECUTION_MARKET) {
            if (!trade.PositionModify(_Symbol, _sl, _tp))
                if (debugMode) {
                    Print("Modify SL & TP failed. Return code=", trade.ResultRetcode(), ". Code description: ", trade.ResultRetcodeDescription());
                    Print("Deal ticket : ", trans.deal);
                }
            else
                if (debugMode) Print("Modify SL & TP executed successfully. Return code=", trade.ResultRetcode(), " (", trade.ResultRetcodeDescription(),")");
        }

    }
}   

Questo funziona. _sl e _tp sono variabili globali, è sicuramente meglio elaborare localmente. trade è di tipo CTrade class. Suppongo che si possa fare lo stesso con OrderSend().

 
angevoyageur:

Non ho visto questo thread.

La soluzione è come ti ho detto, con il gestore di eventi OnTradeTransaction() (NON USARE QUESTO CODICE COSI' COM'E', E' PER PROVA E TEST):

Questo funziona. _sl e _tp sono variabili globali, è sicuramente meglio elaborare localmente. trade è di tipo CTrade class. Suppongo che si possa fare lo stesso con OrderSend().

Mi sto allontanando dalla classe CTrade nel tentativo di imparare le basi, non ho mai usato OOP quindi le classi, le strutture, ecc sono tutte parte della mia curva di apprendimento con mql5.

Sono sicuro che OnTradeTransaction() offrirebbe un workaround, ma mi sembra abbastanza orribile da usare anche per il semplice EA su cui sto lavorando, inoltre non c'è menzione della necessità di usarlo nella documentazione per OrderSend() e credo, lo confermo, di aver visto lo stesso problema nello Strategy Tester, non sono sicuro di come esattamente questo possa accadere, lo riproverò con qualche altra segnalazione di errore aggiunta per essere sicuro.

 
RaptorUK:

Mi sto allontanando dalla classe CTrade nel tentativo di imparare le basi, non ho mai usato OOP quindi le classi, le strutture, ecc. sono tutte parte della mia curva di apprendimento con mql5.

Sono sicuro che OnTradeTransaction() offrirebbe un workaround, ma mi sembra abbastanza orribile da usare anche per il semplice EA su cui sto lavorando, non c'è nemmeno menzione della necessità di usarlo nella documentazione di OrderSend() e penso, lo confermo, di aver visto lo stesso problema nello Strategy Tester, non sono sicuro di come esattamente questo possa accadere, lo proverò di nuovo con qualche altra segnalazione di errore aggiunta per essere sicuro.

Capisco la tua posizione sull'OOP.Ci vuole sempre più tempo rispetto all'approccio "tradizionale" ed è davvero utile per progetti grandi (o medi).

Sono molto interessato a sapere se esiste una soluzione "classica" per il nostro problema.