Скачать MetaTrader 5

Поговорим о функции OrderSelect

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Поделись своими разработками. Это увеличит твой рейтинг.
Forex Trader
114255
Forex Trader 2005.11.02 22:40 
Здравствуйте уважаемые форумяне и разрабитчики МТ4!!!

Научите пожалуйста правильно пользоваться функцией OrderSelect!
Прошу дать пояснения к вопросом по ходу встроенной справки!

bool OrderSelect( int index, int select, int pool=MODE_TRADES)

Selects order by index or ticket to further processing. If the function fails, the return value will be false. To get the extended error information, call GetLastError().

Parameters

index - Order index or order ticket depending from second parameter.
select - Selecting flags. It can be any of the following values:
SELECT_BY_POS - index in the order pool,
-------- что такое order pool ?

SELECT_BY_TICKET - index is order ticket.

--------Order ticket - что такое Order ticket ?


pool - Optional order pool index. Used when select parameter is SELECT_BY_POS.It can be any of the following values:
MODE_TRADES (default)- order selected from trading pool(opened and pending orders),
MODE_HISTORY - order selected from history pool (closed and canceled order).

Т.е. я хотел бы узнать, что это за величины, т.к. чтобы произвести какие либо действия с ордером- нужно указать его тикет, а для этого нужно его из чего то выбрать.

Буду очень признателен всем, кто ответит!

Да прибудет с Вами PROFIT!!!
Forex Trader
114255
Forex Trader 2005.11.03 01:49  
Order ticket - № ордера, который виден на закладке "Торговля" и на закладке "История Счёта"
order pool - порядковый номер ордера в этих же закладках. Если выбрать OrderSelect( №№, SELECT_BY_POS, MODE_TRADES ), ордер с порядковым номером №№ выберется из открытых позиций (и установленных ордеров). Если выбрать OrderSelect( №№, SELECT_BY_POS, MODE_HISTORY ), выберется уже закрытый ордер с номером №№. Примечание - отсчёт начинается с 0. Т.е. первый ордер идёт под номером 0, второй под номером 1 и т.д.
пример использования:
	int _GetLastError;

	int _OrdersTotal = OrdersTotal();
	for ( int z = _OrdersTotal - 1; z >= 0; z -- )
	{
		if ( !OrderSelect( z, SELECT_BY_POS ) )
		{
			_GetLastError = GetLastError();
			Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError, " ( ", ErrorDescription( _GetLastError ), " )" );
			continue;
		}
		if ( OrderMagicNumber() == _MagicNumber && OrderSymbol() == TradeInfoLib_Symbol )
		{
// тут производим какие-то действия с выбранным ордером, если его символ соответствует символу графика и 
MagicNumber соответствует заранее определённому _MagicNumber


пример 2:

	int Send_Result = OrderSend ( Send_Symbol, Send_OrderType, Send_Volume, Send_OpenPrice, Send_Slippage, Send_StopLoss, Send_TakeProfit, Send_Comment, Send_MagicNumber, Send_Expiration, Send_Color );
//---- проверяем - действительно ли открылась позиция и, если нет, выводим информацию и выходим, возвращая -4.
	for ( int x = 0; x < 5; x ++ )
	{
		Sleep(1000);
		if ( OrderSelect( Send_Result, SELECT_BY_TICKET ) ) { break; }
		Send_GetLastError = GetLastError();
		if ( Send_GetLastError != 0 ) { Print ( 1, "OrderSelect( " + Send_Result + ", SELECT_BY_TICKET )", "Error #" + Send_GetLastError + " ( " + ErrorDescription( Send_GetLastError ) + " )" ); continue; }
		Print ( "Ордер не был установлен/Позиция не была открыта" );
		return(-4);
	}


Обращаю внимание, что надо делать ОБЯЗАТЕЛЬНУЮ проверку результата ордерселект. Т.е. проверять GetLastError() после вызова ф-ции.

Forex Trader
114255
Forex Trader 2005.11.03 07:26  
Огромное спасибо!

Т.е. чтобы выбрать последний закрытый ордер например на проверку был ли он с профитом или с лоссом, нужно выбрать его по позиции из истории ( OrderSelect( HistoryTotal(), SELECT_BY_POS, MODE_HISTORY) )?
Верно? А потом с помомощью функции OrderTicket() определить его тикет - другого пути указать тикет ордера я пока не придумал. Если вы знаете - буду очень рад поучиться.

Еще раз спасибо за толкование!
MetaQuotes Software Corp.
Модератор
181164
MetaQuotes Software Corp. 2005.11.03 11:04  
Огромное спасибо!

Т.е. чтобы выбрать последний закрытый ордер например на проверку был ли он с профитом или с лоссом, нужно выбрать его по позиции из истории ( OrderSelect( HistoryTotal(), SELECT_BY_POS, MODE_HISTORY) )?
Верно? А потом с помомощью функции OrderTicket() определить его тикет - другого пути указать тикет ордера я пока не придумал. Если вы знаете - буду очень рад поучиться.

Еще раз спасибо за толкование!

Так как индекс идет от нуля, то скорее так:
if(OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY)) // проверка обязательна
  {
  }
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий