Fehler Nummer 6 - Seite 5

 
Jetzt habe ich im Terminal nachgesehen - ich hatte gestern einige Probleme. <br / translate="no">.
2005.08.11 11:15:00 ****l EURUSD,H1: OrderSend fehlgeschlagen mit Fehler #139
2005.08.11 11:07:12 TradeDispatcher: alle Handelskontexte sind belegt

Ich habe diesen EA ausgesteckt und werde sehen, was als nächstes passiert.


Hier ist sie. Das ist es. Jetzt geht's los. 139 ist gesperrt. Von wem, warum - das ist nicht klar. Dann werden es 2, 6 usw. sein.

Was am meisten enttäuscht, ist, dass es in diesem EA nichts gibt, was ihn von anderen unterscheidet. Entweder kann ich dieses "Etwas" nicht sehen, oder ein Expert Advisor hat eine Störung, die nicht jede Stunde auftritt und daher nicht von allen bemerkt wird.

Daher meine Frage an alle: Haben Sie solche Einträge in Ihren Protokollen?

Rosh, verwendest du Alpari? Wenn ja, eine Frage an Alpari: Funktioniert Ihr Server richtig?

Was ich heute Abend herausgefunden habe :(

1. Der Expert Advisor arbeitet von selbst, EINS, und gibt entweder keine Fehler oder gibt sie so selten, dass über Nacht nicht genug dafür ist.

2. In Kombination mit mehreren anderen Expert Advisors (genauer gesagt, mit einem, für sechs Währungen), wurde der Fehler reproduziert, wenn auch nicht in einer Stunde, sondern in 4 Stunden.

Was folgt hieraus?
1. Es gibt irgendeinen Fehler in MT (oder in meinem Expert Advisor, aber das ist so einfach, dass es unwahrscheinlich ist), der es mir manchmal nicht erlaubt, Trades zu eröffnen. Und schließen Sie sie übrigens auch.
Natürlich können Sie das auch umgehen:

while(nResult == -1) { nResult = OrderSend(...); }



Ich muss Ihnen wohl nicht sagen, dass dies ein SEHR schlechter Programmierstil ist und den Makler beleidigen könnte...

2. Ich habe den Expert Advisor nun umgeschrieben, um ihn einfacher zu machen, gleichzeitig aber auch einen Fehler zu verursachen. Ich werde sie in den nächsten Stunden veröffentlichen. Wenn es scheint, der Fehler wird zwei Expert Advisors erfordern, was kann ich tun, werde ich zwei posten :)






 
2. Ich bin gerade dabei, den Expert Advisor umzuschreiben, um ihn zu vereinfachen und gleichzeitig einen Fehler zu verursachen. Ich werde sie in den nächsten Stunden veröffentlichen. Wenn sich herausstellt, dass der Fehler zwei Expert Advisors erfordert, was kann man tun, ich werde zwei posten :)<br / translate="no">

und wir werden prüfen
 
Quark, ich habe eine Diagnose gestellt, es ist die Schuld Ihres EA. Sobald ein Alert aus Ihrem EA kommt (ich benutze sie überhaupt nicht) - bekomme ich sofort
2005.08.11 13:01:19 TradeDispatcher: all trade context is busy


Die Alarm- und Sperrzeiten sind identisch. Ich habe mir den EA-Code überhaupt nicht angesehen.

 
Nun. Hier ist der neue Superexperte, der im Alleingang Fehler produziert. Bisher bin ich über den Fehler 139 nicht hinausgekommen, also werde ich weiter testen.

So verwenden Sie es: Öffnen Sie für jede Währung (EURUSD, EURJPY, USDCHF, GBPUSD, GBPJPY,
GBPCHF, USDJPY, AUDUSD, EURGBP, USDCAD, EURCHF, EURAUD) ein Stundenchart.
Jedes Diagramm verfügt über einen Expert Advisor. Sie interagieren nicht, da sie alle unterschiedliche Karten haben.

Die Positionen werden sofort eröffnet, eine pro Chart. Zu Beginn der nächsten Stunde müssen die Positionen umgekehrt werden, und so weiter.

Bei mir sind 2 Fehler auf einmal aufgetreten, so dass es im Prinzip möglich ist, 2 Stunden zu warten.

Wenn Sie eine besondere Beziehung zu dem Handelsserver haben, ist es wahrscheinlich besser, ein reguläres Konto für den Test zu verwenden. Ich benutze Alpari.

Beachten Sie auch (ich gehe davon aus, dass dies ein unabhängiger Fehler ist) die Position der Pfeile zur Positionseröffnung. Da die Position auf einem neuen Balken eröffnet wird, sollte sich der Pfeil theoretisch auf demselben Balken befinden.

Wenn Sie nicht eine Stunde warten wollen, können Sie auch die Minutencharts öffnen. Der Fehler ist reproduzierbar.

