Erro número 6 - página 6

 
Nada mal, mas essencialmente o mesmo :)<br / translate="no"> O que é SetTrace?


Oopsie :) Vou fazer um comercial agora, preste atenção - http://forexsystems.ru/phpBB/viewtopic.php?t=694&start=45
 
хэндлов не хватает.


Posso mudar o número de alças nas configurações do sistema (W'XP) e como?
 
Outra pergunta para os desenvolvedores.

Qual é a maneira correta de fazer isso:

1.
for(int nCnt = 0; nCnt < OrderTotal(); 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_SELLL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed); } } }



2.

for(int nCnt = OrderTotal() - 1; nCnt >= 0; 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_SELLL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed); } } }



3. indiferente.
4. Devemos definir o retorno e processar a próxima ordem no próximo tick
5. Deve ser feito de alguma outra forma.

Deixe-me explicar. Assumir que temos duas ordens abertas e que ambas precisam ser fechadas. O laço

for(int nCnt = 0; nCnt < OrderTotal(); nCnt++)



Ela fechará a ordem zero, após o que a primeira ordem se tornará zero. Depois tentará fechar a primeira encomenda, e haverá um erro. Certo?

Não creio que todos os erros da EA discutidos neste tópico estejam relacionados a esta questão, por exemplo, o erro comum não tem nada a ver com isso. Mas se eu estiver certo, talvez isso explique a) a ordem trancada e tal e b) o fato de que precisamos de vários EAs para que os erros apareçam.



 
хэндлов не хватает.


Можно ли изменить число хэндлов в системных установках (W'XP) и как?

Se um programa não tiver alças, ele é escrito com erros. Caso contrário, há alças suficientes para dar a volta.
 
É claro que a segunda opção está correta, mas em vez de retornar você deve colocar Sleep() por 30 segundos e pronto.
 
Devo acrescentar que, substituindo
for(int nCnt = 0; nCnt < OrderTotal(); nCnt++)
por
for(int nCnt = OrderTotal() - 1; nCnt >= 0; nCnt--)
Passei do erro 139 para 138 e 4109
(requote, Não inicializado string in array)
O último não tem nenhum comentário...
 
É claro que a segunda variante está correta, mas ao invés de retornar você deve colocar Sleep() por 30 segundos e pronto.


A 10 Consultores Especialistas em um intervalo de minutos, 30 segundos para cada... Errado, é impossível viver dessa maneira.
 
Você acha que é isso? Eu tinha 12 janelas, cada uma com uma moeda diferente e um Expert Advisor diferente. Eu proibi (Permitir comércio ao vivo) o comércio em 11 deles. Todos os meus erros ainda provêm deles. Mais um bug.
 
Конечно, второй вариант правилен, только вместо return надо ставить Sleep() секунд на 30 и усе.


Com 10 especialistas em um intervalo de um minuto, 30 segundos para cada... Errado, esta não é uma maneira de viver.



Esta é a maneira de viver, e o que você está fazendo é um teste à força do ferro.
 
Uma nova versão da EA para testes. O que mudou:
1. Ciclos fixos.
2. O número Magik é privatizado para a hora de início da barra. Isto dá, se não estou enganado, um atraso na abertura. Ou seja, a EA com mn 7 abrirá 7 segundos após o início do bar. Evitará sobrecarga do servidor, CPU do computador e conflito com o máximo de 2,5 segundos, se ainda estiver em algum lugar...

Mas, infelizmente, os erros permanecem.

As regras são as mesmas - abrir várias janelas, em qualquer período de tempo (minutos, por exemplo) e esperar.

double dStopLoss;
int nHoursToHold;

datetime timePrev = 0;

int nSlip = 5;

double dLotSize = 0.1;

int nMagic = 0;

//////////////////
int init ()
{
	timePrev = 0;

	dStopLoss = 110 * Point;
	nHoursToHold = 1;
	
	if(Symbol() == "EURUSD")
		nMagic = 1;
	else if(Symbol() == "EURJPY")
		nMagic = 2;
	else if(Symbol() == "USDCHF")
		nMagic = 3;
	else if(Symbol() == "GBPUSD")
		nMagic = 4;
	else if(Symbol() == "GBPJPY")
		nMagic = 5;
	else if(Symbol() == "GBPCHF")
		nMagic = 6;
	else if(Symbol() == "USDJPY")
		nMagic = 7;
	else if(Symbol() == "AUDUSD")
		nMagic = 8;
	else if(Symbol() == "EURGBP")
		nMagic = 9;
	else if(Symbol() == "USDCAD")
		nMagic = 10;
	else if(Symbol() == "EURCHF")
		nMagic = 11;
	else if(Symbol() == "EURAUD")
		nMagic = 12;
		
	timePrev += nMagic;	// Open nMagic seconds after the new bar

	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] + nMagic) 
		bIsBarEnd = true;
	timePrev = Time[0] + nMagic;
	
	if(!bIsBarEnd)
		return(0);

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

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

	for(int nCnt = OrdersTotal() - 1; nCnt >= 0; 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, "Friday", nMagic, 0, OrangeRed);

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

	dLotSize = GetLotSize();

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

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(Symbol() + ", " + nError);
	}
}
// ------

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

// ------

int GetSignal()
{
	int nSignal;
	if(MathMod(Hour(), 2) == 0)
		nSignal = OP_BUY;
	else
		nSignal = OP_SELL;
		
	return(nSignal);
}

// ------