erro 4756

 

meu ea faz o erro 4756

você pode me ajudar obrigado

 //+------------------------------------------------------------------+
//|                                                    ErlyBird6.mq5 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"

string name, oldnameHTop,oldnameHBottom,oldnameVstart,oldnameVstop;

input int       MA_Period= 8 ;       // Moving Average Period
input int       StopLoss= 100 ;       // Stop Loss
input int       TakeProfit= 100 ;   // Take Profit
input int       Trigger= 5 ;
input double    Lot= 1 ;
input int       EA_Magic= 12345 ;   // EA Magic Number


int maHandle;   // handle for our Moving Average indicator
int     Sommerzeit     =   87 ;   // DayOfYear Beginn Sommerzeit
int     Winterzeit     =   297 ;   // DayOfYear Beginn Winterzeit
int   TimeSelect;
int STP, TKP;   // To be used for Stop Loss & Take Profit values


double maVal[]; // Dynamic array to hold the values of Moving Average for each bars
double hg[],lw[],p_close;
double High[],  Low[];
double Top,Bottom;

   MqlRates rates[];
   MqlDateTime Time;

 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
     // Initialization of mrequest structure
  

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+


int OnInit ()
  {


//--- Get the handle for Moving Average indicator
   maHandle= iMA ( _Symbol , _Period ,MA_Period, 0 , MODE_EMA , PRICE_CLOSE );
//--- What if handle returns Invalid Handle
   if ( maHandle< 0 )
     {
       Alert ( "Error Creating Handles for indicators - error: " , GetLastError (), "!!" );
       return (- 1 );
     }



//--- Let us handle currency pairs with 5 or 3 digit prices instead of 4
   STP = StopLoss;
   TKP = TakeProfit;
   if ( _Digits == 5 || _Digits == 3 )
     {
      STP = STP* 10 ;
      TKP = TKP* 10 ;
     }
   

   return ( 0 );
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();
      
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   // Do we have enough bars to work with
   if ( Bars ( _Symbol , _Period )< 60 ) // if total bars is less than 60 bars
     {
       Alert ( "We have less than 60 bars, EA will now exit!!" );
       return ;
     }  

// We will use the static Old_Time variable to serve the bar time.
// At each OnTick execution we will check the current bar time with the saved one.
// If the bar time isn't equal to the saved time, it indicates that we have a new tick.

   static datetime Old_Time;
   datetime New_Time[ 1 ];
   bool IsNewBar= false ;

// copying the last bar time to the element New_Time[0]
   int copied= CopyTime ( _Symbol , _Period , 0 , 1 ,New_Time);
   if (copied> 0 ) // ok, the data has been copied successfully
     {
       if (Old_Time!=New_Time[ 0 ]) // if old time isn't equal to new bar time
        {
         IsNewBar= true ;   // if it isn't a first call, the new bar has appeared
         if ( MQL5InfoInteger ( MQL5_DEBUGGING )) Print ( "We have new bar here " ,New_Time[ 0 ], " old time was " ,Old_Time);
         Old_Time=New_Time[ 0 ];             // saving bar time
        }
     }
   else
     {
       Alert ( "Error in copying historical times data, error =" , GetLastError ());
       ResetLastError ();
       return ;
     }

//--- EA should only check for new trade if we have a new bar
   if (IsNewBar== false )
     {
       return ;
     }
 
//--- Do we have enough bars to work with
   int Mybars= Bars ( _Symbol , _Period );
   if (Mybars< 60 ) // if total bars is less than 60 bars
     {
       Alert ( "We have less than 60 bars, EA will now exit!!" );
       return ;
     } 
  
     ArraySetAsSeries (rates, true );
     copied= CopyRates ( _Symbol , 0 , 0 , 60 ,rates);
   
     TimeToStruct (rates[ 0 ].time, Time);
     if (  Time.day_of_year>=Sommerzeit &&   Time.day_of_year<=Winterzeit) TimeSelect= 11 ; else TimeSelect= 10 ;  
     
     if (  Time.hour==TimeSelect &&  Time.min== 0 )   //draw vertical line at TimeSelect
          {
             ObjectDelete ( 0 ,oldnameVstart);  
            name = "VerticalStart" + TimeToString (rates[ 0 ].time, TIME_DATE|TIME_SECONDS);
             ObjectCreate ( 0 ,name, OBJ_VLINE , 0 ,rates[ 0 ].time, 0 ); 
             ObjectSetInteger ( 0 ,name, OBJPROP_COLOR , clrRed );
            oldnameVstart= name;       
          }
      
    
         if (  Time.hour==TimeSelect+ 5 &&  Time.min== 0 )   //draw vertical line at TimeSelect+5
           {
            
             ObjectDelete ( 0 ,oldnameVstop);      
            name = "VerticalEnd" + TimeToString (rates[ 0 ].time, TIME_DATE|TIME_SECONDS);
             ObjectCreate ( 0 , name, OBJ_VLINE , 0 ,rates[ 0 ].time, 0 );
             ObjectSetInteger ( 0 , name, OBJPROP_COLOR , clrDarkViolet );
            oldnameVstop= name;   
            
             ArraySetAsSeries (hg, true );
             ArraySetAsSeries (lw, true );
           
             CopyHigh ( _Symbol , _Period , TimeCurrent (), 5 ,hg);
             CopyLow ( _Symbol , _Period , TimeCurrent (), 5 ,lw);
       
             
             Top = NormalizeDouble (rates[ ArrayMaximum (hg, 0 , WHOLE_ARRAY )].high, _Digits );  
             Bottom = NormalizeDouble (rates[ ArrayMinimum (lw, 0 , WHOLE_ARRAY )].low, _Digits );
          
           
             // draw horizontal line at the top of  5 last  candles 
             ObjectDelete ( 0 , oldnameHTop);
            name = "HorizontalTop" + TimeToString (rates[ 0 ].time, TIME_DATE|TIME_SECONDS);
        
             ObjectCreate ( 0 ,name, OBJ_HLINE , 0 ,rates[ 0 ].time,Top);
             ObjectSetInteger ( 0 ,name , OBJPROP_COLOR , clrGreenYellow );
            oldnameHTop= name;
         
         
             // draw horizontal line at the bottom of  5 last  candles 
             ObjectDelete ( 0 ,oldnameHBottom);
            name = "HorizontalBottom" + TimeToString (rates[ 0 ].time, TIME_DATE|TIME_SECONDS);
        
             ObjectCreate ( 0 ,name, OBJ_HLINE , 0 ,rates[ 0 ].time,Bottom);
             ObjectSetInteger ( 0 ,name , OBJPROP_COLOR , clrCrimson );
            oldnameHBottom= name;
 
     ZeroMemory (mrequest);       
         
 // the MA-8 values arrays
   ArraySetAsSeries (maVal, true );
 
   if ( CopyBuffer (maHandle, 0 , 0 , 3 ,maVal)< 0 )
     {
       Alert ( "Error copying Moving Average indicator buffer - error:" , GetLastError ());
       ResetLastError ();
       return ;
     }
 
 
 
 //--- Get the last price quote using the MQL5 MqlTick Structure
   if (! SymbolInfoTick ( _Symbol ,latest_price))
     {
       Alert ( "Error getting the latest price quote - error:" , GetLastError (), "!!" );
       return ;
     }
 
 
/**********************************           BUY POSITION    ************************************************/             
 
   //--- Declare bool type variables to hold our Buy Conditions
   // bool Buy_Condition_1=(rates[0].close > Top);  
     //bool Buy_Condition_1=(latest_price.ask >Top);
    
    
         // any opened Buy position?
         if (isTrade_BUY())
           {
             Alert ( "We already have a Buy Position!!!" );
             return ;     // Don't open a new Buy Position
           }
         ZeroMemory (mrequest);
         ZeroMemory (mresult); 
         mrequest.action = TRADE_ACTION_PENDING ;   // immediate order execution
         mrequest.price = NormalizeDouble (Top+Trigger* _Point , _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.sl = 0;
       //  mrequest.tp =0;
         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_STOP ;                                   // Buy Order
         mrequest.type_filling = ORDER_FILLING_RETURN ;                             // 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 completed -error:" , GetLastError ());
             ResetLastError ();           
             return ;
           }
   
      
 /**********************************          SELL POSITION    ************************************************/             
         if (isTrade_SELL())
           {
             Alert ( "We already have a Sell position!!!" );
             return ;     // Don't open a new Sell Position
           }
         ZeroMemory (mrequest);
         ZeroMemory (mresult); 
         mrequest.action= TRADE_ACTION_PENDING ;                               // immediate order execution
         mrequest.price = NormalizeDouble (Bottom-Trigger* _Point , _Digits );             // latest Bid price
         mrequest.sl = NormalizeDouble (latest_price.bid + STP* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble (latest_price.bid - 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_SELL_STOP ;                                     // Sell Order
         mrequest.type_filling = ORDER_FILLING_RETURN ;                           // 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 Sell order has been successfully placed with Ticket#:" ,mresult.order, "!!" );
           }
         else
           {
             Alert ( "The Sell order request could not be completed -error:" , GetLastError ());
             ResetLastError ();
             return ;
           }
          
          
           }

  DeleteAllOrdersPending();
   
    }
   
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade ()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret= 0.0 ;
//---

//---
   return (ret);
  }
//+------------------------------------------------------------------+
bool isTrade_BUY()
  {
   if ( PositionSelect ( _Symbol )== true && PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_BUY ) // we have an opened position
       {
         return ( true );
        }
  
    
   else 
     {
     return ( false );
     }
  
  }
/////////////////////////////////////////////////////////////////////////////////////


bool isTrade_SELL()
  {
   if ( PositionSelect ( _Symbol )== true && PositionGetInteger ( POSITION_TYPE )== POSITION_TYPE_SELL ) // we have an opened position
       {
         return ( true );
        }
  
    
   else 
     {
     return ( false );
     }
  
  }
  
////////////////////////////////////////////////////////////////////////////////////// 
 void DeleteAllOrdersPending()
   {
    
     if (isTrade_SELL()||isTrade_BUY())
     {  
    
     int i;
   // in this loop we're checking all pending orders
       for (i= 0 ;i< OrdersTotal ();i++)
         {
         // choosing each order and getting its ticket
         ulong ticket= OrderGetTicket (i);
           // processing orders with "our" symbols only
           if ( OrderGetString ( ORDER_SYMBOL )== Symbol ())
             {
             // processing Buy Stop orders
             if ( OrderGetInteger ( ORDER_TYPE )== ORDER_TYPE_BUY_STOP )
                {
                 mrequest.action= TRADE_ACTION_REMOVE ;
                 // putting the ticket number to the structure
                 mrequest.order=ticket;
                 // sending request to trade server
                 OrderSend (mrequest,mresult);
                }
        
         // processing Sell Stop orders
             if ( OrderGetInteger ( ORDER_TYPE )== ORDER_TYPE_SELL_STOP )
               {
               // we will delete this pending order
               mrequest.action= TRADE_ACTION_REMOVE ;
               // putting the ticket number to the structure
               mrequest.order=ticket;
               // sending request to trade server
               OrderSend (mrequest,mresult);
                    
               }
           } 
       } //boucle for
      } //if
    }    
 