Noch einmal: Es handelt sich um den Fehler 139. Gleichzeitig ist es mir mit dieser Methode noch nicht gelungen, die Fehler 2 und 6 zu bekommen. Und das waren sie meistens auch schon vorher. Es wird also wohl noch mehr Beiträge geben.

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;

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

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

// ------
 
Quark, ich habe eine Diagnose gestellt, es ist die Schuld Ihres EA. Sobald Alert aus Ihrem EA kommt (ich benutze sie überhaupt nicht) - bekomme ich <br/ translate="no">
2005.08.11 13:01:19 TradeDispatcher: all trade context is busy


Die Alarm- und Sperrzeiten sind identisch. Ich habe mir den EA-Code überhaupt nicht angesehen.



Das wäre in Ordnung, aber ich habe Warnungen eingeführt, nachdem ich festgestellt habe, dass die Geschäfte nicht ausgeführt werden. Außerdem befindet sich die Warnmeldung im Code direkt nach OrderSend.

Jetzt werde ich versuchen, zu Print zu wechseln, aber ich bezweifle es...
 
Übrigens, das ist interessant. Wenn ich einen EA neu kompiliere, wird die Variable, die ich zur Berechnung von bIsBarEnd verwende, zurückgesetzt. Wenn ich also im Editor F5 drücke, sollten alle EAs alte Positionen schließen und neue eröffnen. Ich habe F5 gedrückt. Es gibt 12 Währungen (und Expert Advisors). Es wurden 3 aktualisiert. Hm?

Setzen Sie Print anstelle von Alert ein, um die Annahme von Rosh zu überprüfen. Der einzige Unterschied ist, dass die Fehlermeldung 139 jetzt im Protokoll und nicht mehr auf dem Bildschirm erscheint.
 
Ich weiß es nicht, ich habe mir den Code angesehen; es gibt nichts zu bemängeln. Ich würde diesen Ort anhand von Bars auswählen, nicht anhand der Öffnungszeit.
	The bool bIsBarEnd = false; if(timePrev != Time[0]) bIsBarEnd = true; timePrev = Time[0];



Und die Sache ist nicht klar:
2005.08.11 13:08:12 '18708' : close order #680413 buy 0.10 EURUSD at 1.2385 sl: 0.0000 tp: 0.0000 at price 1.2408
und dann

2005.08.11 13:08:13 '18708': Auftrag #680413 buy 0.10 EURUSD bei 1.2385 sl: 1.2275 tp: 0.0000 geschlossen bei Preis 1.2408

Mit anderen Worten, zunächst läuft der Auftrag ohne Stopps und Take-Profit, und dann erscheint plötzlich ein Stop-Loss im Auftrag

 
Ich weiß es nicht, ich habe mir den Code angesehen; es gibt nichts zu bemängeln. Ich würde über diesen Platz durch Balken entscheiden, nicht durch den Zeitpunkt der Eröffnung<br / translate="no">
bool bIsBarEnd = false; if(timePrev != Time[0]) bIsBarEnd = true; timePrev = Time[0]
;



Und die Sache ist nicht klar:
2005.08.11 13:08:12 '18708' : close order #680413 buy 0.10 EURUSD at 1.2385 sl: 0.0000 tp: 0.0000 at price 1.2408
und dann

2005.08.11 13:08:13 '18708': Auftrag #680413 buy 0.10 EURUSD bei 1.2385 sl: 1.2275 tp: 0.0000 geschlossen bei Preis 1.2408

Mit anderen Worten, zunächst läuft der Auftrag ohne Stopps und Take-Profit, und dann erscheint plötzlich ein Stop-Loss im Auftrag



Wenn Sie einen getesteten Code haben, würde ich gerne "via Bars" sehen :)

Was den Nullpunkt betrifft, so habe ich ihn in init zugewiesen und ändere ihn nirgendwo sonst. Fehler, denke ich. Mann, seit ich C++ aufgegeben habe, dachte ich nicht, dass ich jemals wieder Entomologie machen müsste.

In der Tat, ein Experte, in der Tat. Aber es ist so einfach, dass sich eine Frage stellt: Besteht nicht die Gefahr, dass andere EAs sich genauso verhalten? Wenn man bedenkt, dass der Fehler nur auftritt, wenn es viele Expert Advisors gibt, und dass er verschiedene Fehler produziert.

Ich habe zum Beispiel einen Expert Advisor mit MACD + ADX + Stochastic. Wird der Programmierer, wenn er es im Tester getestet hat (wo es definitionsgemäß keine Serverfehler gibt), sich einfach hinsetzen und die Frage "Alle Bedingungen sind hier erfüllt, aber der Handel ist nicht geschlossen" überprüfen? Wahrscheinlich nicht... Gefährlicher Fehler.
 
<br / translate="no">
Wenn Sie einen getesteten Code haben, würde ich gerne "via Bars" sehen :)



Zum Beispiel so:
int start() { int total,ticket,totalExpert; //---- SetTrace(); if (Balken>b) { b=Balken;
 
Nicht schlecht, aber im Grunde das Gleiche :)
Was ist SetTrace?