Скачать MetaTrader 5

Как сделать доступ к истории без тикета (по индексу)?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Подключи MQL5 Cloud Network. Начни зарабатывать!
Forex Trader
114257
Forex Trader 2006.05.30 18:57 
Добрый всем вечер!

Помогите, кто знает, советом.

Есть такая функция в эксперте:
double aLastProfit()
	{
	int OrderTime = 0;
	double Profit = 0;
	for (int i = 0; i < OrdersTotal(); i ++)
		if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
			if (OrderCloseTime() > OrderTime)
				{
				OrderTime = OrderCloseTime();
				Profit = OrderProfit();
				}
	return(Profit);
	}


Смысл её в том, чтобы получить значение прибыли у последнего закрытого ордера. Но она всегда выдаёт ноль. Почему? Включает ли OrdersTotal() закрытые и удалённые ордера? Как добраться до закрытого ордера по номеру индекса?

Заранее благодарю за помощь!

Forex Trader
114257
Forex Trader 2006.05.30 20:02  
Уважаемый Sergo ф-ия "OrdersTotal()" возвращает общее количество открытых и отложенных ордеров, а Вам нужна HistoryTotal() с параметром "MODE_HISTORY". Будьте внимательны.
P.S. потому-то и возвращает 0, что у всех открытых и отложенных ордеров время закрытия пока еще отсутствует и условие "OrderCloseTime() > OrderTime" не выполняется.
Forex Trader
114257
Forex Trader 2006.05.30 20:29  
Посмотрите в справке bool OrderSelect() в части использования параметра MODE_HISTORY.
Forex Trader
114257
Forex Trader 2006.05.30 23:20  
Огромное спасибо всем за подсказку!

Просто ни разу не пользовалься функцией HistoryTotal(). Оказывается, это аналог OrdersTotal(), только для закрытых и удалённых ордеров. Теперь всё понятно. А я пытался сохранять у каждого ордера уникальный тикет. Ещё пробовал следить за изменениями AccountBalance(). Это всё муторно и ненадёжно.

В вышеупомянутой функции всего лишь нужно заменить вызов OrdersTotal() на HistoryTotal(). Только и всего.

Ещё раз спасибо!
Forex Trader
114257
Forex Trader 2006.05.31 01:37  
В вышеупомянутой функции всего лишь нужно заменить вызов OrdersTotal() на HistoryTotal(). Только и всего.

Не только.
Forex Trader
114257
Forex Trader 2006.05.31 08:43  
Не только.

Поясните, пожалуйста. Что ещё нужно изменить, кроме замены функции?
Forex Trader
114257
Forex Trader 2006.05.31 11:03  
OrderType()
Forex Trader
114257
Forex Trader 2006.05.31 12:12  
OrderType()

Не согласен.

Дело в том, что, по моему разумению, прибыль удалённого отложенного ордера равна нулю. А именно это мне и нужно. Мне не надо проверять тип ордера в истории. Нужен именно профит последнего ордера. Независимо от его типа. Так уж устроен эксперт, такая у него логика.

В вышеупомянутом примере просто заменил OrdersTotal() на HistoryTotal(), и всё заработало как надо. Прогонял тесты на истории, потом водил пальцем по результатам тестирования. Проверял, отрабатывает ли эксперт именно мою задумку. Всё ок!

Спасибо за помощь!
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий