Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 726

 
Igor Petrov:

Muito obrigado!!!

Você poderia me dizer se isto (CHARTEVENT_CLICK) pode ser usado ao testar um EA?
 
Yuriy Vins:
Por favor me diga se isto (CHARTEVENT_CLICK) pode ser usado ao testar um EA?

Infelizmente, não.

 
ukrop1203:

Eu baixei os dados da MetaQuotes Software Corp no menu "History Center", o que os dados do corretor têm a ver com isso?

Quem fez o download do terminal, é de onde os dados são puxados para o MT4. E mais precisamente, e muito provavelmente - cuja conta você está logado no momento do download, puxa a história de lá.

 
Vladimir Baskakov:
O que você está dizendo?

Que pessoas como você devem ser despojadas de seu status de vendedor. Vá ser um aprendiz de higienista.

 
Andrei Novichkov:

Que pessoas como você devem ser despojadas de seu status de vendedor. Vá ser um aprendiz de higienista.

Tenha um bom dia.
 

Olá a todos,

Coloquei um botão de fechamento de pedidos no EA, mas ele fecha todos os pedidos no terminal. Eu só preciso dele no gráfico atual. Você pode, por favor, ajudar?

//----------------------------------------------------------------------
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:

Olá a todos,

Coloquei um botão de fechamento de pedidos no EA, mas ele fecha todos os pedidos no terminal. Eu só preciso dele no gráfico atual. Você pode, por favor, ajudar?

Substituir a função de fechamento

//+------------------------------------------------------------------+
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:

Substituir a função de fechamento

Está funcionando. Muito obrigado.

 
Além disso, queria acrescentar uma função multiplicadora para a etapa com cada comércio. Alguma dica?
 
Carcass77:
Além disso, queria acrescentar uma função multiplicadora para a etapa com cada comércio. Alguma dica?

Se é uma questão de aumentar o tamanho do lote de um novo pedido em relação ao tamanho máximo do lote de pedidos já abertos, então ao contar os pedidos, lembre-se do tamanho máximo do lote de pedidos

assim:

//_______________________________________________________________________
//возвращает суммарное кол-во открытых рыночных ордеров, в переменных
// 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_);
  }
//+------------------------------------------------------------------+
Razão: