Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 726

 
Igor Petrov:

¡¡¡Muchas gracias!!!

¿Podría decirme si esto (CHARTEVENT_CLICK) se puede utilizar al probar un EA?
 
Yuriy Vins:
Por favor, dígame si esto (CHARTEVENT_CLICK) se puede utilizar al probar un EA?

Por desgracia, no.

 
ukrop1203:

He descargado los datos de MetaQuotes Software Corp en el menú "History Center", ¿qué tienen que ver los datos del broker?

De quién se ha descargado el terminal, de ahí se sacan los datos en MT4. Y más precisamente, y lo más probable - cuya cuenta está conectado en el momento de la descarga, se tira de la historia de allí.

 
Vladimir Baskakov:
¿Qué estás diciendo?

Que la gente como tú debería ser despojada de su condición de vendedor. Ve a ser aprendiz de sanidad.

 
Andrei Novichkov:

Que la gente como tú debería ser despojada de su condición de vendedor. Ve a ser aprendiz de sanitario.

Que tenga un buen día.
 

Hola a todos,

Puse un botón de cierre de órdenes en el EA, pero cierra todas las órdenes en la terminal. Sólo lo necesito en el gráfico actual. ¿Puede ayudar, por favor?

//----------------------------------------------------------------------
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---            
   if(sparam== "CloseButton")
      {
      CloseAllOpenPositions(MaxSlippage); 
      ObjectSetInteger(0,"CloseButton",OBJPROP_STATE,false);    
      }   
      if(sparam== "CloseBuy")
      {
      CloseAllBuy(MaxSlippage); 
      ObjectSetInteger(0,"CloseBuy",OBJPROP_STATE,false);    
      }         
         if(sparam== "CloseSell")
      {
      CloseAllSell(MaxSlippage); 
      ObjectSetInteger(0,"CloseSell",OBJPROP_STATE,false);    
      }         
//---      
  }
  
//+------------------------------------------------------------------+
void CloseAllOpenPositions(int intMaxSlippage)
  {
   bool checkOrderClose = true;        
   int index = OrdersTotal()-1;   
   while (index >=0 && OrderSelect (index,SELECT_BY_POS,MODE_TRADES)==true)
      {
         
      if (OrderType()==OP_BUY || OrderType()==OP_SELL)
         {         
         checkOrderClose = OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), MaxSlippage, CLR_NONE); 
         
         if(checkOrderClose == false)
            {
            int errorCode = GetLastError();
            
            if (errorCode == 1 || errorCode == 2 || errorCode == 5 || errorCode == 6 || errorCode == 64 || errorCode == 65 || errorCode == 132 || errorCode == 133 || errorCode == 139) break;
            else continue;        
            }          
         }           
      index--;
     }     
  }
  //----------------------------------------------------------------------------
 
Carcass77:

Hola a todos,

Puse un botón de cierre de órdenes en el EA, pero cierra todas las órdenes en la terminal. Sólo lo necesito en el gráfico actual. ¿Puede ayudar, por favor?

Sustituir la función de cierre

//+------------------------------------------------------------------+
void CloseAllOpenPositions(int intMaxSlippage)
  {
   bool checkOrderClose=true;
   int index=OrdersTotal()-1;
   while(index>=0 && OrderSelect(index,SELECT_BY_POS,MODE_TRADES)==true)
     {
      if(OrderSymbol()==Symbol())   //Добавил  
        {

         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            checkOrderClose=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),intMaxSlippage,CLR_NONE);

            if(checkOrderClose==false)
              {
               int errorCode=GetLastError();

               if(errorCode==1 || errorCode==2 || errorCode==5 || errorCode==6 || errorCode==64 || errorCode==65 || errorCode==132 || 
                errorCode==133||errorCode==139) break;
               else continue;
              }
           }

        }
      index--;
     }
  }
//+------------------------------------------------------------------+
 
Alekseu Fedotov:

Sustituir la función de cierre

Está funcionando. Muchas gracias.

 
Además, quería añadir una función multiplicadora para el paso con cada comercio. ¿Algún consejo?
 
Carcass77:
Además, quería añadir una función multiplicadora para el paso con cada comercio. ¿Algún consejo?

Si se trata de aumentar el tamaño del lote de una nueva orden en relación con el tamaño máximo del lote de las órdenes ya abiertas, al contar las órdenes, recuerde el tamaño máximo del lote de las órdenes

así:

//_______________________________________________________________________
//возвращает суммарное кол-во открытых рыночных ордеров, в переменных
// lotmaxbuy_ и lotmaxsell_ вернет максимальные лоты по типам ордеров
int NumberOfOrders(int magic_,double &lotmaxbuy_,double &lotmaxsell_)
  {
   int i,ot,buy_=0,sell_=0,k=OrdersTotal();
   lotmaxbuy_=0.0; lotmaxsell_=0.0;
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         ot=OrderType();
         if((OrderMagicNumber()==magic_) && (OrderSymbol()==_Symbol))
           {
            if(ot==OP_BUY) { buy_++;  lotmaxbuy_  = fmax(lotmaxbuy_,OrderLots());  }
            if(ot==OP_SELL){ sell_++; lotmaxsell_ = fmax(lotmaxsell_,OrderLots()); }
           }
        }
     }
   return(buy_+sell_);
  }
//+------------------------------------------------------------------+