Люди помогите, уже несколько дней пытаюсь реализовать в советнике две функции: первая определяет профит последней сделки, вторая определяет лот последней сделки.
Данный сайт перерыл от и до, сделал несколько функций следуя примерам в статьях и в других советниках, но результата нет - обе функции всегда выдают значение 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);
}
}
Выкладываю 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);
}
По аналогии получаем размер лота последней сделки:
А если ещё в редакторе нажать 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(),")");
}
}
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
хочу засунуть в МТ5 акцию (фьючерс), чтобы тестить своё, как?
никак. ищите ДЦ с этим фьючем
%))) Нету ДЦ с этим фьючем))) Его же надо склеивать...
Жалко, жалко, а так красиво всё начиналось...
Приветствую всех!
Люди помогите, уже несколько дней пытаюсь реализовать в советнике две функции: первая определяет профит последней сделки, вторая определяет лот последней сделки.
Данный сайт перерыл от и до, сделал несколько функций следуя примерам в статьях и в других советниках, но результата нет - обе функции всегда выдают значение 0.00.
Вот, как мне кажется, самый близкий к правильному вариант, но результат всегда 0:
Таким же образом пытаюсь получить размер лота:
И ничего не получается, значения всегда нулевые.
Сам, я, только перехожу с mql4 на mql5 и на mql4 реализация таких функций не представляла никакой сложности, а тут на тебе - тупик.
Подскажите пожалуйста реальное, рабочее решение.
...
Подскажите пожалуйста реальное, рабочее решение.
Используйте HistoryDealGetTicket() и HistoryDealsTotal().
И проверку делайте:
tol64 огромное спасибо! Всё заработало.
Выкладываю 100% рабочее решение - функция возвращает размер профита последней закрытой позиции в истории терминала:
По аналогии получаем размер лота последней сделки:
tol64 огромное спасибо! Всё заработало.
...
А если ещё в редакторе нажать Ctrl+, (англ.раскл.), то будете получать аккуратно отформатированный код. Особенно важно перед тем, как на форум пример загружать (лучше читаемость). ))
Доброго времени суток! Недавно начал грызть MQL5. У меня возникла проблема с закрытием позиции. Я пишу в коде: if(!m_Trade.PositionClose(_Symbol,100))//--- закрываем позицию по текущему символу. Результат - позиция переворачивается! Буду очень благодарен за подсказку, как же мне закрыть позицию?
журнал эксперта после того, как бар закрылся ниже уровня стопа. Была длинная позиция = 1 лот, стала короткая =1 лот)