Error número 6 - página 7

 
<br / translate="no"> Esa es la manera de vivir, y lo que estás haciendo es probar la fuerza del hierro.


Ver el post sobre la nueva versión del EA. La plancha recibe ahora un segundo por experto. No mejoró.
Entonces, nos prometieron que las solicitudes están en cola.
 
Por supuesto, la segunda variante es correcta, pero en lugar de devolver se debería utilizar Sleep() durante 30 segundos y ya está.


Esta es la variante propuesta por Rosh. Los errores permanecen.

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]) 
		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 = 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);
					
				Sleep(10);
			}
		}
	}

	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);
	}

Sleep(10);
}
// ------
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);
	}

Sleep(10);
}
// ------

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);
}

// ------



 
Este punto
if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed)
;


cuál es el OrderType() si hemos cerrado la orden de compra (se ha cumplido la primera condición)
Intenta eliminar la comprobación en la segunda condición, es decir, yo siempre lo escribo así:

if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed);
 
Como siempre, Rosh parece tener razón. He puesto Sleep(0), dos expertos ya dan errores. Pongo Sleep(100), cuatro expertos funcionan, aparecen errores al añadir el quinto (cinco ventanas, cinco monedas, un experto para cada una).

Pongo Sleep(200) - cinco expertos se ponen en marcha (casi, a veces todavía dan errores. No he conseguido obtener 5 Asesores Expertos sin errores utilizando este método).

Por ahora, sólo hablo de los errores 138 y 139.

Todavía estoy esperando algunos consejos de los desarrolladores.

Rosh, un agradecimiento especial para ti, aunque no me gusta tu enfoque con el deslizamiento.
 
Tal momento<br / translate="no">
if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed)
;


Qué es OrderType() si hemos cerrado una orden de compra (se ha cumplido la primera condición)
Intenta dejar la marca en la segunda condición, es decir, siempre lo escribo así:

if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed);



Sí, probablemente. Aunque pongo una pausa después de esto si, pero quien los conoce, multitaskers.

Lo he probado. Me siento mejor, pero sigo teniendo errores :)
 
<br / translate="no">
Rosh, un agradecimiento especial para ti, aunque no me gusta tu enfoque con el deslizamiento.


Bueno... la vida tampoco es la mejor que he visto. Existe la posibilidad de morir en algún momento. A mí tampoco me gusta, pero el desarrollador no cambia la versión. :)
 


Rosh, тебе отдельное спасибо, хотя твой подход со слипом мне не нравится.


Bueno... la vida tampoco es lo mejor que he visto. Existe la posibilidad de morir en algún momento. A mí tampoco me gusta, pero el desarrollador no cambia la versión. :)


Sí, y la API no se apaga :)
Pero siempre se puede encontrar una solución :)) Usando Sleep(), por ejemplo :)))

Pero en general, esta es una observación profunda. Deberías presentarte a los promotores más a menudo. Dicen que a veces contestan :))))
 
¿Puedo tener una charla con ustedes? =)))
Porque tienes una discusión de este tipo durante 4 páginas, y yo estoy en silencio (día de beber =))...


Acerca de los errores:
Error #6 - no hay conexión con el servidor de comercio - puede ser debido a una mala conexión. Tengo una línea alquilada de Datos sobre Voz, y cuando descuelgas el teléfono, la velocidad baja drásticamente. Así que es precisamente en estos momentos cuando se produce este error.

Error #139 - la orden está bloqueada - Creo que es sólo un fallo: como si el terminal hiciera algo con esta posición y EA no pudiera trabajar con ella en ese momento. No sé, no encuentro ninguna otra explicación (

Error #138 - requote - puede ser causado por la conexión también. Mira la carga del canal durante los errores.

Sin embargo, todo esto es pura especulación. He pedido a los desarrolladores durante mucho tiempo una descripción normal de los errores e instrucciones sobre cómo reaccionar - dijeron que llegarían un día ;)



Con respecto a Sleep() - siempre es una tontería utilizarlo. Pero es mejor hacer una pausa entre las operaciones - utilizar LastTradeTime. Estoy terminando (rehaciendo) la biblioteca trade_lib&info_lib.mqh. Todas estas cuestiones se resuelven allí (parcialmente). Debería haber muchos menos errores.


Eso es todo lo que pienso hasta ahora, si se me ocurre algo más - lo contaré ;)
 
<br/ translate="no"> ¿Puedo tener una charla con vosotros? =)))
Tienes una discusión de cuatro páginas, y yo estoy callado (día de beber =))...


Sí, he hecho mucho ruido... :)


Acerca de los errores:
Error #6 - no hay conexión con el servidor de comercio - puede ser debido a una mala conexión. Tengo una línea alquilada de Datos sobre Voz, y cuando descuelgas el teléfono, la velocidad baja drásticamente. Así que es precisamente en estos momentos cuando se produce este error.


Tengo una línea alquilada, de buena calidad. De nuevo, una mala conexión no explica por qué se produce un error CADA vez que varios EAs hacen algo simultáneamente. Con un canal de megabits (en teoría)!


Error #139 - la orden está bloqueada - me parece que es sólo un fallo: como si el terminal hiciera algo con esta posición y el Asesor Experto no pudiera trabajar con ella en ese momento. No sé, no encuentro otra explicación (


De acuerdo. Sólo queda por averiguar dónde lo hace. El experto es tan simple que simplemente no hay tal lugar. Aunque, claro, quizá sea yo quien no lo vea. (¿ves un alce? no. y yo no. pero está AHORA)


Error #138 - la recotización puede deberse a la conexión. Comprobar la carga de los enlaces durante los errores.


No lo sé. Si no puedes operar con dos EAs al mismo tiempo en Moscú en una línea alquilada, no puedes operar en absoluto.

Estaba pensando en las recotizaciones. Por ejemplo, cuál es el deslizamiento mínimo que hay que poner para que el precio no se escape. ¿5 puntos? 10? He puesto 15 - el error se mantiene.


Sin embargo, todo esto es pura especulación. He pedido a los desarrolladores durante mucho tiempo una descripción normal de los errores e instrucciones sobre cómo reaccionar - dijeron que llegarían un día ;)


¡Y dicen que el mercado es perfecto! ¡Ja!


Con respecto a Sleep() - siempre es una tontería utilizarlo. Pero sería mejor hacer una pausa entre las operaciones - utilizar LastTradeTime. Estoy terminando (rehaciendo) la biblioteca trade_lib&info_lib.mqh - la publicaré en la wiki y te daré el enlace. Todas estas cuestiones se resuelven allí (parcialmente). Debería haber muchos menos errores.


Ya escribí que estos errores se pueden evitar "directamente" - enviando OrderSend en un bucle, hasta que devuelva un valor distinto de menos 1. Pero la cuestión es de principio: ¿qué pasa? Recibo errores de 5-6 tipos diferentes a la vez. Si saco una solución para hoy, mañana aparecerán donde no se esperan. Si opero en demo, será mejor que resuelva este tema. Tendré pérdidas más tarde.


Eso es todo lo que pienso por ahora, si se me ocurre algo más, te lo digo ;)


Gracias :)
Intente ejecutar este Asesor Experto en su EA. Tal vez te den algunas ideas. O - si operas en una demo - pon alertas similares en tus EAs... quién sabe... ¿y si no abren todos los tratos?
 
A mí también me dan errores así todo el tiempo. Y también me siento en Alpari. ¿Tal vez debería probar con otra empresa de corretaje? ¿Tal vez no sea culpa de MT?