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: 4776
Beiträge: 42468
Benutzer: 7.141
Aktive Benutzer: 136
Links: 83
Wir begrüßen unseren neuesten Benutzer: elfriede
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 4 Stunden
- elfriede
vor 4 Tagen
- renkotrade
vor 2 Wochen
- Evimeri
vor 2 Wochen
- T.Rader
vor 2 Wochen
- qdjack

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

Empfehlungen

Like Tree1Likes
Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Nov 2020
Beiträge: 29
blackjack01 befindet sich auf einem aufstrebenden Ast
Standard Buy Limit Sell Limit

Hallo

Ich habe einen EA geschriebn der den Stop mit einen EMA , SMA usw nacchzieht . jetzt möchte ich ihn erweitern das ich ein BUYLIMIT SELLLIMIT setzten kann und es ebenso nachgezogen wird bis es ausgelöst wird . Könnte mir bitte jemand helfen .

Danke

Hier der EA bis jetzt .

////+------------------------------------------------------------------+
//| 19.10.2021
//| V1.0 |
//+------------------------------------------------------------------+




#property strict


input ENUM_TIMEFRAMES Timeframe = PERIOD_CURRENT;
input int PeriodMA = 50;
input ENUM_MA_METHOD Methode;

input int Magic = 7777;

int OnInit() {

return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason){

}

void OnTick() {

double ma = iMA (_Symbol,Timeframe,PeriodMA,0,Methode,PRICE_CLOSE, 0 );




for(int i = OrdersTotal()-1; i >= 0; i--){
if(OrderSelect(i,SELECT_BY_POS)){
if(OrderSymbol() ==_Symbol) {
if (OrderType()== OP_BUY){


double sl = ma;
sl = NormalizeDouble(sl,_Digits);
if(sl > OrderStopLoss()){
if(OrderModify(OrderTicket(),OrderOpenPrice(),sl,O rderTakeProfit(),OrderExpiration())){
Print(__FUNCTION__," > Order #",OrderTicket()," wurde angepasst ...");
}
}
}else if(OrderType() == OP_SELL){
double sl = ma;
sl = NormalizeDouble(sl,_Digits);
if(sl < OrderStopLoss() || OrderStopLoss () == 0){
if(OrderModify(OrderTicket(),OrderOpenPrice(),sl,O rderTakeProfit(),OrderExpiration())){
Print(__FUNCTION__," > Order #",OrderTicket()," wurde angepasst ...");
}
}
}
}
}
}
}
Mit Zitat antworten
  #2 (permalink)  
Alt vor 4 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.602
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Auch eine etwas komprimierte Version des alten Codes.
In Zukunft bitte den Code mittels Benutzung des Icons #
schreiben und auch Leerzeichen und Leerzeilen benutzen. Das erleichtert sehr die Lesbarkeit.

Code:
void OnTick() {
   double ma = NormalizeDouble(iMA (_Symbol, Timeframe, PeriodMA, 0, Methode, PRICE_CLOSE, 0), _Digits);

   for (int i = OrdersTotal()-1; i >= 0; i--){
      if (OrderSelect(i, SELECT_BY_POS)){
         if (OrderSymbol() == _Symbol) {

            if (OrderType() == OP_BUY) {
               if (ma > OrderStopLoss()) {
                  if (OrderModify(OrderTicket(), OrderOpenPrice(), ma, OrderTakeProfit(), OrderExpiration())) {
                     Print(__FUNCTION__, " > Order #", OrderTicket(), " wurde angepasst ...");
                  }
               }
            }
            
            if (OrderType() == OP_SELL) {
               if (ma < OrderStopLoss() || OrderStopLoss () == 0) {
                  if (OrderModify(OrderTicket(), OrderOpenPrice(), ma, OrderTakeProfit(), OrderExpiration())) {
                     Print(__FUNCTION__, " > Order #", OrderTicket(), " wurde angepasst ...");
                  }
               }
            }

            if (OrderType() == OP_BUYLIMIT) {
               if (ma > OrderOpenPrice()) {
                  if (OrderModify(OrderTicket(), ma, OrderStopLoss(), OrderTakeProfit(), OrderExpiration())) {
                     Print(__FUNCTION__, " > Order #", OrderTicket(), " wurde angepasst ...");
                  }
               }
            } 

            if (OrderType() == OP_SELLLIMIT) {
               if (ma < OrderOpenPrice()) {
                  if (OrderModify(OrderTicket(), ma, OrderStopLoss(), OrderTakeProfit(), OrderExpiration())) {
                     Print(__FUNCTION__, " > Order #", OrderTicket(), " wurde angepasst ...");
                  }
               }
            }  
         }
      }
   }
}
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Nov 2020
Beiträge: 29
blackjack01 befindet sich auf einem aufstrebenden Ast
Standard hallo

Danke für die super Hilfe .

Jetzt hätte ich noch ein Problem .

Was muss ich eingeben das der EA nur auf den Aktuellen Chart Arbeitet .

Danke
Mit Zitat antworten
  #4 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.602
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Nichts! Mit der Verwendung von _Symbol oder auch Symbol() wir immer auf die Basis des Charts zugegriffen, auf dem sich der EA befindet.

Traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #5 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Nov 2020
Beiträge: 29
blackjack01 befindet sich auf einem aufstrebenden Ast
Standard Hallo

Ok danke . Er hat mir zum dax wenn ich einen offen trade im h4 habe ohne EA . Und ich starte den ea im dax zb D1 zieht er mir da den stop nach obwohl es ein neues Fenster ist . Lg
Mit Zitat antworten
  #6 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.602
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Aha, das ist ein anderer, spezieller Fall.

Wenn da steht:

Code:
for (int i = OrdersTotal()-1; i >= 0; i--){
   if (OrderSelect(i, SELECT_BY_POS)){
      if (OrderSymbol() == _Symbol) {
dann werden all die Orders berücksichtigt, die bereits als MarketOrder offen im Markt liegen und die gesetzten Pendingorders des Handelsinstrumentes, welches hinter der Variablen _Symbol liegt. In Deinem Fall werden also alle o.g. Orders des Handelsinstrumentes DAX selektiert, egal auf welchem Chart und welchem TimeFrame sie sich befinden. Insofern werden nun auch Orders des H4 berücksichtigt, obwohl der EA auf dem TimeFrame D1 liegt. Das kann ggf. auch zu Beeinflussungen bzgl. SL, TP, Close etc. führen.

Der Ausweg besteht darin, jedem Chart eine sog. MagicNumber als Variable zu vergeben, die bei der Orderöffnung in der Funktion OrderSend dann unbedingt mit anzugeben ist.
Und dann würde der Code erweitert zu:

Code:
for (int i = OrdersTotal()-1; i >= 0; i--){
   if (OrderSelect(i, SELECT_BY_POS)){
      if (OrderSymbol() == _Symbol && OrderMagicNumber() == MagicNumber) {
Nun werden nur die Orders berücksichtigt, die dem Symbol _Symbol und der in der Order stehenden MagicNumber entsprechen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #7 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Nov 2020
Beiträge: 29
blackjack01 befindet sich auf einem aufstrebenden Ast
Standard EA

Danke für die Top Hilfe

Ist das so Richtig ???

Danke

Code:
////+------------------------------------------------------------------+
//|  03.11.2021
//|  V4.0                                                            |
//+------------------------------------------------------------------+




#property strict


input ENUM_TIMEFRAMES  Timeframe = PERIOD_CURRENT;
input ENUM_TIMEFRAMES  TimeframeLimit = PERIOD_CURRENT;

input int PeriodMA = 50;
input int PeriodLimit = 10;

input ENUM_MA_METHOD Methode;
input ENUM_MA_METHOD MethodeLimit;

input ENUM_MA_METHOD MagicNumber;

input int Magic = 12345;

int OnInit() {

  return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason){

}

void OnTick() {

   
   double ma = NormalizeDouble(iMA (_Symbol, Timeframe, PeriodMA, 0, Methode, PRICE_CLOSE, 0), _Digits);

   for (int i = OrdersTotal()-1; i >= 0; i--){
      if (OrderSelect(i, SELECT_BY_POS)){
         if (OrderSymbol()  == _Symbol && OrderMagicNumber() == MagicNumber) {

            if (OrderType() == OP_BUY) {
               if (ma > OrderStopLoss()) {
                  if (OrderModify(OrderTicket(), OrderOpenPrice(), ma, OrderTakeProfit(), OrderExpiration())) {
                     Print(__FUNCTION__, " > Order #", OrderTicket(), " wurde angepasst ...");
                  }
               }
            }
            
            if (OrderType() == OP_SELL) {
               if (ma < OrderStopLoss() || OrderStopLoss () == 0) {
                  if (OrderModify(OrderTicket(), OrderOpenPrice(), ma, OrderTakeProfit(), OrderExpiration())) {
                     Print(__FUNCTION__, " > Order #", OrderTicket(), " wurde angepasst ...");
                  }
               }
            }

  double maLimit = NormalizeDouble(iMA (_Symbol,TimeframeLimit, PeriodLimit, 0, MethodeLimit, PRICE_CLOSE, 0), _Digits);


            if (OrderType() == OP_BUYLIMIT) {
               if (maLimit > OrderOpenPrice()) {
                  if (OrderModify(OrderTicket(), maLimit, OrderStopLoss(), OrderTakeProfit(), OrderExpiration())) {
                     Print(__FUNCTION__, " > Order #", OrderTicket(), " wurde angepasst ...");
                  }
               }
            } 

            if (OrderType() == OP_SELLLIMIT) {
               if (maLimit < OrderOpenPrice()) {
                  if (OrderModify(OrderTicket(), maLimit, OrderStopLoss(), OrderTakeProfit(), OrderExpiration())) {
                     Print(__FUNCTION__, " > Order #", OrderTicket(), " wurde angepasst ...");
                  }
               }
            }  
         }
      }
   }
}
Mit Zitat antworten
  #8 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.602
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Code:
input ENUM_MA_METHOD MagicNumber;

input int Magic = 12345;
input ENUM_MA_METHOD MagicNumber;
fliegt raus!

input int Magic = 12345;
muss lauten
input int MagicNumber = 12345;

Und ganz wichtig: in der Funktion OrderSend() muss dann bei der Orderaufgabe auch die MagicNumber mit eingegeben werden.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #9 (permalink)  
Alt vor 3 Wochen
Neues Mitglied
 
Registriert seit: Nov 2020
Beiträge: 29
blackjack01 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Code:
input ENUM_MA_METHOD MagicNumber;

input int Magic = 12345;
input ENUM_MA_METHOD MagicNumber;
fliegt raus!

input int Magic = 12345;
muss lauten
input int MagicNumber = 12345;

Und ganz wichtig: in der Funktion OrderSend() muss dann bei der Orderaufgabe auch die MagicNumber mit eingegeben werden.

traderdoc

Hallo

Und ganz wichtig: in der Funktion OrderSend() muss dann bei der Orderaufgabe auch die MagicNumber mit eingegeben werden.


Das verstehe ich nicht . Könntest mir das genau zeigen .

Danke !!!!!
Mit Zitat antworten
  #10 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.602
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Naja, ich schrieb doch, dass die Orders jedes Charts eine eigene MagicNumber bekommen müssen, um eine Unterscheidung der Orders unterschiedlicher TimeFrames bzw. Charts vornehmen zu können.
Und damit der EA entsprechend korrekt selektieren kann, müssen die Orders die jeweilige MagicNumber bekommen. Und die müssen sie über die Funktion OrderSend() bekommen.
Ein Blick in diese Funktion per Hilfe-F1 zeigt folgende Funktionsstruktur:

Code:
int  OrderSend( 
   string   symbol,              // symbol 
   int      cmd,                 // operation 
   double   volume,              // volume 
   double   price,               // price 
   int      slippage,            // slippage 
   double   stoploss,            // stop loss 
   double   takeprofit,          // take profit 
   string   comment=NULL,        // comment 
   int      magic=0,             // magic number 
   datetime expiration=0,        // pending order expiration 
   color    arrow_color=clrNONE  // color 
   );
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
Antwort

Lesezeichen

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 20:59 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.
-----------------------------------------------------------------------------------------------------------------------------