|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
TrailingStopEA für alle Charts funktioniert nicht
Hallo,
der folgende Code ist der vollständige EA um den es geht. Wenn ich beispielsweise den EA auf EURUSD installiere, dann setzt er nur TrailingStops bei EURUSD mit der MagicNumber von 1000, doch warum ignoriert der EA offene Order bei beispielsweise GBPUSD mit MagicNumber 1000? Die MagicNumber ist natürlich immer gleich. Ich lasse die Order mit einer MagicNumber von 1000 jeweils mit ein Buy und Sell - Script eröffnen. Mit freundlichen Grüßen Elfenstein PHP-Code:
|
|
|||
Wenn der für alle Orders funktionieren soll, dann versuchs mal ohne MagicNumber-Abfrage. Nur nach OrderType() gehn.
For-Loops sind echt nicht mein Gebiet, aber kanns sein, dass Deine immer nur eine Order sucht, und die Restlichen nicht? Code:
for(i=OrdersTotal()-1;i>=0;i--){ if(OrderSelect(i,SELECT_BY_POS)){ if(OrderType()==OP_SELL{ Sell-TS einrichten...} if(OrderType()==OP_BUY){ Buy-TS einrichten...} Wenn ein EA nur SL, TP, BreakEven, TrailingStop nachträglich einfügen/anpassen soll, er eigentlich nur Orders, die schon im Markt sind, modifizieren soll, muss er dann eigentlich Init/Deinit haben? Statt OnStart() könnte man vielleicht OnEvent() oder sowas benutzen? Man müsste man ihn nicht mal in den Chart ziehn, sondern nur im EA-Verzeichnis haben. Aktivieren oder Stoppen müsste man ihn auch nicht, oder? |
|
|||
Überlese mal das von @MA-EA ganz schnell!
Da muss nach OrderSelect() noch die Abfrage nach dem OrderSymbol(), um z.B. EURUSD von GBPUSD zu unterscheiden, weil für beide dieselbe MN gilt. Das ist per se schon mal ungünstig. Wenn möglich immer pro Chart eine eigene MN vergeben. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Danke für die Hilfe @MA-EA.
Das "for(i=OrdersTotal()-1;i>=0;i--)" und das "for(i = 0; i < OrdersTotal(); i++)" macht genau das gleiche und bei beispielsweise 3 offenen Ordern, wird die For-Schleife auch 3 mal eine Schleife machen. Und egal wie du den EA programmierst, dieser muss für die Ausführung immer erst auf ein Chart installiert sein. Init/Deinit muss für die korrekte Ausführung im Code generell nicht vorhanden sein. @traderdoc, dein Beitrag konnte mir diesmal nicht helfen, doch natürlich danke trotzdem. Hier ist nun der fertige EA, der genau das macht, so wie ich es möchte: Code:
int Trailing = 20; int Profit = 80; int Step = 2; int MN = 1000; int i, r; double pBid, pAsk, pp; double cal; int init() { return(0); } int deinit() { return(0); } int start() { for(i = 0; i < OrdersTotal(); i++) { r = OrderSelect(i, SELECT_BY_POS, MODE_TRADES); pp = MarketInfo(OrderSymbol(), MODE_POINT); if (OrderMagicNumber() == MN) { if (OrderType() == OP_BUY) { pBid = MarketInfo(OrderSymbol(), MODE_BID); if (pBid - OrderOpenPrice() > Profit * pp) { if (OrderStopLoss() < pBid - (Trailing + Step) * pp) { cal = pBid - (Trailing * pp); if (cal > OrderStopLoss()) r = OrderModify(OrderTicket(),OrderOpenPrice(),cal,OrderTakeProfit(),0,0); } } } if (OrderType() == OP_SELL) { pAsk = MarketInfo(OrderSymbol(), MODE_ASK); if (OrderOpenPrice() - pAsk > Profit * pp) { if (OrderStopLoss() > pAsk + (Trailing + Step) * pp) { cal = pAsk + (Trailing * pp); if (cal < OrderStopLoss()) r = OrderModify(OrderTicket(),OrderOpenPrice(),cal,OrderTakeProfit(),0,0); } } } } } return(0); } |
|
|||
Und dennoch sollte saubererweise nach
if (OrderSymbol() == Symbol()) selektiert werden. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Damit der EA alle Order modifiziert und nicht nur des Symbols, wo der EA installiert ist, muss ich ja "if (OrderSymbol() == Symbol())" weglassen. Das war ja mein Ziel, dass alle Order mit der MagicNumber von 1000 der Stoploss modifiziert wird, weshalb ich ja auch diese Frage stellte: "Wenn ich beispielsweise den EA auf EURUSD installiere, dann setzt er nur TrailingStops bei EURUSD mit der MagicNumber von 1000, doch warum ignoriert der EA offene Order bei beispielsweise GBPUSD mit MagicNumber 1000?"
|
|
|||
Danke für deine Hilfe Indikator-Trading, doch es gibt kein Problem, denn ich schrieb doch schon: "Hier ist nun der fertige EA, der genau das macht, so wie ich es möchte" Und zwar alle Order aller Symbole mit Beachtung der MagicNumber den Trailingstop modifizieren zu lassen. Ich hatte nur noch dem traderdoc geantwortet. Thema kann geschlossen werden.
|
Lesezeichen |
Stichworte |
trailingstop alle charts |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|