Fehler Nummer 6 - Seite 7

 
<br / translate="no"> Das ist die Art zu leben, und was du tust, ist ein Test für die Stärke des Eisens.


Siehe den Beitrag über die neue Version des EA. Das Bügeleisen erhält nun eine Sekunde pro Experte. Es wurde auch nicht besser.
Dann wurde uns versprochen, dass die Anfragen in die Warteschlange gestellt werden.
 
Natürlich ist die zweite Variante richtig, aber statt return sollte man Sleep() für 30 Sekunden verwenden und das war's.


Hier ist die von Rosh vorgeschlagene Variante. Die Fehler bleiben bestehen.

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

// ------



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


was ist der OrderType(), wenn wir die Kauforder geschlossen haben (die erste Bedingung wurde erfüllt)
Versuchen Sie, die Prüfung in der zweiten Bedingung wegzulassen, d.h. ich schreibe es immer so:

if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed);
 
Nun, wie immer scheint Rosh Recht zu haben. Ich habe Sleep(0) eingestellt, zwei Experten geben bereits Fehler an. Ich gebe Sleep(100) ein, vier Experten funktionieren, beim Hinzufügen des fünften treten Fehler auf (fünf Fenster, fünf Währungen, je ein Experte).

Ich stelle Sleep(200) ein - fünf Experten kommen weiter (fast, manchmal geben sie noch Fehler. Ich habe es nicht geschafft, 5 Expert Advisors ohne Fehler mit dieser Methode zu bekommen).

Im Moment spreche ich nur über die Fehler 138 und 139.

Ich warte immer noch auf Tipps von den Entwicklern.

Rosh, besonderen Dank an dich, auch wenn ich deinen Ansatz mit dem Slip nicht mag.
 
Ein solcher 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)
;


Was ist OrderType(), wenn wir einen Kaufauftrag geschlossen haben (die erste Bedingung ist erfüllt)
Versuchen Sie, das Häkchen in der zweiten Bedingung wegzulassen, d.h. ich schreibe es immer so:

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



Ja, wahrscheinlich. Ich habe zwar eine Pause eingelegt, aber wer kennt sie nicht, die Multitasking-Typen.

Ich habe es ausprobiert. Ich fühle mich besser, aber ich habe immer noch Fehler :)
 
<br / translate="no">
Rosh, besonderen Dank an dich, auch wenn mir dein Ansatz mit dem Zettel nicht gefällt.


Na ja... Leben ist auch nicht das Beste, was ich je gesehen habe. Es gibt so etwas wie den Tod irgendwann. Ich mag sie auch nicht, aber der Entwickler ändert die Version nicht. :)
 


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


Na ja... Das Leben ist auch nicht das Beste, was ich je gesehen habe. Es gibt so etwas wie das Sterben an einem bestimmten Punkt. Ich mag sie auch nicht, aber der Entwickler ändert die Version nicht. :)


Ja, und die API gibt keine Auskunft :)
Aber Sie können immer eine Lösung finden :)) Zum Beispiel mit Sleep():)))

Aber im Allgemeinen ist dies eine tiefgründige Bemerkung. Sie sollten sich öfter bei Entwicklern bewerben. Sie sagen, sie antworten manchmal :))))
 
Kann ich mal mit euch reden? =)))
Weil Sie so eine Diskussion 4 Seiten lang führen, und ich schweige (Trinktag =))...


Zu den Fehlern:
Fehler #6 - keine Verbindung mit dem Handelsserver - kann an einer schlechten Verbindung liegen. Ich habe eine Data-Over-Voice-Mietleitung, und wenn man den Hörer abnimmt, sinkt die Geschwindigkeit drastisch. Genau in diesen Momenten tritt der Fehler also auf.

Fehler #139 - Auftrag ist gesperrt - Ich denke, es ist nur ein Glitch: wie Terminal tut etwas mit dieser Position und EA kann nicht mit ihm in diesem Moment arbeiten. Ich weiß nicht, ich kann keine andere Erklärung finden (

Error #138 - requote - könnte auch durch die Verbindung verursacht werden. Beachten Sie die Kanalauslastung bei Fehlern.

All dies ist jedoch reine Spekulation. Ich habe die Entwickler lange um eine normale Fehlerbeschreibung und eine Anleitung zum Reagieren gebeten - sie sagten, sie würden eines Tages kommen ;)



Bezüglich Sleep() - es ist immer dumm, es zu benutzen. Aber es ist besser, zwischen den Trades eine Pause zu machen - verwenden Sie LastTradeTime. Ich bin dabei, die Bibliothek trade_lib&info_lib.mqh fertigzustellen (neu zu erstellen). All diese Fragen werden dort (teilweise) gelöst. Es sollte viel weniger Fehler geben.


Das sind alle meine Gedanken bis jetzt, wenn mir noch etwas einfällt - ich werde es sagen ;)
 
<br/ translate="no"> Kann ich mal mit euch reden? =)))
Sie haben eine vierseitige Diskussion, und ich schweige (Alkoholtag =))...


Ja, ich habe eine Menge Lärm gemacht... :)


Zu den Fehlern:
Fehler #6 - keine Verbindung mit dem Handelsserver - kann an einer schlechten Verbindung liegen. Ich habe eine Data-Over-Voice-Mietleitung, und wenn man den Hörer abnimmt, sinkt die Geschwindigkeit drastisch. Genau in diesen Momenten tritt der Fehler also auf.


Ich habe eine Standleitung, gute Qualität. Auch hier erklärt eine schlechte Verbindung nicht, warum JEDES Mal, wenn mehrere EAs gleichzeitig etwas tun, ein Fehler auftritt. Mit einem Megabit-Kanal (theoretisch)!


Fehler #139 - Auftrag ist gesperrt - es scheint mir, dass es nur eine Störung ist: wie das Terminal tut etwas mit dieser Position und Expert Advisor kann nicht mit ihm in diesem Moment arbeiten. Ich weiß es nicht, ich kann keine andere Erklärung finden (


Einverstanden. Es bleibt nur noch eine Kleinigkeit, um herauszufinden, WO er das tut. Der Experte ist so einfach, dass es ihn einfach nicht gibt. Aber vielleicht liegt es ja an mir, dass ich es nicht sehen kann. (siehst du einen elch? nein. und ich nicht. aber er ist JETZT)


Der Fehler #138 - requote kann durchaus auf die Verbindung zurückzuführen sein. Prüfen Sie die Link-Last bei Fehlern.


Ich weiß es nicht. Wenn Sie in Moskau nicht mit zwei EAs gleichzeitig über eine Standleitung handeln können, können Sie überhaupt nicht handeln.

Ich dachte an Neuanmeldungen. Wie hoch muss zum Beispiel der Mindestbetrag sein, damit der Preis nicht aus dem Ruder läuft? 5 Punkte? 10? Ich habe 15 eingegeben - der Fehler bleibt.


All dies ist jedoch reine Spekulation. Ich habe die Entwickler lange um eine normale Fehlerbeschreibung und eine Anleitung zum Reagieren gebeten - sie sagten, sie würden eines Tages kommen ;)


Und sie sagen, der Markt sei perfekt! Ha!


Bezüglich Sleep() - es ist immer dumm, es zu benutzen. Aber es wäre besser, eine Pause zwischen den Trades zu machen - verwenden Sie LastTradeTime. Ich bin dabei, die trade_lib&info_lib.mqh-Bibliothek fertigzustellen (neu zu erstellen) - ich werde sie ins Wiki stellen und dir den Link geben. All diese Fragen werden dort (teilweise) gelöst. Es sollte viel weniger Fehler geben.


Ich habe bereits geschrieben, dass diese Fehler "direkt" umgangen werden können - indem OrderSend in einer Schleife gesendet wird, bis es einen anderen Wert als minus 1 zurückgibt. Aber die Frage ist prinzipiell - was passiert? Ich erhalte 5-6 verschiedene Fehlertypen auf einmal. Wenn ich für heute eine Umgehung zeichne, werden sie morgen dort auftauchen, wo sie nicht erwartet werden. Wenn ich mit der Demo handele, sollte ich dieses Problem besser lösen. Ich werde später Verluste haben.


Das sind alle meine Gedanken für den Moment, wenn mir noch etwas einfällt, werde ich es euch sagen ;)


Danke :)
Versuchen Sie, diesen Expert Advisor auf Ihrem EA auszuführen. Vielleicht bekommen Sie ein paar Ideen. Oder - wenn Sie auf einer Demo handeln - setzen Sie ähnliche Alarme in Ihre EAs... wer weiß... Was ist, wenn sie nicht alle Geschäfte öffnen?
 
Ich bekomme auch ständig solche Fehler. Und ich sitze auch in Alpari. Vielleicht sollten Sie es bei einem anderen Maklerunternehmen versuchen? Vielleicht ist es nicht die Schuld von MT?