Error número 6 - página 11

 
en 50 minutos de trabajo en gráficos de 10 minutos sólo 2 requotes. no más errores. vamos a añadir el diccionario del meta-editor y publicar los cambios
 
El error 138 requote puede ocurrir fácilmente. potencialmente con 10 EAs trabajando el tiempo de espera para la liberación del semáforo puede ser de 30 segundos o más. durante este tiempo el precio puede cambiar fácilmente. en este caso use la función RefreshRates y tome un nuevo valor de oferta o demanda. o pida a MarketInfo un nuevo precio. 129 es el mismo error, el precio es erróneo - el precio se ha pasado y hubo varios cambios de precio durante el tiempo de espera. 1 - no es un error en absoluto. aparece cuando se intenta modificar una orden con los mismos valores que ya se han establecido. es extraño que se produzca cuando se confirma manualmente una operación al rechazarla


Gracias, pero...
El último EA que publiqué tiene un lag de 3 segundos y 50 (!) pips de deslizamiento. Precio
12 gráficos de 3 segundos cada uno - el precio no tendrá tiempo de correr tanto. ¿O he entendido algo mal?
 
Se ha añadido RefreshRates a los expertos (código de abajo). Los errores número 1 se acumulan ahora.
Esperemos que puedas localizarlo. "Caída" significa aproximadamente una vez cada 2-3 minutos. Si no lo hace, probablemente el servidor está demasiado cerca, o su ordenador es demasiado rápido. Tengo parte de mi CPU ocupada por un paquete de red neural, así que MT se queda con el 50%... Ahora... Aquí, desactiva la red neuronal (hay un botón de pausa, a diferencia de otros programas). El error número uno no ha desaparecido, pero se ha vuelto un poco menos frecuente. La MT se está "comiendo" el 55-99% de la CPU. Al encenderlo... MT obtiene 1,5 veces menos tiempo de CPU. Los errores también se hicieron más frecuentes.

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, supongo. Parece que cualquier experto, excepto los que trabajan solos, necesita semáforos de protección. Probaré la nueva función introducida por los desarrolladores el lunes (¡y Rosh dijo que el desarrollador no quiere cambiar la versión! Debería contactar con él más a menudo, sólo está a cien puestos de distancia). En realidad, muchas gracias a los desarrolladores. Gracias también a Rosh y a Compositor. Sin embargo, esperaremos hasta el lunes :)
 
No, hasta el lunes seguro que no =)))
El Sur llama, y la nueva función se probará puntualmente en una semana =)))))

...y gracias también, al menos alguien ha intentado solucionar los fallos ;)
 
Para resumir, supongo. Parece que cualquier experto, excepto los que trabajan solos, necesita semáforos de protección. Probaré la nueva función introducida por los desarrolladores el lunes (¡y Rosh dijo que el desarrollador no quiere cambiar la versión! Debería contactar con él más a menudo, sólo está a cien puestos de distancia). En realidad, muchas gracias a los desarrolladores. Gracias también a Rosh y a Compositor. Sin embargo, nos vemos el lunes :)<br / translate="no">


Quark, escribí sobre el desarrollador, no sobre los desarrolladores. :) ¿Lo entiendes? En algunas religiones es Dios, en otras es una dirección diferente.
Además, escribí que mis 9 EAs funcionan bien en una cuenta. Pero se te da bien encontrar las condiciones cuando MT4 está paleando algo mal :)
 
<br / translate="no"> no, no hasta el lunes =))


Nos vemos el lunes :)


El Sur llama y la nueva función f se probará puntualmente en una semana =)))))


Un gran saludo al Sur.


...y gracias también, al menos alguien ha intentado solucionar los fallos ;)


Con un error. Y cuántos de ellos...
 
<br / translate="no"> Quark, escribí sobre el Desarrollador, no sobre los desarrolladores. :)


Sólo estaba bromeando :) Aunque el principio es el mismo en todas partes. Si preguntas correctamente, obtienes una respuesta. Si dices palabrotas, te expulsan :)


Y también escribí que mis 9 EAs están funcionando bien en la misma cuenta. Pero se te da bien encontrar las condiciones cuando MT4 está paleando algo mal :)


72 ventanas con 12 de mis concejales - también. Entonces añadí el 13, y aquí vamos... En general, por supuesto, si tomo el último EA publicado en esta rama y lo uso en relojes en lugar de minutos, y aumento la pausa de 3 segundos a 30 (como sugeriste, por cierto) no habrá errores. Así que el resultado se consigue, uno positivo...

Es una pena lo de los chicos del foro inglés, pero no voy a traducir nuestros mensajes para ellos. No tiene buena salud :(

Buena suerte,
Quark
 
A pesar del trabajo realizado, el error número 6 sigue produciéndose. Ocurre cuando MT utiliza el optimizador y abre una posición al mismo tiempo. Ya lo he cogido dos veces. Ejecutando de nuevo el Asesor Experto - si las condiciones para abrir una posición siguen siendo válidas - resulta en la apertura de una posición, sin problemas.
 
Parece que cuando el optimizador está funcionando, el error 6 es mucho más probable. Las medidas de reinicio del ordenador, MT, etc. no cambian la situación.

El problema ocurre en diferentes EAs. La lógica en todos ellos fue modificada con semáforos (como sugirió Slava) y retardo (Rosh) - de modo que en 10 segundos dados sólo 1 EA estaba trabajando. Todos los errores que mencioné anteriormente desaparecieron (hasta ahora), excepto el número 6.
Razón de la queja: