Ich lerne gerade, einen Ratgeber zu schreiben... - Seite 4

 

Wenn Ihr Expert Advisor mehrwährungsfähig ist, müssen Sie dies tun.

Dies umso mehr, als die Bid- und Point-Werte wahrscheinlich bereits durch MarketInfo()festgelegt (angegeben) sind.

Ich habe einmal einen Zweig für einen Multicurrency Expert Advisor eingerichtet. Werfen Sie einen Blick darauf und einige Fragen werden geklärt....

Frage zum Multicurrency Expert Advisor".

 

Und hier speziell zur Änderung

Frage des Mehrwährungsberaters'.

 

Ich habe diese Variante gemacht... Unmittelbar nach dem Öffnen rufe ich ModifyPos() auf.

OrderSend (...);

ModifyPos();



void ModifyPos()
  {
   if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
    { 
     if (OrderType()==OP_BUY)
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,Bid- TakeProfit*Point,0,Red);
     if (OrderType()==OP_SELL)
     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,Ask+ TakeProfit*Point,0,Red);
    }  
  }

Stop - 20.

Gewinnmitnahme - 100

Meldung im Protokoll - OrderModify-Fehler 130

 

Versuchen Sie eine Kaufposition für die Take-Positionen

Ask+ TakeProfit*Point

Denken Sie darüber nach! Warum liegt der Take Profit bei einer Kaufposition plötzlich unter dem aktuellen Kurs?

Kein Wunder, dass ein Fehler erzeugt wird

Und dasselbe gilt für die Verkaufsposition...

Wenn Sie die Gewinnmitnahme nicht ändern müssen, ist es besser, dies zu tun:

OrderModify(OrderTicket(), OrderOpenPrice(), Bid- Stop*Point,
                                                     OrderTakeProfit(), 0, Blue);
Ähnliches gilt für die Verkaufsseite
 
rid >> :

Denken Sie darüber nach! Wie kommt es, dass Ihr Take-Profit bei einer Kaufposition plötzlich unter dem aktuellen Kurs liegt?

Kein Wunder, dass ein Fehler erzeugt wird!

Vielen Dank, Rid!

Ich habe nicht aufgepasst)... es hat funktioniert und sogar funktioniert)

void ModifyPos()
   {
        if (OrderSelect(0, SELECT_BY_POS)==true) // Если есть открытый ордер
            { 
               if (OrderType()==OP_BUY)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,OrderTakeProfit(),0,Red);
               if (OrderType()==OP_SELL)
                   OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,OrderTakeProfit(),0,Red);
            }      
   }
 

Der letzte Fehler, der jetzt während der Tests im Protokoll erscheint, ist der OrderSend-Fehler 138.

Dieser Fehler tritt ohne Unterbrechung auf, wenn keine Geschäfte getätigt werden, d.h. bei jedem Tick tritt dieser Fehler auf.

Sobald ein Auftrag ausgelöst wird, verschwindet der Fehler... der Auftrag wird geschlossen und der Fehler tritt erneut auf...

Es sieht so aus, als würde er versuchen, einen Auftrag ohne Signale zu senden... Aber ich verstehe nicht, warum, da es eine(if)-Bedingung für Verkauf und Kauf gibt

 
ALex2008 писал(а) >>

Der letzte Fehler, der jetzt während der Tests im Protokoll erscheint, ist der OrderSend-Fehler 138.

Dieser Fehler tritt ohne Unterbrechung auf, wenn keine Geschäfte getätigt werden, d.h. bei jedem Tick tritt dieser Fehler auf.

Sobald ein Auftrag ausgelöst wird, verschwindet der Fehler... der Auftrag wird geschlossen und der Fehler tritt erneut auf...

Es sieht so aus, als würde er versuchen, einen Auftrag ohne Signale zu senden... Aber ich verstehe nicht, warum, da wir Bedingungen haben(wenn) zu verkaufen und zu kaufen.

nicht lesen sorgfältig lesen https://book.mql4.com/ru/content es ist alles da

 

Lesen und Verstehen sind zwei verschiedene Dinge... Ich möchte in der Praxis verstehen)

Es gibt eine Bedingung für die Eingabe, nachdem diese Bedingungen erfüllt sind, wird das Steuerelement an die Funktion übergeben, die den Auftrag öffnet...

Ich kann nicht verstehen, wie OrderSend versucht, unter Umgehung der Bedingungen zu arbeiten... und logischerweise erzeugt es einen Fehler... weil es keine Eingabebedingungen gibt

 
bool RefreshRates( )

Aktualisiert die Daten in vordefinierten Variablen und Zeitreihen-Arrays. Diese Funktion wird verwendet, wenn ein Expert Advisor oder ein Skript über einen längeren Zeitraum Berechnungen durchgeführt hat und aktualisierte Daten benötigt. Sie gibt TRUE zurück, wenn die Daten aktualisiert wurden, andernfalls FALSE. Die Daten dürfen nicht aktualisiert werden, nur weil sie dem aktuellen Zustand des Client-Terminals entsprechen. Expert Advisors und Skripte arbeiten mit ihrer eigenen Kopie der historischen Daten. Die Kopie der Daten des aktuellen Symbols wird beim ersten Start des Expert Advisors oder Skripts erstellt. Bei jedem nächsten Start des Expert Advisors (das Skript wird einmal ausgeführt und ist nicht von eingehenden Ticks abhängig) wird die ursprünglich erstellte Kopie aktualisiert. Während der Zeit, in der der Expert Advisor oder das Skript läuft, können ein oder mehrere neue Ticks hinzukommen, so dass die Daten veraltet sein können.

//------------------------------------------------------------------------------

Versuchen Sie, diese Funktion vor der Ausführung von OrderSend einzufügen

Siehe auch: Eröffnungs- und Einstellungsbeschlüsse 2008-05. :

Eröffnungs- und Einstellungsbefehle2008-05-05 14:26:13

"Damit das Programm stabil und mit einer minimalen Anzahl von abgelehnten Handelsaufträgen arbeitet, sollten vor der Ausführung der Funktion OrderSend() die vom Programm verwendeten Parameter der Informationsumgebung mit den Funktionen MarketInfo() und RefreshRates() aktualisiert werden."

 
   RefreshRates();
   OrderSend(Symbol(), OP_SELL, Lot, Price, Slippage, 0, Profit, Comment, MAGIC,0, colorsell);

hilft nicht...

Grund der Beschwerde: