O que impede o assessor de ganhar dinheiro. - página 4

 
FAQ:

... por favor :

A maioria das variáveis globais e locais não são inicializadas - tenho certeza de que elas contêm muitas porcarias em algum momento.

Você nunca verifica se um pedido é selecionado por OrderSelect(), não estamos nem mesmo falando em verificar se ele está aberto ou fechado.

Não notei nenhuma atualização de cotações antes das funções de negociação.

GetLastError não é zerado antes da abertura/fecho, mas é verificado - novamente, haverá casos de lixo na variável.

Você não verifica e normaliza os preços ao fechar

Você quer continuar?

Vá em frente.

Muito útil.

 

Aqui https://www.mql5.com/ru/forum/137651/page3 Eu afixei minha função de fechamento

Substituir GetInfo() por print, Fun_Error() = ErrorDescription()

 
FAQ:

Você nunca verifica se um pedido é selecionado por OrderSelect(),


Honestamente, não entendo bem o que fazer se um valor - falso - é devolvido quando um pedido é selecionado.

Falso significa que ele está 100% ausente entre os MODE_TRADES?

Eu redesenhei os códigos de abertura de ordem de acordo com suas recomendações, francamente falando, eu não toquei na configuração do Expert Advisor, então estou curioso para ver... Vai vender ou vai ter outro lucro?

 
valenok2003:


Para ser honesto, não entendo bem o que fazer se um pedido falso é devolvido quando um pedido é selecionado.

Falso significa sua ausência de 100% entre os MODE_TRADES?


significa 100% que nada pode ser feito com o pedido porque ele não é selecionado.
 
PapaYozh:

significa 100% que nada pode ser feito com ele [o pedido], pois não é selecionado.



Certo... Oh, cara... mas se não for selecionado, há um erro, não é mesmo? Algo tem que ser feito...

Por exemplo, veja esta função,

//+-------
//+------------------------------------------------------------------+
//|   valenok2003@mail.ru                                05.07.2011
//+------------------------------------------------------------------+
//| check_open_order() ПРОВЕРКА реального открытия рыночного ордера по тикету
//| Требует:
//| - тикет ордера 
//| Возвращает тикет открытого ордера или -1
//+------------------------------------------------------------------+
int check_open_order(int _Ticket)
{  string _Function = "check_open_order(): ";
//-----------------
   if(_Ticket > 0) {  
      OrderSelect(_Ticket,SELECT_BY_TICKET);             
      if(OrderType() <= 1) {  
         output_mov_string(order_type_in_txt(OrderType())+ " успешно открыт!", Clr_Report);
         output_sound(Name_Sound_Open);
         OrderPrint();
//-----------------         
         for(int _n = 0; _n < MAX_ORDERS; _n++)  {
            // Если место свободно
            if(Arr_Tickets[_n] == 0)   {
               // Создаём запись об ордере
               Arr_Tickets[_n] = OrderTicket();
               break;
            }
         }
      }
      else _Ticket = -1;
   }
//-----------------
   return(_Ticket);
}
//+-------------------------------------------------------------------
//+-------
Se o pedido não for selecionado, eu devo retornar -1. E se não for selecionado por qualquer outro motivo - por exemplo, uma falha de algum tipo, mas a ordem está aberta, então o que devo fazer?
 
valenok2003:


Certo... Oh, cara... Mas se não for selecionado, é um erro de algum tipo, não é? Algo tem que ser feito...


Não pode ser selecionado:

1) por causa de bugs no código do Expert Advisor;

2) foi fechado devido a circunstâncias fora do controle da EA (acionou SL/TP, fechado manualmente, fechado pela EA)

 
valenok2003:


Certo... Oh, cara... mas se não for selecionado, há um erro, não é mesmo? Algo tem que ser feito...

Você está brincando comigo ou está falando sério?

Pausa e selecione novamente. Tenho-o organizado dessa forma, funciona on-line:

// ------------------------------------------------Ищем наш ордер---------------------------------
   int orderType;
   for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
   {
      if (!OrderSelect(orderIndex, SELECT_BY_POS))     continue;
      if ((OrderSymbol() != Symbol()) || (OrderMagicNumber() != MagicNumber)) continue;
      orderType = OrderType();
      if ((orderType != OP_BUY) && (orderType != OP_SELL)) continue;
          ticket = OrderTicket( );                         // Номер ордера
          orderLots = OrderLots();                         // Lots   
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenPrice();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера          
          if (ticket>0)                                    // Если позиция открылась
              {
                while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                Sleep(100);                                 
                double OpenPrice=OrderOpenPrice();
       // Print("OrderTicket()=",OrderTicket(),  "OrderOpenTime()=",OrderOpenTime()); 
       // Print("TimeLocal()=",TimeLocal());                                                                    
                     //---------------------Запоминаем значения сл и тп ордера   
...
...
...
                  
 
Roman.:

Você está brincando comigo ou está falando sério?

Pausa e selecione novamente. Tenho-o organizado desta forma, funciona online:

Eu complementei meu posto lá.

Quantas vezes eu tenho que escolher?

 
valenok2003:

Eu complementei meu posto lá.

E quantas vezes escolher?

ANTES. Até ser selecionado em um loop:

if (ticket>0)                                    // Если позиция открылась
              {
                while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                Sleep(100);                                 
                double OpenPrice=OrderOpenPrice();
       // Print("OrderTicket()=",OrderTicket(),  "OrderOpenTime()=",OrderOpenTime()); 
       // Print("TimeLocal()=",TimeLocal());                                                                    
                     //---------------------Запоминаем значения сл и тп ордера                     
                if (orderType == OP_BUY) 
                   {                
                     
                   }
            
                if (orderType == OP_SELL) 
                   {        
                   
                   }   
                            
              }
 
PapaYozh:


Não pode ser selecionado:

1) Por causa de um bug no código EA;

isto é bastante claro

2) foi fechado devido a circunstâncias fora do controle da EA (o SL/TP foi acionado, fechado manualmente, fechado pela EA)

apenas estas duas razões ou poderia haver algo mais?
Razão: