L'EA che ho scritto tre mesi fa non può passare il test della strategia ora, ma funzionava bene due o tre mesi fa! - pagina 2

 
angevoyageur:
Mostra il tuo codice, così possiamo dirti dove aggiungere questa linea.

Bonsoir Angevoyageur,

Ecco il mio codice. Le due parti sono separate nella sezione onTick.

Grazie

Vivaldie


      MqlTick latest_price;      // To be used for getting recent/latest price quotes
      MqlTradeRequest mrequest;  // To be used for sending our trade requests
      MqlTradeResult mresult;    // To be used to get our trade results
      MqlRates mrate[];          // To be used to store the prices, volumes and spread of each bar
      ZeroMemory(mrequest);      // Initialization of mrequest structure
   if(ConditionDICrossMain = -1)
     {
      if(Buy_opened)
        {
         return;    // Don't open a new Buy Position
        }
      mrequest.action = TRADE_ACTION_DEAL;                                  // immediate order execution
      mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           // latest ask price
      mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); // Stop Loss
      mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); // Take Profit
      mrequest.symbol = _Symbol;                                            // currency pair
      mrequest.volume = Lot;                                                 // number of lots to trade
      mrequest.magic = EA_Magic;                                             // Order Magic Number
      mrequest.type = ORDER_TYPE_BUY;                                        // Buy Order
      mrequest.type_filling = ORDER_FILLING_FOK;                             // Order execution type
      mrequest.deviation=100;                                                // Deviation from current price
      //--- send order
        
      OrderSend(mrequest,mresult);
      // get the result code
      if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
        {
         Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
        }
      else
        {
         Alert("The Buy order request could not be COMPLETE -error:",GetLastError());
         ResetLastError();           
         return;
        }
     }
 
In questa pagina posso vedere che l'errore è nella sezione ACCOUNT. Ho provato con un altro MT5 e un conto diverso ma ho lo stesso messaggio.
 
Vivaldi:

Bonsoir Angevoyageur,

Ecco il mio codice. Le due parti sono separate nella sezione onTick.

Grazie a voi

Vivaldie


  • Qual è il valore di mresult.retcode quando hai un errore?
  • Quali sono i valori di STP, TKP?
  • OrderSend restituisce un bool, devi controllare anche il valore restituito.
  • Dato che non so cosa hai tra le due parti, è meglio mettere ZeroMemory(mrequest) appena prima di "mrequest.action=TRADE_ACTION_DEAL"
 

Non ho visto messaggi nel log e dice che il problema viene dallo stop loss.

Con il valore 0 funziona benissimo : )

 
Vivaldi:

Non ho visto messaggi nel log e dice che il problema viene dallo stop loss.

Con il valore 0 funziona benissimo : )

Per i vostri stoplevels (SL e TP) dovete prendere in considerazione il valore di STOP_LEVELS per il simbolo che state negoziando. Vedi questo argomento.
 
angevoyageur:
  • Qual è il valore di mresult.retcode quando hai un errore?
  • Quali sono i valori di STP, TKP?
  • OrderSend restituisce un bool, devi controllare anche il valore restituito.
  • Siccome non so cosa hai tra le due parti, è meglio mettere ZeroMemory(mrequest) appena prima di "mrequest.action=TRADE_ACTION_DEAL"


Ange lo faccio funzionare ora :) il problema viene dalla variabile STP.

Bisogna cambiare la dichiarazione con il tipo double (invece di int) per compiacere mr. NormalizeDouble.

Grazie

double STP, TKP;
 

Ho sbagliato e cambiando la dichiarazione della variabile non ho risolto il messaggio di errore. Il problema viene dalla variabile STP e TKP che sono 0 facendo sl = tp.

 

È la necessità di aggiungere

ZeroMemory(request);

un bug nella build 975 (x86)?

Recentemente ho riscontrato l'errore 4756 durante un test di strategia e l'aggiunta della linea di cui sopra l'ha risolto.

 
k.doras:

È la necessità di aggiungere

un bug nella build 975 (x86)?

Recentemente ho riscontrato l'errore 4756 durante un test di strategia e l'aggiunta della linea di cui sopra l'ha risolto.

Questa linea è obbligatoria (o equivalente inizializzazione della struttura della richiesta).
 

ciao

inviare l'ordine funziona nel conto demo ma nel conto reale non funziona (2014.11.30 18:21:00.062 55 (اخابر,D1) BuyA: errore 4756, retcode = 10006)

{
//--- prepare the request
   MqlTradeRequest request;
   MqlTradeResult  result;
   MqlTradeCheckResult check;
   ZeroMemory(request);
   ZeroMemory(result);
   ZeroMemory(check);
   request.action=5;
   request.symbol=_Symbol;
   request.volume=1000.00;
   request.price=2652.000;
   request.stoplimit=2652.000;
   request.sl=0;
   request.tp=0;
   request.type=6;
   request.type_filling=2;
   request.type_time=0;
   request.expiration=0;
   request.magic=0;
   request.comment="";

   if(!OrderSend(request,result))
     {
      Print(__FUNCTION__,": error ",GetLastError(),", retcode = ",result.retcode);
     }
//---


Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Structure of Request Check Results
Documentation on MQL5: Standard Constants, Enumerations and Structures / Data Structures / Structure of Request Check Results
  • www.mql5.com
Standard Constants, Enumerations and Structures / Data Structures / Structure of Request Check Results - Reference on algorithmic/automated trading language for MetaTrader 5