IsTradeAllowed() - непонятки в работе или глюк МТ

 
У меня перед торговыми операциями идёт проверка IsTradeAllowed() (разработчики рекомендовали).
Когда я спрашивал - что эта ф-ция значит, мне отвечали примерно следующее: "она возвращает правду, если в настройках эксперта стоит галочка "разрешить торговлю" и торговый поток свободен (т.е. не торгует другой эксперт)"
По этому поводу я сделал не просто проверку, а проверку в течении 5 секунд (если торгует другой эксперт, у него будет шанс закончить).

Вчера (время не помню) и сегодня (5 минут назад) у меня сложилась следующая ситуация: эксперты (вчера - все прикреплённые, сегодня - один), которые хотели торговать, возвращали сообщение "Эксперту запрещена торговля!!!", т.е. IsTradeAllowed () возвращал false в течении 5 секунд, и так несколько раз (достаточно долго - сегодня 10 минут)... При этом никто не торговал, ни я, ни эксперты. Галочки я раз десять проверил у каждого эксперта, пробовал включать и отключать опять.. Помог только перезапуск терминала.

Кусок кода:
.....
if ( !_IsTradeAllowed() ) return(-1);
OrderClose(......);
......


/////////////////////////////////////////////////////////////////////////////////
/**/ bool _IsTradeAllowed ()
/////////////////////////////////////////////////////////////////////////////////
// Если IsTradeAllowed() в течении 5 секунд не становится = true, возвращаем false.
/////////////////////////////////////////////////////////////////////////////////
{
	if ( IsTesting() ) { return(true); }
	for ( int z = 0; z < 50; z ++ )
	{
		if ( IsTradeAllowed() ) { return(true); }
		Sleep(100);
	}
	Print ( "Эксперту запрещена торговля!!!" );
return(false);
}
 
очень бы хотелось разобраться в ситуации...
Помогите, плз...
 
будем разбираться.
вопрос. что будет, если Вы всё же вопреки запрещению попытаетесь провести торговую операцию? теоретически, я знаю, что должно быть, хотелось бы узнать про Ваш конкретный случай
 
будем разбираться.
вопрос. что будет, если Вы всё же вопреки запрещению попытаетесь провести торговую операцию? теоретически, я знаю, что должно быть, хотелось бы узнать про Ваш конкретный случай

не догадался попробовать... сейчас сделаем ;)

только заминочка может быть - ситуация не стабильно проявляется...
 
Сделал. Результат - ошибка №146 (trade context is busy)
С тех пор, как появилась первый раз, не прекращалась...
Лечится только перезапуском МТ.
 
будем воспроизводить
 
будем воспроизводить
на всякий случай: советник открывает и закрывает позицию в цикле, т.е. не ждёт прихода тика - частота сделок 1 в 10 сек. Ошибка появилась на 1778 операции этого эксперта (кроме них за это время было совершено ещё 58 операций) через 5 часов и 16 минут работы.

Надеюсь на скорейшее решение.
 
второй раз ситуация воспроизвелась достаточно быстро - перед тем, как писАть пост, я перезапустил МТ и уже через 15 минут - то же самое.

зы: (ещё не говорил) проблема появляется одновременно у всех экспертов, работающих в данный момент.
 
Уважаемый Компостер!
Здравствуйте!
Я прочитал немного форум- я у меня есть вопрос к Вам тоже касается возможности торговли.
Дайте совет,если можно
Я написал блок модификации- перемещения стопа. Не трейлинг стоп.
{
if (OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES)==true)
{
double stopprice_ticket1=OrderStopLoss();
if ((Low[1]-Low[2])>0)
{
double stopprice_ticket1_new=Low[1]-StopLoss*Point;
OrderModify(OrderTicket(),OrderOpenPrice(),stopprice_ticket1_new,OrderTakeProfit(),0,Green);
}
}
В тестере- пальчики оближешь! В реальном времени- стоп мертвый. Не двигается.
Вы встречались с этой проблемой? Как вы её решали???

Начинающий
 
Попробуй использовать нормализацию stopprice_ticket1_new
 
OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES
почитаейте хелп по этой ф-ции - уже сотню раз говорилось про SELECT_BY_TICKET
Причина обращения: