Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 342
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Hier ist die .cpp-Datei des Projekts, schauen Sie es sich an, und nach ein paar Google- und Yandex-Suchen habe ich überhaupt nichts Gescheites gefunden, es ist allgemein verständlich. Es scheint sogar einfach zu sein.
Aber wie funktioniert das? Ich bin mir nicht ganz sicher, wie man auf diese ddl verweisen - aus dem Code des EA? Wie? Zunächst sieht es so aus: #include <GetIntValue>.
2. Wenn man die DLL aufruft, muss man das Studio nicht eingeschaltet lassen, oder? wie wird es ausgeführt?
Bitte zeigen Sie das einfachste Beispiel für den Aufruf dieser DLL aus dem MQL-Code.
Ich verstehe das hier nicht...
Die Losgröße sollte exponentiell ansteigen (mit Multiplikator 2), wenn ein zweiter unidirektionaler Auftrag eröffnet wird.
Das ist das Ergebnis.
dann wie folgt
erhalten Sie ein Ergebnis wie dieses
Dann war's das.
Danke, ich habe verstanden... Ich habe es verstanden.
Wofür ist diese Zeile?
datetime o;
Ich habe eine weitere Frage: Ich habe einen Auftrag im Nachlauf. Wenn 1 unidirektionaler Auftrag offen ist, funktioniert alles gut, wenn mehr, funktioniert es aus irgendeinem Grund nicht. Und warum?
{
for(int i = 0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid - (TrailingStop + TrailingStep)*Point)
{
SL = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + (TrailingStop+ TrailingStep)*Point)
{
SL = NormalizeDouble (Ask+TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify (OrderTicket(), OrderOpenPrice(), SL,0,0);
}
}
}
}
}
}
}
Hier ist die .cpp-Datei des Projekts, schauen Sie es sich an, und nach ein paar Google- und Yandex-Suchen habe ich überhaupt nichts Gescheites gefunden, es ist allgemein verständlich. Es scheint sogar einfach zu sein.
Aber wie funktioniert das? Ich bin nicht ganz sicher, wie man auf diese ddl verweisen - aus dem Code des EA? Wie? Zunächst sieht es so aus: #include <GetIntValue>.
Das ist ungefähr so. Damit es funktioniert, müssen Sie die dll kompilieren und im Ordner experts/libraries ablegen (lesen Sie die Hilfe und das Tutorial, dort ist es ausführlich beschrieben).
2. Wenn man die DLL aufruft, muss man das Studio nicht eingeschaltet lassen, richtig? Wie wird es also ausgeführt?
Ich habe eine weitere Frage: Ich habe einen Auftrag im Nachlauf. Wenn 1 unidirektionaler Auftrag offen ist, funktioniert alles gut, wenn mehr, funktioniert es aus irgendeinem Grund nicht. Und warum?
{
for(int i = 0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
{
if(Bid - OrderOpenPrice() > TrailingStop*Point)
{
if (OrderStopLoss() < Bid - (TrailingStop + TrailingStep)*Point)
{
SL = NormalizeDouble(Bid - TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify(OrderTicket(),OrderOpenPrice(),SL,0,0);
}
}
}
if (OrderType() == OP_SELL)
{
if(OrderOpenPrice() - Ask > TrailingStop*Point)
{
if (OrderStopLoss() > Ask + (TrailingStop+ TrailingStep)*Point)
{
SL = NormalizeDouble (Ask+TrailingStop*Point,Digits);
if (OrderStopLoss() !=SL)
OrderModify (OrderTicket(), OrderOpenPrice(), SL,0,0);
}
}
}
}
}
}
}
Da Sie Parameter an die Funktion übergeben müssen, versuchen Sie Folgendes
bool IfProfTrail=false; // Nur für profitable Positionen verwenden - Breakeven-Modus
int TrailingStop=0; // Schleppabstand = 0 - Mindestabstand
int TrailingStep=1; // Schleppender Abstandsschritt
Herzlichen Dank!
Jetzt verstehe ich, wo das Problem liegt.
Für den Kauf habe ich verwendet:
Soweit ich weiß, ist der Kauf ein Kauf, aber iClose(Symbol(),Periode(),0) nimmt die Preise vom Angebot. Dies kann der Grund für den Fehler sein.
Aber hier stellt sich die Frage, denn der EA ist kein Pips-basierter EA, der Preis war lange Zeit in der Kaufzone und wurde mit jedem Tick aktualisiert.Jetzt verwende ich die folgende Kombination:
Warum wird der Handel nicht eröffnet? Es stellt sich heraus, dass der EA auf den Fehler stoppt und nicht sehen, weitere Preisbewegung?
Ich habe die Vorlage für meinen Expert Advisor von https://c.mql5.com/mql4/book/mq4/experts/tradingexpert.mq4 übernommen.
Sollte ich Ihrer Meinung nach der Fehlerbehandlungsfunktion in diesem EA eine Prüfung auf 129 und 138 Fehler hinzufügen?
Wenn ja, wie kann man das tun?
Zumindest müssen Sie eine eigene Funktion für die Eröffnung von Positionen/Aufträgen haben, die alle Fehler behandelt. Hier müssen Sie sich über die neuesten Preise informieren.
Ich habe mir keine Rohlinge angeschaut. Aber ich will sagen: der EA muss alle vom Server zurückgegebenen Fehler behandeln. Und das ist noch nicht genug. Es sollte in der Lage sein, seine Positionen nach einer unerwarteten Situation ohne Funktionsverlust und ohne Ausfall des Algorithmus wieder einzunehmen und seine Arbeit fortzusetzen, als ob nichts Außergewöhnliches passiert wäre.
Zumindest sollten Sie eine eigene Funktion zum Öffnen von Positionen/Aufträgen haben, die alle Fehler behandelt. Dort müssen Sie sich über die neuesten Preise informieren.
Ich habe mir keine Baupläne angesehen. Aber ich will sagen: Sie müssen alle vom Server zurückgegebenen Fehler in Ihrem EA behandeln. Und das ist nicht genug. Es muss in der Lage sein, nach einer unvorhergesehenen Situation seine Positionen wieder einzunehmen, ohne dass es zu einem Funktionsverlust oder einem Ausfall seines Algorithmus kommt, und seine Arbeit fortzusetzen, als ob nichts Außergewöhnliches passiert wäre.
Die Vorlage stammt aus einem Lehrbuch. Ich bin nicht wirklich gut im Umgang mit Fehlerfunktionen.
Bei Auftragseröffnung gibt es RefreshRates(); (Ich habe Bids und Asks durch Market Info ersetzt, wie vorgeschlagen).
Und eine Funktion zur Fehlerbehandlung:
Das wollte ich fragen. Ich möchte fragen: Darf ich eine weitere Zeile aus 129 Fehler hinzufügen?