Erreur numéro 6 - page 11

 
en 50 minutes de travail sur des graphiques de 10 minutes seulement 2 requêtes. plus d'erreurs. ajoutons le dictionnaire du méta-éditeur et postons les changements
 
l'erreur 138 requote peut facilement se produire. potentiellement avec 10 EAs en fonctionnement, le temps d'attente pour la libération du sémaphore peut être de 30 secondes ou plus. pendant ce temps, le prix peut facilement changer. dans ce cas, utilisez la fonction RefreshRates et prenez une nouvelle valeur d'offre ou de demande. ou demandez à MarketInfo un nouveau prix. 129 - même erreur, mauvais prix - le prix est allé trop loin et il y a eu plusieurs changements de prix pendant le temps d'attente. 1 - ce n'est pas du tout une erreur. elle apparaît lorsque vous essayez de modifier un ordre avec les mêmes valeurs que celles que vous avez déjà définies. il est étrange que cela se produise lorsque vous confirmez manuellement une transaction alors que vous l'avez rejetée.


Merci, mais...
Le dernier EA que j'ai posté a un retard de 3 secondes et un glissement de 50 ( !) pips. Prix
12 graphiques de 3 secondes chacun - le prix n'aura pas le temps de courir aussi loin. Ou est-ce que je comprends mal quelque chose ?
 
Ajouté RefreshRates à l'expert (code ci-dessous). Les erreurs numéro 1 s'accumulent maintenant.
J'espère que vous pourrez le retrouver. "Goutte à goutte" signifie environ une fois toutes les 2-3 minutes. Si ce n'est pas le cas, le serveur est probablement trop proche ou l'ordinateur trop rapide. Une partie de mon processeur est occupée par un paquet de réseaux neuronaux, donc MT obtient 50%... Maintenant... Ici, on désactive le réseau neuronal (il y a un bouton de pause, contrairement à d'autres programmes). L'erreur numéro un n'a pas disparu, mais elle est devenue un peu moins fréquente. MT "mange" 55-99% du CPU. Je l'allume... MT obtient 1,5 fois moins de temps CPU. Les erreurs sont aussi devenues plus fréquentes.

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


 
Pour résumer, je suppose. Il semble que tout expert, sauf celui qui travaille tout seul, ait besoin de sémaphores de protection. Je vais essayer la nouvelle fonctionnalité introduite par les développeurs lundi (et Rosh a dit que le développeur ne veut pas changer la version ! Je devrais le contacter plus souvent, il n'est qu'à une centaine de postes). En fait, merci beaucoup aux développeurs. Merci également à Rosh et à Composer. Cependant, nous attendrons jusqu'à lundi :)
 
Non, pas avant lundi, c'est sûr =)))
Le Sud nous appelle, et la nouvelle fonctionnalité sera rapidement testée dans une semaine =))))).

...et merci aussi, au moins quelqu'un a essayé de résoudre les bugs ;)
 
Pour résumer, je suppose. Il semble que tout expert, sauf celui qui travaille tout seul, ait besoin de sémaphores de protection. Je vais essayer la nouvelle fonctionnalité introduite par les développeurs lundi (et Rosh a dit que le développeur ne veut pas changer la version ! Je devrais le contacter plus souvent, il n'est qu'à une centaine de posts). En fait, merci beaucoup aux développeurs. Merci également à Rosh et à Composer. Cependant, à lundi :)<br / translate="no">


Quark, j'ai écrit sur le développeur, pas sur les développeurs. :) Tu comprends ? Dans certaines religions, c'est Dieu, dans d'autres, c'est une autre adresse.
De plus, j'ai écrit que mes 9 EAs fonctionnaient bien sur un compte. Mais vous êtes bon pour trouver les conditions dans lesquelles MT4 pellete quelque chose de mauvais :)
 
<br / translate="no">non, pas avant lundi =)))


A lundi :)


Le Sud nous appelle et la nouvelle f-fonction sera testée rapidement dans une semaine =)))))


Un grand bonjour au Sud.


...et merci aussi, au moins quelqu'un a essayé de résoudre les bugs ;)


Avec une erreur. Et combien d'entre eux...
 
<br / translate="no">Quark, j'ai écrit sur le développeur, pas sur les développeurs. :)


Je ne faisais que plaisanter :) Bien que le principe soit le même partout. Si vous demandez correctement, vous obtenez une réponse. Si vous jurez, vous êtes banni :)


Et j'ai aussi écrit que mes 9 EAs fonctionnent bien sur le même compte. Mais vous êtes bon pour trouver les conditions dans lesquelles MT4 pellete quelque chose de faux :)


72 fenêtres avec 12 de mes conseillers - également. Puis j'ai ajouté le 13, et voilà... En général, bien sûr, si je prends le dernier EA posté dans cette branche et que je l'utilise aux montres au lieu des minutes, et que j'augmente la pause de 3 secondes à 30 (comme vous l'avez suggéré, d'ailleurs) il n'y aura pas d'erreurs. Le résultat est donc atteint, un résultat positif...

C'est dommage pour les gars du forum anglais, mais je ne vais pas traduire nos messages pour eux. Pas en bonne santé :(

Bonne chance,
Quark
 
Malgré le travail effectué, l'erreur numéro 6 continue de se produire. Cela se produit lorsque MT utilise l'optimiseur et ouvre une position en même temps. Je l'ai déjà attrapé deux fois. Si les conditions d'ouverture d'une position sont toujours valables, l'Expert Advisor s'exécute à nouveau et ouvre une position, sans problème.
 
Il semble que lorsque l'optimiseur fonctionne, l'erreur 6 est beaucoup plus probable. Le redémarrage de l'ordinateur, les mesures MT etc. ne changent pas la situation.

Le problème se produit sur différents EA. La logique de chacun d'entre eux a été modifiée avec des sémaphores (comme Slava l'a suggéré) et un délai (Rosh) - de sorte que dans les 10 secondes données, seul 1 EA fonctionnait. Toutes les erreurs que j'ai mentionnées ci-dessus ont disparu (jusqu'à présent), sauf la numéro 6.