Il che impedisce al consulente di fare soldi. - pagina 4

 
FAQ:

... per favore :

La maggior parte della metà delle variabili sia globali che locali non sono inizializzate - sono sicuro che contengono un sacco di spazzatura ad un certo punto.

Non si controlla mai se un ordine è selezionato da OrderSelect(), non stiamo nemmeno parlando di controllare se è aperto o chiuso.

Non ho notato nessun aggiornamento delle quotazioni prima delle funzioni di trading...

GetLastError non viene azzerato prima di aprire/chiudere, ma viene controllato - di nuovo, ci saranno casi di spazzatura nella variabile.

Non si controllano e normalizzano i prezzi alla chiusura

Vuoi continuare?

Vai avanti.

Molto utile.

 

Qui https://www.mql5.com/ru/forum/137651/page3 ho postato la mia funzione di chiusura

Sostituire GetInfo() con print, Fun_Error() = ErrorDescription()

 
FAQ:

Non si controlla mai se un ordine è selezionato da OrderSelect(),


Onestamente, non capisco bene cosa fare se viene restituito un valore - falso - quando viene selezionato un ordine.

Falso significa che è assente al 100% tra i MODE_TRADES?

Ho ridisegnato i codici di apertura degli ordini secondo le tue raccomandazioni, francamente parlando, non ho toccato la configurazione dell'Expert Advisor, quindi sono curioso di vedere... Si venderà o prenderà un altro profitto?

 
valenok2003:


Ad essere onesti, non capisco bene cosa fare se viene restituito false quando viene selezionato un ordine.

Falso significa la sua assenza al 100% tra i MODE_TRADES?


significa al 100% che non si può fare nulla con l'ordine perché non è selezionato.
 
PapaYozh:

significa al 100% che non si può fare nulla con esso [l'ordine] perché non è selezionato.



Giusto... Oh, cavolo... ma se non è selezionato, c'è un errore, vero? Bisogna fare qualcosa...

Per esempio, vedi questa funzione,

//+-------
//+------------------------------------------------------------------+
//|   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 l'ordine non è selezionato, dovrei restituire -1. E se non viene selezionato per qualche altra ragione - per esempio, un fallimento di qualche tipo, ma l'ordine è aperto, allora cosa devo fare?
 
valenok2003:


Giusto... Merda... Ma se non è selezionato, è un errore di qualche tipo, vero? Bisogna fare qualcosa...


Non può essere selezionato:

1) a causa di un bug nel codice dell'Expert Advisor;

2) è stato chiuso per circostanze fuori dal controllo dell'EA (SL/TP attivato, chiuso manualmente, chiuso dall'EA)

 
valenok2003:


Giusto... Oh, cavolo... ma se non è selezionato, c'è un errore, vero? Bisogna fare qualcosa...

Mi prendi in giro o fai sul serio?

Mettere in pausa e selezionare di nuovo. L'ho organizzato in questo modo, funziona online:

// ------------------------------------------------Ищем наш ордер---------------------------------
   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.:

Mi prendi in giro o fai sul serio?

Mettere in pausa e selezionare di nuovo. L'ho organizzato in questo modo, funziona online:

Ho completato il mio post lì.

Quante volte devi scegliere?

 
valenok2003:

Ho completato il mio post lì.

E quante volte scegliere?

PRIMA. Finché non viene selezionato in un ciclo:

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:


Non può essere selezionato:

1) a causa di un bug nel codice EA;

questo è abbastanza chiaro

2) è stato chiuso a causa di circostanze fuori dal controllo dell'EA (lo SL/TP è stato attivato, chiuso manualmente, chiuso dall'EA)

solo queste due ragioni o potrebbe esserci qualcos'altro?