Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 80

 
ksbr:
Voglio mettere uno stock (futures) in MT5 per testare il mio, come?
non puoi. cerca una casa di intermediazione con i futures
 
sergeev:
Assolutamente no. cercate una casa di intermediazione con questi futures

%))) Non c'è nessun DC con questo fuchs))) Deve essere incollato insieme...

È un peccato, è un peccato, e tutto è iniziato così bene...

[Eliminato]  

Saluti a tutti!

Sto cercando di implementare due funzioni nel mio EA, la prima definisce il profitto dell'ultimo trade, la seconda definisce il lotto dell'ultimo trade.

Ho cercato in questo sito dalla A alla Z e ho fatto diverse funzioni, seguendo gli esempi negli articoli e altri EA, ma nessun risultato - entrambe le funzioni restituiscono sempre 0.00.

Qui mi sembra che sia la variante più vicina a quella corretta, ma il risultato è sempre 0:

double LossLastPos(){
// --- определение границ требуемой торговой истории
   datetime end=TimeCurrent();                 // текущее серверное время
   datetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад
//--- запросим в кэш программы торговую историю за день
   HistorySelect(start,end);
//--- получим количество ордеров в истории
   int history_orders=HistoryOrdersTotal();
//--- получим тикет ордера из истории, имеющего последний индекс в списке
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
   if(order_ticket>0) // получили в кэш исторический ордер, работаем с ним
     {
      //Получаем значение прибыли последнего ордера
      double  profit = HistoryDealGetDouble(order_ticket,DEAL_PROFIT);
      return(profit);
     }
}

Cerco di ottenere la dimensione del lotto nello stesso modo:

double  volume = HistoryDealGetDouble(order_ticket,DEAL_VOLUME);
      return(volume);

E non funziona niente, i valori sono sempre zero.

Io stesso ho appena iniziato la migrazione da mql4 a mql5. L'implementazione di tali funzioni in mql4 non era molto difficile, ma qui è un punto morto.

Per favore, consigliatemi una soluzione reale e funzionante.

 
karakos:

...

Per favore, suggerite una soluzione reale e funzionante.

Usa HistoryDealGetTicket() e HistoryDealsTotal().

E fare la convalida:

   if(HistorySelect(start,end))
     {
      // ...
     }
[Eliminato]  

tol64 grazie mille! Tutto funziona.

Ecco una soluzione funzionante al 100% - la funzione restituisce il profitto dell'ultima posizione chiusa nella storia del terminale:

//+------------------------------------------------------------------+       
//|Функция возвращает профит последней позиции                       |
//+------------------------------------------------------------------+
double ProfitLastPos()
  {
// --- определение границ требуемой торговой истории
   datetime end=TimeCurrent();                 // текущее серверное время
   datetime start=end-PeriodSeconds(PERIOD_D1);// установим начало на сутки назад
//--- запросим в кэш программы торговую историю за день
   if(HistorySelect(start,end))
     {
      //--- получим количество сделок в истории
      int history_orders=HistoryDealsTotal();
      //--- получим тикет сделки из истории, имеющей последний индекс в списке
      ulong order_ticket=HistoryDealGetTicket(history_orders-1);

      if(order_ticket>0) // получили в кэш историческую сделку, работаем с ней
        {
         profit=HistoryDealGetDouble(order_ticket,DEAL_PROFIT);
        }
     }
   return(profit);
  }

Per analogia otteniamo la dimensione del lotto dell'ultimo trade:

 Volume = HistoryDealGetDouble(order_ticket,DEAL_VOLUME);
 
karakos:

tol64 grazie mille! Funziona tutto.

...

E se premete anche Ctrl+ nell'editor, otterrete un codice ben formattato. Specialmente importante prima di caricare l'esempio sul forum (migliore leggibilità). ))
[Eliminato]  
tol64:
Se premete anche Ctrl+ nell'editor, otterrete un codice ben formattato. Questo è particolarmente importante prima di caricare l'esempio sul forum (migliore leggibilità). ))
Stilato il codice, grazie ancora!
 

Buongiorno, ho iniziato da poco a imparare MQL5. Ho un problema con la chiusura delle posizioni. Nel codice: if(!m_Trade.PositionClose(_Symbol,100))//--- chiudere la posizione per il simbolo corrente. Il risultato è che la posizione è invertita! Sarei molto grato per un suggerimento, come posso chiudere una posizione?

 
//_____________________________________________________________________________________________________________________________________________
//--------  блок работы с длинной позицией  ---------------------------------------------------------------------------------------------------
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
                          
         if( p_close1 <  buy_stop_level   )// если бар 1 закрылся ниже уровня стоп
         {
          if(!m_Trade.PositionClose(_Symbol,100))//--- закрываем позицию по текущему символу
         {
      //--- сообщим о неудаче
      Print("Метод PositionClose() потерпел неудачу. Код возврата=",m_Trade.ResultRetcode(),
            ". Описание кода: ",m_Trade.ResultRetcodeDescription());
         }
   else
         {
       Print("Метод PositionClose() выполнен успешно. Код возврата=",m_Trade.ResultRetcode(),
            " (",m_Trade.ResultRetcodeDescription(),")");       
          }
    
     
           }          
            }
 

Registro EA dopo che la barra ha chiuso sotto il livello di stop. Posizione lunga = 1 lotto, posizione corta = 1 lotto)