Erreur numéro 6 - page 7

 
<br / translate="no">C'est ainsi qu'il faut vivre, et ce que tu fais, c'est tester la force du fer.


Voir le post sur la nouvelle version de l'EA. Le fer est maintenant donné une seconde par expert. Ça ne s'est pas arrangé.
Ensuite, on nous a promis que les demandes étaient mises en file d'attente.
 
Bien sûr, la deuxième variante est correcte, mais au lieu de return, il faut utiliser Sleep() pendant 30 secondes et c'est tout.


Voici la variante proposée par le Rosh. Les erreurs demeurent.

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

// ------



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


quel est le OrderType() si nous avons fermé l'ordre d'achat (la première condition a été remplie)
Essayez de laisser tomber le contrôle dans la deuxième condition, c'est-à-dire que je l'écris toujours comme ceci :

if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua) ; if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed) ;
 
Eh bien, comme toujours, Rosh semble avoir raison. J'ai mis Sleep(0), deux experts donnent déjà des erreurs. Je mets Sleep(100), quatre experts fonctionnent, des erreurs apparaissent lors de l'ajout du cinquième (cinq fenêtres, cinq devises, un expert pour chacune).

J'ai mis Sleep(200) - cinq experts y arrivent (presque, parfois ils donnent encore des erreurs). Je n'ai pas réussi à obtenir 5 conseillers experts sans erreur en utilisant cette méthode).

Il s'agit uniquement des erreurs 138 et 139 pour l'instant.

J'attends toujours des conseils de la part des développeurs.

Rosh, un grand merci à vous, même si je n'aime pas votre approche de la glisse.
 
Un tel moment<br / translate="no">
if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua) ; else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed)
;


Que signifie OrderType() si nous avons fermé un ordre d'achat (la première condition a été remplie) ?
Essayez de laisser tomber le contrôle dans la deuxième condition, c'est-à-dire que je l'écris toujours de cette façon :

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



Oui, probablement. Bien que je mette une pause après ce si, mais qui les connaît, les multitâches.

Je l'ai essayé. Je me sens mieux, mais j'ai encore des erreurs :)
 
<br / translate="no">
Rosh, un grand merci à vous, même si je n'aime pas votre approche du glissement.


Eh bien... la vie n'est pas la meilleure que j'ai vue non plus. Il y a une telle chose que de mourir à un moment donné. Je n'aime pas non plus, mais le développeur ne change pas la version. :)
 


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


Eh bien... la vie n'est pas non plus la meilleure chose que j'ai jamais vue. Il y a une telle chose que de mourir à un moment donné. Je n'aime pas non plus, mais le développeur ne change pas la version. :)


Ouais, et l'API ne sort pas :)
Mais vous pouvez toujours trouver une solution de contournement :)) En utilisant Sleep(), par exemple :)))

Mais en général, c'est une remarque profonde. Vous devriez postuler plus souvent auprès des développeurs. Ils disent qu'ils répondent parfois : ))))
 
Je peux avoir une discussion avec vous ? =)))
Parce que vous avez une telle discussion pendant 4 pages, et je suis silencieux (jour de beuverie =))...


À propos des erreurs :
Erreur n° 6 - aucune connexion avec le serveur commercial - peut être due à une mauvaise connexion. J'ai une ligne louée Data Over Voice, et lorsque vous décrochez le téléphone, la vitesse chute de façon spectaculaire. C'est donc précisément à ces moments-là que cette erreur se produit.

Erreur #139 - l'ordre est verrouillé - Je pense que c'est juste un problème : comme le terminal fait quelque chose avec cette position et EA ne peut pas travailler avec elle à ce moment-là. Je ne sais pas, je ne trouve pas d'autre explication (

Error #138 - requote - cela peut aussi être causé par la connexion. Regardez la charge du canal pendant les erreurs.

Tout ceci n'est que pure spéculation, cependant. J'ai longtemps demandé aux développeurs une description normale des erreurs et des instructions sur la façon de réagir - ils ont dit qu'ils viendraient un jour ;)



En ce qui concerne Sleep() - il est toujours stupide de l'utiliser. Mais il est préférable de faire une pause entre les transactions - utilisez LastTradeTime. Je suis en train de terminer (refaire) la bibliothèque trade_lib&info_lib.mqh. Toutes ces questions y sont résolues (partiellement). Il devrait y avoir beaucoup moins d'erreurs.


C'est tout ce que j'ai pensé jusqu'à présent, si je pense à autre chose - je le dirai ;)
 
<br/ translate="no">Je peux discuter avec vous ? =)))
Vous avez une discussion de quatre pages, et je suis silencieux (jour de beuverie =))...


Oui, j'ai fait beaucoup de bruit... :)


À propos des erreurs :
Erreur n° 6 - aucune connexion avec le serveur commercial - peut être due à une mauvaise connexion. J'ai une ligne louée Data Over Voice, et lorsque vous décrochez le téléphone, la vitesse chute de façon spectaculaire. C'est donc précisément à ces moments que cette erreur se produit.


J'ai une ligne louée, de bonne qualité. Encore une fois, une mauvaise connexion n'explique pas pourquoi une erreur se produit CHAQUE fois que plusieurs EAs font quelque chose simultanément. Avec un canal mégabit (en théorie) !


Erreur #139 - l'ordre est bloqué - il me semble que c'est juste un problème : comme le terminal fait quelque chose avec cette position et le conseiller expert ne peut pas travailler avec elle à ce moment-là. Je ne sais pas, je ne trouve pas d'autre explication (


D'accord. Il ne reste plus qu'une bagatelle pour comprendre POURQUOI il le fait. L'expert est si simple qu'il n'existe tout simplement pas d'endroit de ce genre. Même si, bien sûr, c'est peut-être moi qui ne le vois pas. (voyez-vous un élan ? non. et je ne le vois pas. mais il est MAINTENANT)


Erreur n° 138 - la requalification pourrait bien être due à la connexion. Vérifier la charge des liens pendant les erreurs.


Je ne sais pas. Si vous ne pouvez pas négocier deux EA en même temps à Moscou sur une ligne louée, vous ne pouvez pas négocier du tout.

Je pensais aux requêtes. Par exemple, quel est le glissement minimum qu'il faut mettre pour que le prix ne s'envole pas. 5 points ? 10 ? J'ai mis 15 - l'erreur reste.


Tout ceci n'est que pure spéculation, cependant. J'ai longtemps demandé aux développeurs une description normale des erreurs et des instructions sur la façon de réagir - ils ont dit qu'ils viendraient un jour ;)
.


Et ils disent que le marché est parfait ! Ha !


En ce qui concerne Sleep() - il est toujours stupide de l'utiliser. Mais il serait préférable de faire une pause entre les transactions - utilisez LastTradeTime. Je suis en train de terminer (refaire) la bibliothèque trade_lib&info_lib.mqh - je vais la poster sur le wiki et vous donner le lien. Toutes ces questions y sont résolues (partiellement). Il devrait y avoir beaucoup moins d'erreurs.


J'ai déjà écrit que ces erreurs peuvent être contournées "directement" - en envoyant OrderSend dans une boucle, jusqu'à ce qu'il renvoie une valeur autre que moins 1. Mais la question est de principe - que se passe-t-il ? Je reçois des erreurs de 5-6 types différents en même temps. Si je dessine une solution de rechange pour aujourd'hui, elle apparaîtra demain là où on ne l'attend pas. Si je fais du commerce sur la démo, je dois résoudre ce problème. J'aurai des pertes plus tard.


C'est tout ce que je pense pour le moment, si je pense à autre chose, je vous le dirai ;)


Merci :)
Essayez d'exécuter cet Expert Advisor sur votre EA. Tu auras peut-être des idées. Ou - si vous tradez sur une démo - mettez des alertes similaires dans vos EAs... qui sait... Et s'ils n'ouvrent pas tous les marchés ?
 
Je reçois des erreurs comme ça tout le temps aussi. Et je suis assis à Alpari aussi. Vous devriez peut-être essayer une autre société de courtage ? Peut-être que ce n'est pas la faute de MT ?