|
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 |
|
|||
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 ..."); } } } } } } } |
|
|||
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 ..."); } } } } } } }
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
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 |
|
|||
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. |
|
|||
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
|
|
|||
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) { 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) { traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
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 ..."); } } } } } } } |
|
|||
Code:
input ENUM_MA_METHOD MagicNumber; input int Magic = 12345; 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. |
|
|||
Zitat:
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 !!!!! |
|
|||
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 );
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|