dan5:

minha ea comete erro 4756

você pode me ajudar a agradecer

2013.03.10 11:19:18 2012.01.04 15:00:00 paradas de compra falhadas 1,00 EURUSD a 1,30505 sl: 1,28375 tp: 1,30375 [Paradas inválidas]
Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Order Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Order Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Trade Constants / Order Properties - Documentation on MQL5
 

CopyHigh(_Symbol,_Period,TimeCurrent(),5,hg);

Top = NormalizeDouble(rates[ArrayMaximum(hg,0,WHOLE_ARRAY)].high,_Digits); 

- projetomal compreendido .
Escolha entre os valores do dobro máximo e use aquele ao invés do índice inteiro

 
dan5:

minha ea comete erro 4756

você pode me ajudar a agradecer

O erro 4756 é "Falha no envio de pedido comercial". Se você tiver erro ao enviar o pedido, verifique o código de retorno da MqlTradeResult

         //--- send order
         OrderSend(mrequest,mresult);
         // get the result code
         if(mresult.retcode==10009 || mresult.retcode==10008) //Request is completed or order placed
           {
            Alert("An order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The order request could not be completed -error:",GetLastError()," with trade return code ",mresult.retcode);
            ResetLastError();
            return;
           }

De acordo comKonstantin83acima, você tem erro de parada inválido, o que significa que você tem que colocar ordem pendente fora deSymbolInfoIntegerSYMBOL_TRADE_STOPS_LEVEL eSYMBOL_TRADE_FREEZE_LEVEL.

 
phi.nuts:

O erro 4756 é "Falha no envio de pedido comercial". Se você tiver erro ao enviar o pedido, verifique o código de retorno da MqlTradeResult

De acordo comKonstantin83acima, você tem erro de parada inválido, o que significa que você tem que colocar ordem pendente fora deSymbolInfoIntegerSYMBOL_TRADE_STOPS_LEVEL eSYMBOL_TRADE_FREEZE_LEVEL.

As paradas inválidas também são devolvidas para um corretor tipo ECN ?
 
RaptorUK:
As paradas inválidas também são devolvidas para um corretor tipo ECN ?
É claro que você sabe que a resposta é não. Mas por que perguntar isso?
 
phi.nuts:
É claro que você sabe que a resposta é não. Mas por que perguntar isso?
Por que você assume que eu sei que a resposta é não? Paradas inválidas(erro 130) são devolvidas em mql4 quando SL ou TP são enviadas com OrderSend() para um corretor ECN, então eu estava perguntando se o mesmo é verdade com mql5. Que erro é devolvido?
Documentation on MQL5: Standard Constants, Enumerations and Structures / Codes of Errors and Warnings / Compilation Errors
Documentation on MQL5: Standard Constants, Enumerations and Structures / Codes of Errors and Warnings / Compilation Errors
  • www.mql5.com
Standard Constants, Enumerations and Structures / Codes of Errors and Warnings / Compilation Errors - Documentation on MQL5
 
RaptorUK:
Por que você supõe que eu sei que a resposta é não? Paradas inválidas(erro 130) são devolvidas em mql4 quando SL ou TP são enviadas com OrderSend() para um corretor ECN, então eu estava perguntando se o mesmo é verdade com mql5. Que erro é devolvido?
Realmente ? isso é interessante. Tenho que verificar isso mais tarde ;D.
 
phi.nuts:
Realmente ? isso é interessante. Tenho que verificar isso mais tarde ;D.
Se o comportamento do Strategy Tester é similar ao que seria devolvido por um Corretor, então parece que SL & TP são ignorados quando enviados por um Símbolo cujoENUM_SYMBOL_TRADE_EXECUTION éexecução de Bolsa ouexecução de Mercado e nenhum erro é devolvido.
 
RaptorUK:
Tenho investigado um pouco enquanto tentava encontrar meu caminho com o mql5. Se o comportamento do Strategy Tester é similar ao que seria devolvido por um Corretor, então parece que o SL & TP é ignorado quando enviado por um Símbolo cujoENUM_SYMBOL_TRADE_EXECUTION éexecução de Bolsa ouExecução de Mercado e nenhum erro é devolvido.

