Fehler Nummer 6 - Seite 6

 
Nicht schlecht, aber im Grunde dasselbe :)<br / translate="no"> Was ist SetTrace?


Upsie :) Ich werde jetzt einen Werbespot machen, passen Sie auf - http://forexsystems.ru/phpBB/viewtopic.php?t=694&start=45
 
хэндлов не хватает.


Kann ich die Anzahl der Griffe in den Systemeinstellungen (W'XP) ändern und wie?
 
Eine weitere Frage an die Entwickler.

Was ist der richtige Weg, um es zu tun:

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



2.

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



3. gleichgültig.
4. Wir sollten die Rückgabe einstellen und den nächsten Auftrag im nächsten Tick bearbeiten
5. Das sollte auf andere Weise geschehen.

Lassen Sie mich das erklären. Angenommen, wir haben zwei offene Aufträge, die beide geschlossen werden müssen. Die Schleife

for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)



Sie schließt den Auftrag Null ab, woraufhin der erste Auftrag zu Null wird. Dann wird versucht, den ersten Auftrag abzuschließen, und es wird ein Fehler auftreten. Richtig?

Ich glaube nicht, dass alle Fehler des EA, die in diesem Thread diskutiert werden, mit diesem Problem zusammenhängen, z. B. hat der allgemeine Fehler nichts damit zu tun. Aber wenn ich richtig liege, erklärt das vielleicht a) gesperrte und ähnliche Aufträge und b) die Tatsache, dass wir mehr als einen Expert Advisor brauchen, damit Fehler auftreten.



 
хэндлов не хватает.


Можно ли изменить число хэндлов в системных установках (W'XP) и как?

Wenn ein Programm keine Handles hat, wird es mit Fehlern geschrieben, ansonsten gibt es genug Handles für alle.
 
Natürlich ist die zweite Option richtig, aber statt return sollten Sie Sleep() für 30 Sekunden eingeben und das war's.
 
Ich sollte hinzufügen, dass durch die Ersetzung
for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)
von
for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--)
Ich ging von Fehler 139 auf 138 und 4109
(requote, Nicht initialisierter String in Array)
Der letzte hat überhaupt keine Kommentare...
 
Die zweite Variante ist natürlich richtig, aber statt return sollten Sie Sleep() für 30 Sekunden eingeben und das war's.


Bei 10 Expert Advisors im Minutentakt, 30 Sekunden für jeden... Falsch, es ist unmöglich, so zu leben.
 
Glauben Sie, dass es das ist? Ich hatte 12 Fenster, jedes mit einer anderen Währung und einem anderen Expert Advisor. Ich habe den Handel in 11 von ihnen verboten (Live-Handel zulassen). Alle meine Fehler kommen immer noch von ihnen. Ein weiterer Fehler.
 
Конечно, второй вариант правилен, только вместо return надо ставить Sleep() секунд на 30 и усе.


Mit 10 Experten im Abstand von einer Minute, 30 Sekunden für jeden... Falsch, das ist keine Art zu leben.



Das ist die Art zu leben, und was Sie tun, ist ein Test für die Stärke des Eisens.
 
Eine neue Version von EA zum Testen. Was sich geändert hat:
1. Zyklen festgelegt.
2. Die Magik-Nummer ist auf die Bar-Startzeit privatisiert. Dies führt, wenn ich mich nicht irre, zu einer Verzögerung beim Öffnen. Das heißt, EA mit mn 7 wird 7 Sekunden nach Beginn des Balkens geöffnet. Es wird eine Überlastung des Servers, der CPU und Konflikte mit dem 2,5-Sekunden-Maximum vermeiden, falls es noch irgendwo vorhanden ist...

Aber leider gibt es immer noch Fehler.

Die Regeln sind dieselben - öffnen Sie mehrere Fenster in einem beliebigen Zeitrahmen (z. B. Minuten) und warten Sie.

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] + nMagic) 
		bIsBarEnd = true;
	timePrev = Time[0] + nMagic;
	
	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);
			}
		}
	}

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

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

// ------

Grund der Beschwerde: