Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4621
Beiträge: 41668
Benutzer: 6.996
Aktive Benutzer: 183
Links: 82
Wir begrüßen unseren neuesten Benutzer: baalexeyfranesay3088
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 13 Stunden
- baalexeyfr...
vor 6 Tagen
- Tbened
vor einer Woche
- coinboy
vor 2 Wochen
- Kat34r
vor 2 Wochen
- Goldstream

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 113
Gesamt: 113
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 02.12.20
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 25
Elfenstein befindet sich auf einem aufstrebenden Ast
Standard 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:
#property copyright ""
#property link      ""
extern int TrailingStop 20;
extern int Profit 80;
extern int TrailingStep 2;
int MN 1000;
int ir;
double stopcal;

int init() {
   return(
0);
}

int deinit() {
   return(
0);
}

int start() {
   for(
0OrdersTotal(); i++) {
      
OrderSelect(iSELECT_BY_POSMODE_TRADES);
      if (
OrderMagicNumber() == MN) {
         if (
OrderType() == OP_BUY) {
            if (
Ask OrderOpenPrice() > Profit Point) {
               if (
OrderStopLoss() < Ask - (TrailingStop TrailingStep) * Point) {
                  
stopcal Ask - (TrailingStop Point);
                  if (
stopcal OrderStopLoss()) OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,0);
                  }
               }
         }
         if (
OrderType() == OP_SELL) {
            if (
OrderOpenPrice() - Bid Profit Point) {
               if (
OrderStopLoss() > Bid + (TrailingStop TrailingStep) * Point) {
                  
stopcal Bid + (TrailingStop Point);
                  if (
stopcal OrderStopLoss()) OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,0);
                  }
               }
         }
      }
   }
   return(
0);

Mit Zitat antworten
  #2 (permalink)  
Alt 02.12.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.074
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

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...}
Beschwert Euch von mir aus, dass ich wieder nen Thread kapere, aber:

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?

Mit Zitat antworten
  #3 (permalink)  
Alt 02.12.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.486
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Ü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.
Mit Zitat antworten
  #4 (permalink)  
Alt 09.12.20
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 25
Elfenstein befindet sich auf einem aufstrebenden Ast
Standard

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);
}
Mit Zitat antworten
  #5 (permalink)  
Alt 09.12.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.486
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #6 (permalink)  
Alt 11.12.20
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 25
Elfenstein befindet sich auf einem aufstrebenden Ast
Standard

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?"
Mit Zitat antworten
  #7 (permalink)  
Alt 11.12.20
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 175
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Na dann helfe ich dir mal...

Ich gehe davon aus, das du hier einfach nur ein Problem mit der nicht vorhanden Klammersetzung hast:
Code:
            
if(pBid - OrderOpenPrice() > Profit * pp)
{
 if(OrderStopLoss() < pBid - (Trailing + Step) * pp)
versuche es mal so:

Code:
           
if((pBid - OrderOpenPrice()) > (Profit * pp))
{
 if(OrderStopLoss() < (pBid - (Trailing + Step) * pp))
Mit Zitat antworten
  #8 (permalink)  
Alt 12.12.20
Neues Mitglied
 
Registriert seit: Feb 2017
Beiträge: 25
Elfenstein befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
trailingstop alle charts

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2021 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------