Добрый день!!! Пожалуйста подскажите на примере кода как закрыть ордер в mql5???
К примеру у нас открыто 7 ордеров. Из них 3 на продажу.
Как выбрать с общей массы этих 3 ордера и закрыть их?
Странно, но именно на эту тему в инете мало информации... ооочень мало...
Спасибо большое за помощь!!!
Не ордер, а ПОЗИЦИЮ. Список позиций в терминале можно получить: PositionsTotal
А дальше проходите по всему списку ПОЗИЦИЙ и, в зависимости от из показателей, делаете с ними что угодно. Получение данных позиции можно посмотреть на примере PositionGetInteger:
//+------------------------------------------------------------------+ //| Trade function | //+------------------------------------------------------------------+ void OnTrade() { //--- проверим наличие позиции и выведем время её изменения if(PositionSelect(_Symbol)) { //--- получим идентификатор позиции для дальнейшей работы с ней ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER); Print(_Symbol," postion #",position_ID); //--- получим время образования позиции в миллисекундах с 01.01.1970 long create_time_msc=PositionGetInteger(POSITION_TIME_MSC); PrintFormat("Position #%d POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID, create_time_msc,TimeToString(create_time_msc/1000)); //--- получим время последнего изменения позиции в секундах с 01.01.1970 long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE); PrintFormat("Position #%d POSITION_TIME_UPDATE = %i64 seconds => %s", position_ID,update_time_sec,TimeToString(update_time_sec)); //--- получим время последнего изменения позиции в миллисекундах с 01.01.1970 long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC); PrintFormat("Position #%d POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s", position_ID,update_time_msc,TimeToString(update_time_msc/1000)); } //--- }
Закрывать позицию можно с помощью класса CTrade: PositionClose.
Не ордер, а ПОЗИЦИЮ. Список позиций в терминале можно получить: PositionsTotal
А дальше проходите по всему списку ПОЗИЦИЙ и, в зависимости от из показателей, делаете с ними что угодно. Получение данных позиции можно посмотреть на примере PositionGetInteger:
Закрывать позицию можно с помощью класса CTrade: PositionClose.
А как перебрать все позиции? В mql4 было бы сто то типа:
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS);
}
А в mql5 в цикле чем заменить функцию OrderSelect() ...? Или PositionSelect это оно и есть?
А как перебрать все позиции? В mql4 было бы сто то типа:
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS);
}
А в mql5 в цикле чем заменить функцию OrderSelect() ...? Или PositionSelect это оно и есть?
Все позиции в MQL5 можно перебрать так:
string symbol=""; double volume=0; long ticket=0; for(int i=0;i<PositionsTotal();i++) { symbol=PositionGetSymbol(i); volume=PositionGetDouble(POSITION_VOLUME); ticket=PositionGetInteger(POSITION_TICKET); }
подскажите пожалуста а как закрыть все открытые позиции
Пример из эксперта Autotrade:
Подключение торговых классов стандартной библиотеки и объявление объектов этих торговых классов
//+------------------------------------------------------------------+ //| Autotrade(barabashkakvn's edition).mq5 | //| Copyright © 2006, MetaQuotes Software Corp. | //| https://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, народное :-)" #property link "scrivimi@mail.ru" #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\OrderInfo.mqh> CPositionInfo m_position; // trade position object CTrade m_trade; // trading object CSymbolInfo m_symbol; // symbol info object COrderInfo m_order; // pending orders object
Функция реализующая закрытие всех ПОЗИЦИЙ (не ордеров, а именно позиций)
//+------------------------------------------------------------------+ //| Закрываем все позиции по текущему символу и с текущим Magic | //+------------------------------------------------------------------+ void CloseAllPositions() { Print(__FUNCTION__); for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions if(m_position.SelectByIndex(i)) if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic) m_trade.PositionClose(m_position.Ticket()); return; }
ds
Прошу помощи! Как перебрать финансовый результат закрытых позиций?
- www.metatrader5.com
Позиция может состоять из более чем двух сделок. Поэтому сначала нужно на базе торговой истории восстановить позиции (скалькулировать сделки относящиеся к одной позиции), потом можно получать уже результат.
Реализовано в коде: HistoryPositionInfo version 2 (запрос истории от ... до ...):
Класс CHistoryPositionInfo предназначен для получения прибыли позиции в пунктах, комиссии, свопа и прибыли в деньгах на основании торговой истории.
Там же и пример применения.
Forum on trading, automated trading systems and testing trading strategies
fxsaber, 2017.08.26 19:16
- MQL5
double Profit( void ) { double Res = 0; if (HistorySelect(0, INT_MAX)) for (int i = HistoryDealsTotal() - 1; i >= 0; i--) { const ulong Ticket = HistoryDealGetTicket(i); if((HistoryDealGetInteger(Ticket, DEAL_MAGIC) == MagicNumber) && (HistoryDealGetString(Ticket, DEAL_SYMBOL) == Symbol())) Res += HistoryDealGetDouble(Ticket, DEAL_PROFIT); } return(Res); }
- MQL5 + MQL4
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 double Profit( void ) { double Res = 0; for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderMagicNumber() == MagicNumber) && (OrderSymbol() == Symbol())) Res += OrderProfit(); return(Res); }
Позиция может состоять из более чем двух сделок. Поэтому сначала нужно на базе торговой истории восстановить позиции (скалькулировать сделки относящиеся к одной позиции), потом можно получать уже результат.
Реализовано в коде: HistoryPositionInfo version 2 (запрос истории от ... до ...):
Класс CHistoryPositionInfo предназначен для получения прибыли позиции в пунктах, комиссии, свопа и прибыли в деньгах на основании торговой истории.
Там же и пример применения.
Спасибо за ответ!
Верно, в позиции может быть много сделок, которые открыты ордерами. Мне вот надо найти к какой позиции относится ордер с определенным комментарием, и считать фин результат по сделкам с этой позиции включительно, как это можно реализовать?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!!! Пожалуйста подскажите на примере кода как закрыть ордер в mql5???
К примеру у нас открыто 7 ордеров. Из них 3 на продажу.
Как выбрать с общей массы этих 3 ордера и закрыть их?
Странно, но именно на эту тему в инете мало информации... ооочень мало...
Спасибо большое за помощь!!!