Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 80

 
ksbr:
хочу засунуть в МТ5 акцию (фьючерс), чтобы тестить своё, как?
никак. ищите ДЦ с этим фьючем
 
sergeev:
никак. ищите ДЦ с этим фьючем

%))) Нету ДЦ с этим фьючем))) Его же надо склеивать...

Жалко, жалко, а так красиво всё начиналось... 

 

Приветствую всех!

Люди помогите, уже несколько дней пытаюсь реализовать в советнике две функции: первая определяет профит последней сделки, вторая определяет лот последней сделки.

Данный сайт перерыл от и до, сделал несколько функций следуя примерам в статьях и в других советниках, но результата нет - обе функции всегда выдают значение 0.00. 

Вот, как мне кажется, самый близкий  к правильному вариант, но результат всегда 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);
     }
}

 Таким же образом пытаюсь получить размер лота:

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

 И ничего не получается, значения всегда нулевые.

Сам, я, только перехожу с mql4 на mql5 и на mql4 реализация таких функций не представляла никакой сложности, а тут на тебе - тупик. 

Подскажите пожалуйста реальное, рабочее решение. 

 
karakos:

...

Подскажите пожалуйста реальное, рабочее решение. 

Используйте HistoryDealGetTicket() и HistoryDealsTotal().

И проверку делайте:

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

tol64 огромное спасибо! Всё заработало.

Выкладываю 100% рабочее решение - функция возвращает размер профита последней закрытой позиции в истории терминала:

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

 

 По аналогии получаем размер лота последней сделки:

 Volume = HistoryDealGetDouble(order_ticket,DEAL_VOLUME);
 
karakos:

tol64 огромное спасибо! Всё заработало.

...

А если ещё в редакторе нажать Ctrl+, (англ.раскл.), то будете получать аккуратно отформатированный код. Особенно важно перед тем, как на форум пример загружать (лучше читаемость). ))
 
tol64:
А если ещё в редакторе нажать Ctrl+, (англ.раскл.), то будете получать аккуратно отформатированный код. Особенно важно перед тем, как на форум пример загружать (лучше читаемость). ))
Код стилизировал, еще раз спасибо!
 

Доброго времени суток! Недавно начал грызть MQL5. У меня возникла проблема с закрытием позиции. Я пишу в коде: if(!m_Trade.PositionClose(_Symbol,100))//--- закрываем позицию по текущему символу. Результат - позиция переворачивается! Буду очень благодарен за подсказку, как же мне закрыть позицию?

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

журнал эксперта после того, как бар закрылся ниже уровня стопа. Была длинная позиция = 1 лот, стала короткая =1 лот)

Причина обращения: