Error número 6 - página 6

 
No está mal, pero en esencia es lo mismo :)<br / translate="no"> ¿Qué es SetTrace?


Oopsie :) Voy a hacer un anuncio ahora, presta atención - http://forexsystems.ru/phpBB/viewtopic.php?t=694&start=45
 
хэндлов не хватает.


¿Puedo cambiar el número de asas en la configuración del sistema (W'XP) y cómo?
 
Otra pregunta a los desarrolladores.

Cuál es la forma correcta de hacerlo:

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



2.

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



3. indiferente.
4. Debemos establecer la devolución y procesar la siguiente orden en el siguiente tick
5. Debería hacerse de otra manera.

Déjeme explicarle. Supongamos que tenemos dos órdenes abiertas y que ambas deben cerrarse. El bucle

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



Cerrará la orden cero, tras lo cual la primera orden se convertirá en cero. Entonces intentará cerrar la primera orden, y habrá un error. ¿Verdad?

No creo que todos los errores del EA discutidos en este hilo estén relacionados con este tema, por ejemplo, el error común no tiene nada que ver. Pero si estoy en lo cierto, tal vez explique a) la orden bloqueada y cosas por el estilo y b) el hecho de que necesitemos varios EAs para que aparezcan los errores.



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


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

Si a un programa le faltan asas, se escribe con errores. De lo contrario, hay suficientes asas para todos.
 
Por supuesto, la segunda opción es correcta, pero en lugar de return deberías poner Sleep() durante 30 segundos y ya está.
 
Debo añadir que al sustituir
for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)
por
for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--)
Pasé del error 139 al 138 y al 4109
(requote, Cadena no inicializada en el array)
El último no tiene ningún comentario...
 
Por supuesto, la segunda variante es correcta, pero en lugar de return deberías poner Sleep() durante 30 segundos y ya está.


Con 10 Asesores Expertos en un intervalo de un minuto, 30 segundos para cada... Error, es imposible vivir de esa manera.
 
¿Crees que es eso? Tenía 12 ventanas, cada una con una moneda diferente y un Asesor Experto diferente. Prohibí (Permitir el comercio en vivo) el comercio en 11 de ellos. Todos mis errores siguen viniendo de ellos. Un error más.
 
Конечно, второй вариант правилен, только вместо return надо ставить Sleep() секунд на 30 и усе.


Con 10 expertos en un intervalo de un minuto, 30 segundos para cada... Se equivoca, esta no es forma de vivir.



Esta es la manera de vivir, y lo que estás haciendo es una prueba de la fuerza del hierro.
 
Una nueva versión de EA para probar. Lo que ha cambiado:
1. Ciclos fijos.
2. El número de Magik se privatiza a la hora de inicio del bar. Esto da, si no me equivoco, un retraso en la apertura. Es decir, el EA con mn 7 se abrirá 7 segundos después del inicio de la barra. Evitará la sobrecarga del servidor, la CPU del ordenador y el conflicto con el máximo de 2,5 segundos, si es que todavía está ahí en alguna parte...

Pero, por desgracia, los errores persisten.

Las reglas son las mismas: abrir varias ventanas, en cualquier plazo (minutos, por ejemplo) y 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);
}

// ------