Erro número 6 - página 11

 
em 50 minutos de trabalho em gráficos de 10 minutos apenas 2 requotes. sem mais erros. vamos adicionar o dicionário do meta-editor e postar as mudanças
 
erro 138 pode facilmente ocorrer. potencialmente com 10 EAs de trabalho o tempo de espera para liberação do semáforo pode ser de 30 segundos ou mais. durante este tempo o preço pode facilmente mudar. neste caso use a função RefreshRates e faça uma nova oferta ou peça um novo valor. ou peça MarketInfo por um novo preço. 129 é o mesmo erro, preço errado - o preço foi longe demais e houve várias mudanças de preço durante o tempo de espera. 1 - isto não é um erro. aparece quando você está tentando modificar uma ordem com os mesmos valores que você já definiu. é estranho que isso ocorra quando você confirma manualmente uma troca quando a rejeita


Obrigado, mas...
O último EA I postado tem um atraso de 3 segundos e 50 (!) pips slippage. Preço
12 gráficos de 3 segundos cada - o preço não terá tempo para correr tão longe. Ou estou entendendo mal alguma coisa?
 
Acrescentado RefreshRates a especialista (código abaixo). Os erros número 1 estão agora se acumulando.
Esperamos que você possa rastreá-lo. "Rashing" significa cerca de uma vez a cada 2-3 minutos. Se você não o fizer - provavelmente o servidor está muito próximo, ou o computador está muito rápido. Tenho parte da minha CPU ocupada por um pacote de rede neural, então a MT recebe 50%. Agora... Aqui, desativou a rede neural (há um botão de pausa, ao contrário de alguns outros programas). O erro número um não desapareceu, mas se tornou um pouco menos freqüente. MT está "comendo" 55-99% da CPU. Ligando-o... MT recebe 1,5 vezes menos tempo de CPU. Os erros também se tornaram mais freqüentes.

double dStopLoss;
int nHoursToHold;

datetime timePrev = 0;
int nBars;
int nDelaySeconds = 3;

int nSlip = 50;

double dLotSize = 0.1;

int nMagic = 0;
int nDigits;

string strTradeSemaphore = "TradeSemaphore";

//////////////////
int init()
{
	nBars = Bars;

	if(!IsTesting() && !GlobalVariableCheck(strTradeSemaphore)) 
		GlobalVariableSet(strTradeSemaphore, 0.0);
	
	dStopLoss = 110 * Point;
	nHoursToHold = 1;

	nDigits = MarketInfo( Symbol(), MODE_DIGITS );
	
	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;
		
	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;
*/

	bool bIsBarEnd = false;
	if(nBars != Bars)
	{
		if(IsTesting() || (!IsTesting() && CurTime() > Time[0] + nMagic * nDelaySeconds))
		{
			bIsBarEnd = true;
			nBars = Bars;
		}
	}
	
	if(!bIsBarEnd)
		return(0);

	// ------
	
	if(!IsTesting())
	{
		while(!IsStopped())
		{
			if(GlobalVariableGet(strTradeSemaphore) == 0.0)
				GlobalVariableSet(strTradeSemaphore, nMagic);

			if(GlobalVariableGet(strTradeSemaphore) == nMagic)
				break;
		
			Sleep(1000);
		}
	}
	
	RefreshRates();
	
	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);
			}
		}
	}

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

	if(!IsTesting())
		GlobalVariableSet(strTradeSemaphore, 0.0);	
	
	return(0);
}
// ------

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

	dLotSize = GetLotSize();

	double dNormalizer = MathPow(10, nDigits);
	double dBid = Bid;//MathFloor(Bid * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits);
	double dStop = Bid + dStopLoss;//MathFloor((Bid + dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits);

	int nResult = OrderSend(Symbol(), OP_SELL, dLotSize, dBid, 
		nSlip, dStop, 0, "Friday", nMagic, 0, OrangeRed);

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(Symbol() + ", sell: " + dBid + ", Stop: " + dStop + ", error: " + nError);
	}
}

// ------

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

	dLotSize = GetLotSize();

	double dNormalizer = MathPow(10, nDigits);
	double dAsk = Ask;//MathFloor(Ask * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits);
	double dStop = Ask - dStopLoss;//MathFloor((Ask - dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits);

	int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, dAsk, 
		nSlip, dStop, 0, "Friday", nMagic, 0, Aqua);

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(Symbol() + ", buy: " + dAsk + 
			", Stop: " + dStop + ", error: " + 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);
}


 
Para resumir, eu acho. Parece que qualquer especialista, exceto aqueles que trabalham sozinhos, precisa de semáforos de proteção. Vou tentar o novo recurso introduzido pelos desenvolvedores na segunda-feira (e Rosh disse que o Desenvolvedor não quer mudar a versão! Eu deveria contatá-lo com mais freqüência, fica a apenas uma centena de postos). Na verdade, muito graças aos desenvolvedores. Graças também a Rosh e Composer. Entretanto, vamos esperar até segunda-feira :)
 
Nah, não até segunda-feira com certeza =)))
O Sul está chamando, e o novo recurso será prontamente testado em uma semana =)))))

...e obrigado também, pelo menos alguém tentou resolver os bugs ;)
 
Para resumir, eu acho. Parece que qualquer especialista, exceto aqueles que trabalham sozinhos, precisa de semáforos de proteção. Vou tentar o novo recurso introduzido pelos desenvolvedores na segunda-feira (e Rosh disse que o Desenvolvedor não quer mudar a versão! Eu deveria contatá-lo com mais freqüência, fica a apenas uma centena de postos). Na verdade, muito graças aos desenvolvedores. Graças também a Rosh e Composer. No entanto, até segunda-feira :)<br / translate="no">


Quark, eu escrevi sobre a Desenvolvedora, não sobre os desenvolvedores. :) Entendeu? Em algumas religiões é Deus, em outras é um endereço diferente.
Além disso, escrevi que meus 9 EAs funcionam bem em uma única conta. Mas você é bom em encontrar as condições quando o MT4 está empurrando algo errado :)
 
<br / traduz="não"> não, não até segunda-feira =))))


Até segunda-feira :)


O Sul está chamando e a nova f-função será prontamente testada em uma semana =)))))


Um grande olá para o Sul.


...e obrigado também, pelo menos alguém tentou resolver os bugs ;)


Com um erro. E quantos deles...
 
<br / translate="no"> Quark, eu escrevi sobre a Desenvolvedora, não sobre os desenvolvedores. :)


Eu estava apenas brincando :) Embora o princípio seja o mesmo em todos os lugares. Se você perguntar corretamente, você receberá uma resposta. Se você jurar, você será banido :)


E também escrevi que meus 9 EAs estão funcionando bem pelo mesmo motivo. Mas você é bom em encontrar as condições quando o MT4 está empurrando algo errado :)


72 janelas com 12 dos meus conselheiros - também. Depois acrescentei a 13ª, e aqui vamos nós... Em geral, é claro, se eu pegar o último EA postado neste ramo e usá-lo em relógios em vez de minutos, e aumentar a pausa de 3 segundos para 30 (como você sugeriu, a propósito) não haverá erros. Assim, o resultado é alcançado, um resultado positivo.

É uma pena os caras do fórum inglês, mas eu não vou traduzir nossos posts para eles. Não em boa saúde :(

Boa sorte,
Quark
 
Apesar do trabalho realizado, o erro número 6 continua a ocorrer. Isso acontece quando a MT usa o otimizador e abre uma posição ao mesmo tempo. Eu já o peguei duas vezes. A execução do Expert Advisor novamente - se as condições para abrir uma posição ainda forem válidas - resulta na abertura de uma posição, sem problemas.
 
Parece que quando o otimizador está correndo, o erro 6 é muito mais provável. Reiniciar o computador, MT etc. medidas não mudam a situação.

O problema ocorre em diferentes EAs. A lógica em todos eles foi modificada com semáforos (como Slava sugeriu) e atraso (Rosh) - de modo que em 10 segundos apenas 1 EA estava funcionando. Todos os erros que mencionei acima desapareceram (até o momento), exceto o número 6.