Проблема с постановкой ордеров

 
Уважаемые разработчики, а также те, кто знает. Объясните, пожалуйста, такую ситуацию.

Записи в журнале:
2005.08.30 05:00:21 '142605': close order #1703436 sell 0.10 EURUSD at 1.2232 sl: 0.0000 tp: 0.0000 at price 1.2224
2005.08.30 05:00:41 TradeContext: ping error
2005.08.30 05:00:41 TradeContext: ping failed

Несмотря на записи об ошибках (кстати, что они значат и как с ними бороться?), ордер открыт. Но до тех пор, пока МТ не перезапущен, система его то ли не видит, то ли видит неправильно, в частности неправильно определяет OrderOpenTime.

После перезапуска сразу появляется
2005.08.30 05:49:11 '142605': order #1703436 sell 0.10 EURUSD at 1.2232 sl: 1.2282 tp: 0.0000 closed at price 1.2222
2005.08.30 05:49:11 '142605': request in process
2005.08.30 05:49:11 '142605': request was accepted by server
2005.08.30 05:49:11 '142605': close order #1703436 sell 0.10 EURUSD at 1.2232 sl: 0.0000 tp: 0.0000 at price 1.2222
2005.08.30 05:49:00 Expert _Friday_Expert EURUSD,H1: loaded successfully
2005.08.30 05:46:59 '142605': requote 1.2221 / 1.2224 for order #1703436 sell 0.10 EURUSD closing at 1.2225
2005.08.30 05:46:59 '142605': request was accepted by server
2005.08.30 05:46:59 '142605': close order #1703436 sell 0.10 EURUSD at 1.2232 sl: 0.0000 tp: 0.0000 at price 1.2225
2005.08.30 05:46:59 '142605': login (4.00, #27F87A20)
2005.08.30 05:46:50 Expert _Friday_Expert EURUSD,H1: loaded successfully

Тоже, как видите, не без приключений.

Пожалуйста, поясните, почему система перестает "видеть" ордер, и что делать в этой ситуации?

Особо отмечу, что сообщения об ошибке не было, и ордер в списке открытых появился. Код открытия содержит несколько попыток, и должен выдавать алерт, в случае неудачи всех пяти:

void Buy(string strExpertName)
{
	dLotSize = GetLotSize();
	
	if(AccountFreeMargin() < dLotSize * dInitAmount || AccountFreeMargin() < 500)
		return;

	double dTp;
	if(dTakeProfit == 0)
		dTp = 0;
	else
		dTp = Ask + dTakeProfit;

	int nResult;
	for(int nTry = 0; nTry < 5; nTry++)
	{
		nResult = OrderSend(Symbol(), OP_BUY, dLotSize, Ask, nSlip, Ask - dStopLoss, 
			dTp, strExpertName, nMagic, 0, Aqua);

		if(nResult != -1)
			break;
	}	

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(strExpertName + " buy error: " + nError);
	}
}



Речь идет все о том же тестовом эксперте из поста "ошибка номер 6", в случае, если вам нужен код.

 
Ожидаю ответа разработчиков.
С уважением,
Кварк
Причина обращения: