Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 475

 
alph:
Pode dizer-me, por favor, um tal testador de taxas na vida real? E é bom ou mau resultado para o ano com o depo 3000$?

Um testador de estratégia mente sempre, embora a qualidade da simulação seja de 99,9%!

A única opção para verificar o EA é colocá-lo num servidor VPN em tempo real numa conta de demonstração... Microsoft Azure dá quase um servidor gratuito durante um mês, é preciso $1 para o consultar no YouTube!...Existem outros serviços VPN, mas têm um máximo de 10 dias de utilização gratuita.

 

Rapazes! É possível proibir de forma programática o comércio manual numa EA?

 

Pode dizer-me por favor porque é que este bloco remove todas as ordens de paragem pendentes em qualquer símbolo colocado no terminal, ignorando a magia e o símbolo _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:

Pode dizer-me por favor porque é que este bloco remove todas as ordens de paragem pendentes em qualquer símbolo colocado no terminal, ignorando a magia e o símbolo _Symbol?

1. a ordem tem de ser seleccionada primeiro;

2. O laço deve ser construído a partir da última encomenda, isto é, para( i = encomendas-1; i >= 0; i-- )

 
Aleksandr Prishenko:

Pode dizer-me porque é que esta unidade apaga todas as ordens de paragem pendentes em qualquer símbolo colocado no terminal, ignorando a magia e o símbolo _Symbol?

Preciso de seleccionar as encomendas:

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

Rapazes! É possível proibir de forma programática o comércio manual numa EA?

Claro que não.
 
Karputov Vladimir:

Tem de escolher as suas encomendas:

A afirmação é correcta. A implementação não é correcta. Onde é que se consegue o bilhete para OrderSelect()?
 

Será isto a coisa certa a fazer?

Alexey Kozitsyn eKarputov Vladimir agradecem as dicas!

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--)
               { 
 

Escreveu acima: quando as ordens são eliminadas, o ciclo deve ser invertido. Quando uma ordem é eliminada, os índices das restantes ordens são deslocados.

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);  
}
 
A propósito, porque declara uma função como int se esta voltar a ser verdadeira na sua versão, e sempre? )