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

 
ksbr:
Quero colocar um stock (futuros) no MT5 para testar o meu, como?
não se pode. procurar uma corretora com os futuros
 
sergeev:
Nem pensar. procure uma corretora com este futuro

%))) Não há DC com estes fuchs)))) Tem de ser colado...

Que pena, que pena, tudo começou tão maravilhosamente...

 

Saudações a todos!

Estou a tentar implementar duas funções na minha EA, a primeira define o lucro da última troca, a segunda define muito da última troca.

Pesquisei neste site de A a Z e fiz várias funções, seguindo os exemplos em artigos e outros EAs, mas nenhum resultado - ambas as funções retornam sempre 0,00.

Aqui parece-me ser o mais próximo da variante correcta, mas o resultado é 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);
     }
}

Tento obter o tamanho do lote da mesma forma:

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

E nada funciona, os valores são sempre zero.

Eu próprio acabo de iniciar a migração de mql4 para mql5. A implementação de tais funções em mql4 não foi muito difícil, mas aqui está um impasse.

Por favor, aconselhem-me uma solução real e funcional.

 
karakos:

...

Por favor, sugira uma solução real e funcional.

Use HistoryDealGetTicket() e HistoryDealsTotal().

E fazer a validação:

   if(HistorySelect(start,end))
     {
      // ...
     }
 

tol64 muito obrigado! Tudo está a funcionar.

Aqui está uma solução 100% funcional - a função devolve o lucro da última posição fechada na história do terminal:

//+------------------------------------------------------------------+       
//|Функция возвращает профит последней позиции                       |
//+------------------------------------------------------------------+
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);
  }

Por analogia, obtemos o tamanho do lote do último comércio:

 Volume = HistoryDealGetDouble(order_ticket,DEAL_VOLUME);
 
karakos:

tol64 muito obrigado! Está tudo a funcionar.

...

E se também carregar em Ctrl+ no editor, receberá um código bem formatado. Especialmente importante antes de carregar o exemplo para o fórum (melhor legibilidade). ))
 
tol64:
Se também carregar em Ctrl+ no editor, receberá um código bem formatado. Isto é especialmente importante antes de carregar o exemplo para o fórum (melhor legibilidade). ))
Estilizei o código, mais uma vez obrigado!
 

Bom dia! Comecei recentemente a aprender MQL5. Tenho um problema com o fecho de posição. Em código: if(!m_Trade.PositionClose(_Symbol,100))//--- fechar posição pelo símbolo actual. O resultado é que a posição é invertida! Ficaria muito grato por uma dica, como posso fechar uma posição?

 
//_____________________________________________________________________________________________________________________________________________
//--------  блок работы с длинной позицией  ---------------------------------------------------------------------------------------------------
      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(),")");       
          }
    
     
           }          
            }
 

Registo da EA depois de a barra ter fechado abaixo do nível de paragem. Posição longa = 1 lote, posição curta = 1 lote)