Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114296
Forex Trader  
Добрый всем вечер!

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

Есть такая функция в эксперте:
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
114296
Forex Trader  
Уважаемый Sergo ф-ия "OrdersTotal()" возвращает общее количество открытых и отложенных ордеров, а Вам нужна HistoryTotal() с параметром "MODE_HISTORY". Будьте внимательны.
P.S. потому-то и возвращает 0, что у всех открытых и отложенных ордеров время закрытия пока еще отсутствует и условие "OrderCloseTime() > OrderTime" не выполняется.
Forex Trader
114296
Forex Trader  
Посмотрите в справке bool OrderSelect() в части использования параметра MODE_HISTORY.
Forex Trader
114296
Forex Trader  
Огромное спасибо всем за подсказку!

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

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

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

Не только.
Forex Trader
114296
Forex Trader  
Не только.

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

Не согласен.

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

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

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