Algo mais que encontrei a respeito de Paradas Inválidas. Tenho uma simples EA que coloca uma negociação com SL & TP a menos que o Símbolo seja Troca ou Execução de Mercado, então ele envia a negociação com SL & TP não definida e depois envia uma segunda solicitação para (TRADE_ACTION_SLTP) para definir o SL & TP.

Funciona bem no testador de estratégia, então hoje eu tentei em uma conta Demo e continuei obtendo Paradas Inválidas (erro 10016). Então eu verifiquei o Nível de Paradas e o Nível de Congelamento, ambos são 0, tentei vários níveis de SL & TP, nada funcionou. Eu podia definir manualmente o mesmo SL & TP para uma posição existente sem nenhum problema . . então adicionei um teste para colocar o SL & TP somente se a posição pudesse ser selecionada . . e não mais paradas inválidas, nem mais solicitação de comércio TRADE_ACTION_SLTP :-(

Então adicionei este código entre a conclusão do pedido comercial inicial enviado sem TP & SL e o pedido comercial subseqüente que envia o TP & SL . .

         SelectRetryCount = 1;
         if(SetTPandSL)
            {
            while(!PositionSelect(_Symbol) && SelectRetryCount < 10)
               {
               Sleep(SelectRetryCount * 100); // sleep for SelectRetryCount * 100 mS
               SelectRetryCount++;
               }
            }

SetTPandSL é definido como verdadeiro se o pedido de negociação inicial for bem sucedido, não adianta tentar definir um TP & SL se não for. A posição é selecionada e se falhar um sono de 100 mS acontece, então a seleção é novamente testada, se falhar um sono de 200 mS acontece, etc. por até 9 tentativas (4,5 segs totais).

Ainda não sei realmente o que estou fazendo com o mql5, estou realmente apenas tentando fazer algumas coisas funcionarem e esperando aprender enquanto vou... é o que eu encontrei aqui um comportamento normal? Eu teria pensado que uma vez que o pedido comercial inicial retornasse 10009 - TRADE_RETCODE_DONE eu estaria OK para enviar o pedido para definir o TP & SL, não é este o caso ? alguém sabe ?

 
RaptorUK:

Algo mais que encontrei a respeito de Paradas Inválidas. Tenho uma simples EA que coloca uma negociação com SL & TP a menos que o Símbolo seja Troca ou Execução de Mercado, então ele envia a negociação com SL & TP não definida e depois envia uma segunda solicitação para (TRADE_ACTION_SLTP) para definir o SL & TP.

Funciona bem no testador de estratégia, então hoje eu tentei em uma conta Demo e continuei obtendo Paradas Inválidas (erro 10016). Então eu verifiquei o Nível de Paradas e o Nível de Congelamento, ambos são 0, tentei vários níveis de SL & TP, nada funcionou. Eu podia definir manualmente o mesmo SL & TP para uma posição existente sem nenhum problema . . então adicionei um teste para colocar o SL & TP somente se a posição pudesse ser selecionada . . e não mais paradas inválidas, nem mais solicitação de comércio TRADE_ACTION_SLTP :-(

Então adicionei este código entre a conclusão do pedido comercial inicial enviado sem TP & SL e o pedido comercial subseqüente que envia o TP & SL . .

SetTPandSL é definido como verdadeiro se o pedido de negociação inicial for bem sucedido, não adianta tentar definir um TP & SL se não for. A posição é selecionada e se falhar um sono de 100 mS acontece, então a seleção é novamente testada, se falhar um sono de 200 mS acontece, etc. por até 9 tentativas (4,5 segs totais).

Ainda não sei realmente o que estou fazendo com o mql5, estou realmente apenas tentando fazer algumas coisas funcionarem e esperando aprender enquanto vou... é o que eu encontrei aqui um comportamento normal? Eu teria pensado que uma vez que o pedido comercial inicial retornasse 10009 - TRADE_RETCODE_DONE eu estaria OK para enviar o pedido para definir o TP & SL, não é este o caso ? alguém sabe ?

Qual função, classes/método você está usando para enviar/modificar seus pedidos?
Razão: