Ошибка номер 6

 
"No connection with trade server". Все бы ничего, но выскакивает через раз, при попытке открыть ордер. Перезапускаю МТ - ордер сразу открывается. Кто-нибудь знает, в чем дело?
 
Заодно и вопрос к разработчикам. Если я торгую в начале бара, и еще 1000 человек тоже, то не это ли является причиной того, что сервер именно в начале бара недоступен?

Ответьте, пожалуйста. Если это так, то я просто предусмотрю задержку, но сначала хотелось бы знать причину.
 
Уважаемые разработчики!
Повторяю вопрос, в несколько иной формулировке: ошибка номер шесть (котировки доступны, а торговый сервер - нет) - это из-за того, что в начале часового бара сервер перегружен? Искать ли мне проблему в эксперте, или просто открывать сделки, скажем, через 3 минуты после начала бара, когда нагрузка на сервер поменьше?

Второй вопрос из той же серии: если у меня много экспертов одновременно, и все что-то делают в начале бара, возникнут ли проблемы? Или рассчеты просто выстроятся в очередь? Например, что будет, если эксперт не успел досчитать, а уже пришел новый тик - закончит ли он рассчет по старой цене? И если новый тик, гарантируете ли вы, что рассчет (я проверяю начало бара с помощью кода, который вы рекомендовали в учебнике) по-прежнему покажет начало бара?

Это важные вопросы, хотелось бы подробно.

С уважением,
Кварк
 
1. какая у Вас операционная система?
2. эксперты работают параллельно, каждый в своём потоке. если придёт новый тик, а эксперт всё ещё работает, тик будет проигнорирован. все ценовые данные, с которыми работает эксперт, остаются первоначальными (эксперт на самом деле работает с копией данных). для того, чтобы взять самые последние, изменённые, данные, существует функция RefreshRates
 
Windows 2000

Собственно, вопрос я задал, поскольку дважды получал ошибку 6 при попытке открыть позицию в начале бара:

bool bIsBarEnd = false;
if(timePrev != Time[0]) 
	bIsBarEnd = true;
timePrev = Time[0];

if(!bIsBarEnd)
	return(0);
....



Вопрос остается - это из-за перегрузки сервера, поскольку ВСЕ в начале бара активнее? Или из-за чего-то другого?

 
вряд ли это от сервера. сейчас мы разбираем такую ошибку на вин98. но там понятно отчего происходит - хэндлов не хватает.
 
Сейчас, в 13.00 по Москве, тот же эксперт выдал ошибку номер 2 - common error.
Если этот пост читает кто-то из Альпари - счет 116122.

Это единственный из моих экспертов, выдающий алерт при ошибках такого рода. Я предлагаю тем, у кого работают демо эксперты, повесить алерты, если OrderSend возвращает -1 (а вдруг эта ситуация имеет место сплошь и рядом). Вот код для покупки, для продажи принцип тот же:

int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, Ask, nSlip, Ask - dStopLoss, 
	0, "Comment", nMagic, 0, Aqua);

if(nResult == -1)
{
	int nError = GetLastError();
	Alert(nError);
}



Также, на всякий случай, привожу весь эксперт, кроме той части, в которой логика (она-то тут точно не при чем). Гляньте, пожалуйста. Все-таки, мне кажется, дело в МТ. Эксперт просто вешается на часовой график EURUSD и периодически вместо сделок выдает ошибки.

Отмечу, что первый запуск (когда эксперт цепляется к графику, или когда его код перекомпилируется) срабатывает нормально, не выдавая ошибок. То есть, получили ошибку, спустя 5 секунд нажали F5 в редакторе, эксперт запустился, сделка открылась.

В общем, помогите, плз!

double dStopLoss;
int nHoursToHold;

datetime timePrev = 0;
bool bIsFirst = true;

int nSlip = 5;

double dTp = 0;

double dLotSize = 0.1;

int nNumOfExperts = 5;
int nMagic = 0;

//////////////////
int init ()
{
	timePrev = 0;
	
	if(Symbol() == "EURUSD" && Period() == 60)
	{
		dStopLoss = 110 * Point;
		nHoursToHold = 1;
		
		nMagic = 23;
	}

	return(0);	
}

// ------

int deinit()
{
	return(0);
}
// ------
int start()
{
	if(Bars < 5)
		return(0);
	
	// The previous bar just closed
	bool bIsBarEnd = false;
	if(timePrev != Time[0]) 
		bIsBarEnd = true;
	timePrev = Time[0];
	
	if(!bIsBarEnd)
		return(0);

	// ------
	
	int nSignal = GetSignal();

	if(nSignal == OP_BUY) 
		Buy();
	else if(nSignal == OP_SELL) 
		Sell();

	for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)
	{
		OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES);

		if(OrderMagicNumber() == nMagic)
		{
			if(CurTime() - OrderOpenTime() > (nHoursToHold - 1) * 60 * 60)
			{
				if(OrderType() == OP_BUY)
					OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua);
				else if(OrderType() == OP_SELL)
					OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed);
			}
		}
	}

	return(0);
}
// ------

void Sell()
{
	if(AccountFreeMargin() < 500)
		return;

	dLotSize = GetLotSize();

	int nResult = OrderSend(Symbol(), OP_SELL, dLotSize, Bid, nSlip, Bid + dStopLoss, 
		0, "Comment", nMagic, 0, OrangeRed);

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(nError);
	}
}
// ------
void Buy()
{
	if(AccountFreeMargin() < 500)
		return;

	dLotSize = GetLotSize();

	int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, Ask, nSlip, Ask - dStopLoss, 
		0, "Comment", nMagic, 0, Aqua);

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(nError);
	}
}
// ------

double GetLotSize()
{
	double dLot = 0.1;
	
	return(dLot);
}

// ------

int GetSignal()
{
	int nSignal = OP_BUY;
	return(nSignal);
}

// ------




 
вряд ли это от сервера. сейчас мы разбираем такую ошибку на вин98. но там понятно отчего происходит - хэндлов не хватает.


Хэндлов чего? Сколько у вас этих хэндлов? Есть ли ограничения на число экспертов, графиков и т.п.?

П.С. Этот вопрос не отменяет моего предыдущего поста :)
 
эксперт выдал ошибку номер 2 - common error.
достаточно редкая ошибка =)
у меня эксперты за пол года выдавали такую ошибку всего 5 раз
На счёт алертов - неудобно. У меня отсыл на мыло + запись в файл. Скоро доделаю библиотеки с соответсвующими ф-циями - выложу
 
эксперт выдал ошибку номер 2 - common error.
достаточно редкая ошибка =)
у меня эксперты за пол года выдавали такую ошибку всего 5 раз
На счёт алертов - неудобно. У меня отсыл на мыло + запись в файл. Скоро доделаю библиотеки с соответсвующими ф-циями - выложу


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

"Мой" эксперт выдает эту ошибку в 70% случаев. То есть, не эту, а 2, 6, 14.., словом, без системно. Цены проверял, вроде правильные... Поскольку исходники МТ находятся у разработчиков, а серверы у Альпари, то в основном это к ним. Хотя было бы здорово, если бы кто-то еще запустил эту штуку, и подтвердил, что проблема воспроизводится на его компе.
 
вряд ли это от сервера. сейчас мы разбираем такую ошибку на вин98. но там понятно отчего происходит - хэндлов не хватает.


Хэндлов чего? Сколько у вас этих хэндлов? Есть ли ограничения на число экспертов, графиков и т.п.?

хэндлы являются представителями системных ресурсов. нашли и обезвредили глюк с утечкой gdi-ресурсов при отрисовке списка открытых позиций. на 98, где количество хэндлов на процесс на порядок меньше, чем у 2000, очень быстро проявлялась ошибка нехватки ресурсов, в тч невозможность открыть сокет для торговли. при долгой работе эта ошибка проявляется и на 2000. почему этот глюк проявился только в последних билдах, загадка природы.
ограничение на число графиков есть - 99. значит такое же ограничение и на число экспертов
Причина обращения: