Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 475

 
alph:
¿Puede decirme, por favor, que tal probador de tarifas en la vida real? ¿Y es un buen o mal resultado para el año con depo 3000$?

Un probador de estrategias siempre miente, ¡aunque la calidad de la simulación sea del 99,9%!

La única opción para comprobar el EA es ponerlo en un servidor VPN en tiempo real en una cuenta demo... Microsoft Azure da casi un servidor gratis durante un mes, ¡necesitas 1$ para buscarlo en YouTube!...Hay otros servicios VPN, pero tienen 10 días máximo de uso gratuito.

 

¡Chicos! ¿Es posible prohibir programáticamente el comercio manual en un EA?

 

¿Pueden decirme por qué este bloque elimina todas las órdenes stop pendientes sobre cualquier símbolo establecido en el terminal, ignorando la magia y el _Symbol?

//--------------------------------------------------------------------------------------------------------------
//       Блок удаления отложенников по типу ордера
//--------------------------------------------------------------------------------------------------------------
int dell_ord_by_type(int type_ord, int _magic)
{   
   bool ticketmdf;
   int j;
  
   int orders=OrdersTotal();
   for(int i=0;i<orders;i++)//--- пробежим по списку ордеров
   {     
         if( OrderGetString(ORDER_SYMBOL) ==Symbol() && OrderGetInteger(ORDER_MAGIC)==_magic && OrderGetInteger(ORDER_TYPE) ==type_ord)   
         {  
            if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP || OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_STOP)
            {       
               for(j=Appempts; j>0; j--) 
               { 
               //----------------------------------------------------------------------
               MqlTradeResult result={0}; 
            MqlTradeRequest request={0};
            request.order=OrderGetTicket(i);
            request.symbol = _Symbol;
            request.magic = _magic;
            request.action=TRADE_ACTION_REMOVE;
            ticketmdf=OrderSend(request,result);
            
                  if(ticketmdf==true)
                  {
                     Print("Успешно удалён ордер");
                     Sleep(2000);
                     break;                    
                  }
                  if(ticketmdf==false)                     
                  {
                     Print("Ошибка при удалении ордера # ",+GetLastError());
                     Sleep(7000);
                  }
               }                            
            }                       
         }                        
   }
   return(true);  
}
 
Aleksandr Prishenko:

¿Pueden decirme por qué este bloque elimina todas las órdenes stop pendientes sobre cualquier símbolo establecido en el terminal, ignorando la magia y el _Symbol?

1. el orden tiene que ser seleccionado primero;

2. El bucle debe construirse a partir del último pedido, es decir, for( i = pedidos-1; i >= 0; i-- )

 
Aleksandr Prishenko:

¿Pueden decirme por qué esta unidad borra todas las órdenes stop pendientes sobre cualquier símbolo establecido en el terminal, ignorando la magia y el _Symbol?

Necesito seleccionar los pedidos:

...
   int orders=OrdersTotal();
   for(int i=0;i<orders;i++)//--- пробежим по списку ордеров
     {
      if(OrderSelect(ххх,ххх,хххх)==true)
        {
         if(OrderGetString(ORDER_SYMBOL)==Symbol() && OrderGetInteger(ORDER_MAGIC)==_magic && OrderGetInteger(ORDER_TYPE)==type_ord)
           {
...
 
Vladimir Tkach:

¡Chicos! ¿Es posible prohibir programáticamente el comercio manual en un EA?

Por supuesto que no.
 
Karputov Vladimir:

Tienes que elegir tus pedidos:

La afirmación es correcta. La aplicación no es correcta. ¿De dónde sacas la entrada para OrderSelect()?
 

¿Es esto lo correcto?

Alexey Kozitsyn yKarputov Vladimir, ¡gracias por los consejos!

int dell_ord_by_type(int type_ord, int _magic)
{   
   bool ticketmdf;
   int j;
 int orders=OrdersTotal();
   for(int i=0;i<orders;i++)//--- пробежим по списку ордеров
   { 
   ResetLastError();    
  ulong ticket=OrderGetTicket(i);
      if(ticket!=0)// если ордер успешно скопирован в кэш, работаем с ним  

      {      
         if( OrderGetString(ORDER_SYMBOL) ==_Symbol && OrderGetInteger(ORDER_MAGIC)==_magic && OrderGetInteger(ORDER_TYPE) ==type_ord)   
         {  
            if(OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_BUY_STOP || OrderGetInteger(ORDER_TYPE)==ORDER_TYPE_SELL_STOP)
            {       
               for(j=Appempts; j>0; j--)
               { 
 

Usted ha escrito más arriba: cuando se eliminan los pedidos, el ciclo debería invertirse. Cuando se elimina una orden, los índices de las órdenes restantes se desplazan.

int dell_ord_by_type(int type_ord, int _magic)
{
   ulong nOrderTicket = 0;
   
   for(int i = OrdersTotal() - 1; i >= 0; i--)   //--- пробежим по списку ордеров
   {
      nOrderTicket = OrderGetTicket(i);
        
      if(nOrderTicket > 0 && OrderGetString(ORDER_SYMBOL) == Symbol() && OrderGetInteger(ORDER_MAGIC) == _magic && OrderGetInteger(ORDER_TYPE) == type_ord)   
      {  
         if(OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_BUY_STOP || OrderGetInteger(ORDER_TYPE) == ORDER_TYPE_SELL_STOP)
         {       
            // удаляем
         }
      }
   }
        
   return(0);  
}
 
Por cierto, ¿por qué declaras una función como int si devuelve true en tu versión, y siempre? )
Razón de la queja: