Fehler Nummer 6 - Seite 11

 
in 50 Minuten Arbeit an 10-Minuten-Charts nur 2 Requotes. keine Fehler mehr. fügen wir das Wörterbuch des Meta-Editors hinzu und veröffentlichen die Änderungen
 
Fehler 138 requote kann leicht auftreten. bei 10 arbeitenden EAs kann die Wartezeit für die Semaphor-Freigabe 30 Sekunden oder mehr betragen. während dieser Zeit kann sich der Preis leicht ändern. in diesem Fall verwenden Sie die Funktion RefreshRates und nehmen einen neuen Bid- oder Ask-Wert. oder fragen Sie MarketInfo nach einem neuen Preis. 129 ist der gleiche Fehler, falscher Preis - der Preis ist zu weit gegangen und es gab mehrere Preisänderungen während der Wartezeit. 1 - es handelt sich nicht um einen Fehler. er tritt auf, wenn Sie versuchen, einen Auftrag mit denselben Werten zu ändern, die Sie bereits festgelegt haben. es ist seltsam, dass er auftritt, wenn Sie einen Handel manuell bestätigen, wenn Sie ihn ablehnen


Danke, aber...
Der letzte EA, den ich gepostet habe, hat einen Lag von 3 Sekunden und 50 (!) Pips Slippage. Preis
12 Diagramme zu je 3 Sekunden - der Preis hat keine Zeit, so weit zu laufen. Oder habe ich etwas missverstanden?
 
RefreshRates zum Experten hinzugefügt (Code unten). Die Fehler Nummer 1 häufen sich jetzt.
Hoffentlich können Sie sie aufspüren. "Tropfen" bedeutet etwa alle 2-3 Minuten. Wenn das nicht der Fall ist, ist der Server wahrscheinlich zu nah, oder der Computer ist zu schnell. Ich habe einen Teil meiner CPU durch ein neuronales Netzwerkpaket belegt, also bekommt MT 50%... Nun... Deaktivieren Sie hier das neuronale Netz (im Gegensatz zu einigen anderen Programmen gibt es eine Pausentaste). Fehler Nummer eins ist zwar nicht verschwunden, aber etwas seltener geworden. MT "frisst" 55-99 % der CPU. Ich schalte es ein... MT erhält 1,5 Mal weniger CPU-Zeit. Auch Fehler traten häufiger auf.

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


 
Zusammenfassend lässt sich sagen, dass Es scheint, dass jeder Experte, außer denen, die allein arbeiten, schützende Semaphoren benötigt. Ich werde die neue Funktion, die von den Entwicklern am Montag eingeführt wurde, ausprobieren (und Rosh sagte, der Entwickler wolle die Version nicht ändern! Ich sollte mich öfter mit ihm in Verbindung setzen, es ist nur hundert Posts entfernt). Eigentlich vielen Dank an die Entwickler. Dank auch an Rosh und Composer. Aber wir werden bis Montag warten :)
 
Nein, sicher nicht vor Montag =)))
Der Süden ruft, und die neue Funktion wird umgehend in einer Woche getestet =)))))

...und danke auch, wenigstens hat jemand versucht, die Fehler zu beseitigen ;)
 
Zusammenfassend lässt sich sagen, dass Es scheint, dass jeder Experte, außer denen, die allein arbeiten, schützende Semaphoren benötigt. Ich werde die neue Funktion, die von den Entwicklern eingeführt wurde, am Montag ausprobieren (und Rosh sagte, dass der Entwickler die Version nicht ändern will! Ich sollte mich öfter mit ihm in Verbindung setzen, es ist nur hundert Posts entfernt). Eigentlich vielen Dank an die Entwickler. Dank auch an Rosh und Composer. Wie auch immer, wir sehen uns am Montag :)<br / translate="no">


Quark, ich habe über den Entwickler geschrieben, nicht über die Entwickler. :) Verstehen Sie das? In einigen Religionen ist es Gott, in anderen ist es eine andere Adresse.
Außerdem habe ich geschrieben, dass meine 9 EAs auf einem Konto gut funktionieren. Aber Sie sind gut darin, die Bedingungen zu finden, wenn MT4 etwas falsch schaufelt :)
 
<br / translate="no"> nein, nicht vor Montag =)))


Bis Montag :)


Der Süden ruft, und die neue f-Funktion wird in einer Woche umgehend getestet =)))))


Ein großes Hallo an den Süden.


...und danke auch, wenigstens hat jemand versucht, die Fehler zu beseitigen ;)


Mit einem Fehler. Und wie viele von ihnen...
 
<br / translate="no"> Quark, ich habe über den Entwickler geschrieben, nicht über die Entwickler. :)


Ich habe nur einen Scherz gemacht :) Das Prinzip ist jedoch überall dasselbe. Wenn Sie richtig fragen, erhalten Sie eine Antwort. Wenn du fluchst, wirst du gesperrt :)


Und ich habe auch geschrieben, dass meine 9 EAs auf demselben Konto gut laufen. Aber Sie sind gut darin, die Bedingungen zu finden, wenn MT4 etwas falsch schaufelt :)


72 Fenster mit 12 meiner Ratsmitglieder - auch. Dann fügte ich den 13. hinzu, und los geht's... Im Allgemeinen, natürlich, wenn ich die letzte EA in diesem Zweig gepostet und verwenden Sie es auf Uhren anstelle von Minuten, und erhöhen Pause von 3 Sekunden bis 30 (wie Sie vorgeschlagen, durch die Art und Weise) gibt es keine Fehler. Das Ergebnis ist also erreicht, ein positives Ergebnis...

Es ist schade um die Leute aus dem englischen Forum, aber ich werde unsere Beiträge nicht für sie übersetzen. Nicht bei guter Gesundheit :(

Viel Glück!
Quark
 
Trotz der durchgeführten Arbeiten tritt Fehler Nummer 6 weiterhin auf. Dies geschieht, wenn MT den Optimierer verwendet und gleichzeitig eine Position eröffnet. Ich habe es bereits zweimal erwischt. Ein erneutes Ausführen des Expert Advisors - wenn die Bedingungen für das Eröffnen einer Position noch gültig sind - führt dazu, dass eine Position problemlos eröffnet wird.
 
Es scheint, dass Fehler 6 viel wahrscheinlicher ist, wenn der Optimierer läuft. Maßnahmen wie Neustart des Computers, MT usw. ändern nichts an der Situation.

Das Problem tritt bei verschiedenen EAs auf. Die Logik in allen wurde mit Semaphoren (wie von Slava vorgeschlagen) und Verzögerung (Rosh) modifiziert - so dass in den gegebenen 10 Sekunden nur 1 EA funktionierte. Alle oben genannten Fehler sind (bisher) verschwunden, außer Nummer 6.