Systemhandel

MQL5 Programmierung für Trader: Anwendungen und Expert Advisors verstehen
MetaTrader5
MQL5 Programmierung für Trader: Anwendungen und Expert Advisors verstehen

Teil 5: Anwendungen in MQL5 erstellen In "Teil 5: Anwendungen in MQL5 erstellen" des Buches über MQL5 Programmierung für Trader tauchen wir tiefer in die APIs des algorithmischen Handels ein. Dazu gehören die Analyse und Verarbeitung finanzieller Daten, die Visualisierung von Charts, Automatisierung und Interaktionen mit Nutzern. Wir beginnen mit den allgemeinen Prinzipien zur Erstellung von MQL-Programmen und betrachten die verschiedenen Ereignistypen, Funktionen und Modelle im Terminal. Außerdem werden wir den Zugang zu Zeitreihen, Operationen mit Charts und grafischen Objekten sowie die Prinzipien der Erstellung und Anwendung jedes MQL-Programms separat erkunden. Der MetaTrader 5 Terminal unterstützt fünf Arten von Programmen: technische Indikatoren, Expert Advisors (EAs) für automatisierten oder halbautomatisierten Handel, Skripte für einmalige Aufgaben, Dienste für Hintergrundoperationen und Bibliotheken für individuelle Funktionsmodule. Wir werden uns intensiv mit Indikatoren und Charts beschäftigen und Techniken erlernen, die auch für Expert Advisors anwendbar sind. Die Entwicklung von Expert Advisors wird im nächsten Teil des Buches behandelt, wo wir die automatische Ausführung von Aufträgen, die Formalisierung von Handelsstrategien und deren Testung sowie Optimierung anhand historischer Daten untersuchen. Wir lernen, wie man mit den standardmäßig integrierten Indikatoren arbeitet und wie wir eigene Anwendungen von Grund auf oder basierend auf anderen Indikatoren erstellen können. Alle kompilierten Programme werden im Navigator des MetaTrader 5 angezeigt, mit Ausnahme von EX5-Bibliotheken, die von anderen Programmen verwendet werden, jedoch keine separate Darstellung im Navigator haben. Am Ende werden wir ein umfassenderes Verständnis der Möglichkeiten der MQL5-Sprache und ihrer Anwendung im algorithmischen Handel gewinnen. Dies ermöglicht es uns, effektiv mit finanziellen Daten zu arbeiten und Handelsindikatoren sowie Expert Advisors zu erstellen.

2023.12.16
MQL5 Programmierung für Trader – Teil 4: Wichtige MQL5 APIs
MetaTrader5
MQL5 Programmierung für Trader – Teil 4: Wichtige MQL5 APIs

Teil 4: Wichtige MQL5 APIs In den vorherigen Abschnitten unseres Buches haben wir uns mit den Grundlagen der Programmiersprache MQL5 beschäftigt und deren Syntax, Anwendungsregeln und Schlüsselaspekte kennengelernt. Um jedoch praxisnahe Programme für die Datenverarbeitung und den automatisierten Handel zu schreiben, ist es wichtig, die zahlreichen integrierten Funktionen zu nutzen, die mit dem MetaTrader 5 Terminal interagieren. In "Teil 4: Wichtige MQL5 APIs" werden wir uns darauf konzentrieren, die integrierten Funktionen (MQL5 API) zu meistern und schrittweise in spezialisierte Subsysteme einzutauchen. Jedes MQL5-Programm kann eine Vielzahl von Technologien und Funktionalitäten verwenden. Daher macht es Sinn, mit den einfachsten und nützlichsten Funktionen zu beginnen, die in den meisten Programmen eingesetzt werden können. Zu den Hauptthemen gehören Array-Operationen, die Verarbeitung von Strings, Dateizugriffe, Datenkonvertierungen und Funktionen zur Benutzerinteraktion. Außerdem werden wir uns mit mathematischen Funktionen und der Verwaltung der Programmumgebung beschäftigen. Im Gegensatz zu einigen anderen Programmiersprachen erfordert die Verwendung der integrierten Funktionen der MQL5 API keine zusätzlichen Präprozessor-Direktiven. Die Namen aller MQL5 API-Funktionen sind im globalen Kontext (Namespace) verfügbar und können jederzeit bedingungslos aufgerufen werden. Wir werden auch die Möglichkeit besprechen, ähnliche Namen in verschiedenen Programmkontexten zu verwenden, wie beispielsweise Klassennamen oder benutzerdefinierte Namespaces. In solchen Fällen sollten Sie den Kontextauflösungsoperator verwenden, um die globale Funktion aufzurufen, über die wir im Abschnitt über verschachtelte Typen, Namespaces und den Kontextoperator '::' gesprochen haben. Programmierung erfordert oft Operationen mit verschiedenen Datentypen. In den vorherigen Abschnitten haben wir bereits die Mechanismen für die explizite und implizite Konvertierung der integrierten Datentypen gesehen. Diese sind jedoch nicht immer aus verschiedenen Gründen geeignet. Um eine präzisere Datenkonvertierung zwischen verschiedenen Typen zu ermöglichen, umfasst die MQL5 API eine Reihe von Konvertierungsfunktionen. Besonders Augenmerk liegt auf den Funktionen zur Konvertierung zwischen Strings und anderen Typen, wie Zahlen, Daten und Zeiten, Farben, Strukturen und Aufzählungen.

2023.12.15
Objektorientierte Programmierung in MQL5 – Teil 3 für Trader
MetaTrader5
Objektorientierte Programmierung in MQL5 – Teil 3 für Trader

Teil 3: Objektorientierte Programmierung in MQL5 In diesem Teil "Objektorientierte Programmierung in MQL5" tauchen wir tief in die Welt der objektorientierten Programmierung (OOP) mit der MQL5-Sprache ein. Die Softwareentwicklung ist oft mit der Herausforderung verbunden, mehrere Entitäten zu verwalten, was fortgeschrittene Technologien erfordert, um die Programmierung effizienter, produktiver und qualitativ hochwertiger zu gestalten. Die OOP-Technologie basiert auf dem Konzept von Objekten, die Variablen eines benutzerdefinierten Typs sind, die vom Programmierer mithilfe der MQL5-Tools definiert werden. Durch die Erstellung benutzerdefinierter Typen können wir Objekte modellieren und die Programmierung sowie die Wartung der Software erheblich vereinfachen. In diesem Abschnitt betrachten wir verschiedene Möglichkeiten, neue Typen zu definieren, einschließlich Klassen, Strukturen und Vereinigungen. Diese benutzerdefinierten Typen können Daten und Algorithmen kombinieren, um den Zustand und das Verhalten von Anwendungsobjekten zu beschreiben. Der Autor erläutert das Prinzip "teilen und herrschen" und zeigt, dass Objekte kleine Programme sind, die jeweils dafür verantwortlich sind, eine kleine, aber logisch abgeschlossene Aufgabe zu lösen. Sie können Objekte zu einem einzigen System kombinieren und Produkte sowie Dienstleistungen beliebiger Komplexität erstellen. Um den Nutzern das Verständnis der Möglichkeiten von MQL5 zu erleichtern, führt der Teil "Objektorientierte Programmierung in MQL5" die Grundsätze der OOP ein und bietet praktische Implementierungsbeispiele. Das Buch behandelt auch Vorlagen, Schnittstellen und Namensräume und zeigt die Flexibilität und Leistungsfähigkeit der OOP bei der Entwicklung von Programmen in MQL5.

2023.12.15
MQL5 Programmierung für Trader – Einführung in die Entwicklungsumgebung
MetaTrader5
MQL5 Programmierung für Trader – Einführung in die Entwicklungsumgebung

Teil 1: Einführung in MQL5 und die Entwicklungsumgebung Im ersten Teil des Buches mit dem Titel "Einführung in MQL5 und die Entwicklungsumgebung" werden die Grundlagen der MQL5-Sprache sowie die Entwicklungsumgebung behandelt. Eine der neuen Funktionen, die die MQL5-Sprache im Vergleich zu MQL4 (der Sprache von MetaTrader 4) bietet, ist die Unterstützung der objektorientierten Programmierung (OOP). Das macht sie C++ ähnlich. Auch wenn einige OOP-Funktionen bereits von MQL4 nach MQL5 übertragen wurden, könnte es für viele Nutzer ohne Programmiererfahrung eine Herausforderung sein, sich in der OOP zurechtzufinden. Das Ziel dieses Buches ist es, diesen Ansatz verständlich und zugänglich zu machen. Es dient als Ergänzung zum MQL5-Referenzhandbuch und behandelt alle Aspekte der MQL5-Programmierung, wobei sämtliche Prozesse detailliert erklärt werden. Entwickler können zwischen objektorientierten und prozeduralen Programmierstilen wählen oder beide kombinieren. Wer bereits Programmiererfahrung hat, kann die Grundlagen überspringen. C++-Programmierer werden es einfacher haben, MQL5 zu meistern, sollten jedoch auf die Unterschiede in der Sprache achten, um Fehler zu vermeiden. Mit MQL5 kannst du verschiedene Arten von Programmen erstellen, wie z.B. Indikatoren zur grafischen Darstellung von Daten, Expert Advisors zur Automatisierung des Handels, Skripte für einmalige Aktionen und Dienste für Hintergrundaufgaben. Ein besonderes Merkmal von MetaTrader 5 ist die Verwaltung des gesamten Handelssystems über die Client-Terminal, in dem MQL5-Programme laufen und Handelsbefehle an den Handelsserver senden. MQL5-Anwendungen werden nicht auf dem Server installiert. Teil 1 erklärt, wie man Programme bearbeitet, kompiliert und ausführt. Außerdem werden verschiedene Datentypen, Variablen, Ausdrücke, Arrays, Debugging und Ausgabe behandelt.

2023.12.15
Handschriftliche Zahlen erkennen: Ein Expert Advisor für MetaTrader 5
MetaTrader5
Handschriftliche Zahlen erkennen: Ein Expert Advisor für MetaTrader 5

Ein Expert Advisor zur Erkennung handschriftlicher Ziffern Die MNIST-Datenbank besteht aus 60.000 Bildern zum Trainieren und 10.000 Bildern zum Testen. Diese Bilder wurden durch die "Neumischung" eines ursprünglichen NIST-Sets von 20x20 Pixel großen Schwarzweißmustern erstellt, die vom US Census Bureau stammen und durch Testmuster amerikanischer Oberschüler ergänzt wurden. Die Muster wurden auf eine Größe von 28x28 Pixel normalisiert und geglättet, was Graustufen erzeugte. Das trainierte Modell zur Erkennung handschriftlicher Ziffern mnist.onnx wurde von Github heruntergeladen, genauer gesagt aus dem Model Zoo (opset 8). Interessierte können auch andere Modelle herunterladen und ausprobieren, jedoch nicht die Modelle mit opset 1, die von der neuesten ONNX-Runtime nicht mehr unterstützt werden. Überraschenderweise wurde der Ausgabewert nicht mit der Softmax Aktivierungsfunktion verarbeitet, wie es in Klassifikationsmodellen üblich ist. Aber kein Problem, das können wir selbst einfach implementieren. int PredictNumber(void)   {    static matrixf image(28,28);    static vectorf result(10);    PrepareMatrix(image);    if(!OnnxRun(ExtModel,ONNX_DEFAULT,image,result))      {       Print("OnnxRun Fehler ",GetLastError());       return(-1);      }    result.Activation(result,AF_SOFTMAX);    int predict=int(result.ArgMax());    if(result[predict]<0.8)       Print(result);       Print("Wert ",predict," mit Wahrscheinlichkeit ",result[predict]);    return(predict);   } Zeichne Ziffern in einem speziellen Raster, indem du die linke Maustaste gedrückt hältst. Um die gezeichnete Ziffer zu erkennen, drücke den CLASSIFY-Button. Wenn die erhaltene Wahrscheinlichkeit für die erkannte Ziffer weniger als 0,8 beträgt, wird der resultierende Vektor mit Wahrscheinlichkeiten für jede Klasse im Protokoll ausgegeben. Versuche zum Beispiel, ein leeres, nicht ausgefülltes Eingabefeld zu klassifizieren. [0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267]Wert 5 mit Wahrscheinlichkeit 0.11471312493085861 vorhergesagt. Aus irgendeinem Grund ist die Erkennungsgenauigkeit beim Ziffern neun (9) bemerkenswert geringer. Links geneigte Ziffern werden genauer erkannt.

2023.11.23
Breakout Martin Gale System Trading für MT5 – Dein perfekter Trading-Partner
MetaTrader5
Breakout Martin Gale System Trading für MT5 – Dein perfekter Trading-Partner

Die Strategie "Martin Gale Breakout" ist ein Trading-System, das speziell für den Forex-Markt entwickelt wurde. Dieses System kombiniert die Breakout-Trading-Methode mit Elementen des Martin Gale Geldmanagements, um die Handelsleistung zu optimieren. Wichtige Eingabeparameter: TakeProfPoints: Hiermit kannst du das Take Profit-Level in Punkten für jeden Trade festlegen. BalancePercentageAvailable: Gib den Prozentsatz deines Kontostands an, der für das Trading verwendet werden soll. TP_Percentage_of_Balance: Dies bestimmt den Prozentsatz deines Kontostands, der als Take Profit für jeden Trade verwendet wird. SL_Percentage_of_Balance: Hierlegst du den Prozentsatz deines Kontostands fest, der als Stop Loss für die Trades genutzt wird. Start_The_Recovery: Dieser Parameter spielt eine entscheidende Rolle im Recovery-Prozess und steuert, wann und wie Maßnahmen zur Verlustbegrenzung aktiviert werden. TP_Points_Multiplier: Ein Multiplikator für die Take Profit-Punkte, der flexible Gewinnmitnahme-Strategien ermöglicht. MagicNumber: Eine eindeutige Kennung für dieses System, die sicherstellt, dass es seine eigenen Trades unabhängig verwalten kann. Highlights der Strategie: Breakout Trading: Das System spezialisiert sich darauf, Breakout-Möglichkeiten im Markt zu identifizieren, bei denen Preisbewegungen wichtige Niveaus durchbrechen. Dynamische Lot-Größen: Die Lot-Größen werden dynamisch an deinen Kontostand und deine Risikoeinstellungen angepasst, gemäß den Prinzipien des Martin Gale Geldmanagements. Verlust-Rückgewinnung: Das System beinhaltet einen leistungsstarken Rückgewinnungsmechanismus, der darauf abzielt, Verluste durch adaptive Anpassung der Handelsparameter wieder auszugleichen. Die Hauptfunktion in diesem System ist die CalcLotWithTP()-Funktion, die drei Eingabeparameter hat: Takeprofit, Startpreis, Endpreis. Sie berechnet das erforderliche Volumen für den Trade, sodass das Gewinnziel erreicht wird, wenn der Trade zum Startpreis eingegangen und zum Endpreis geschlossen wird. Der gesamte Code ist kommentiert, um das Verständnis zu erleichtern.

2023.09.26
Neues Konzept: Trailing Take Profit für den MetaTrader 5
MetaTrader5
Neues Konzept: Trailing Take Profit für den MetaTrader 5

In der Welt des Tradings gibt es viele Strategien, die darauf abzielen, Verluste zu minimieren und Gewinne zu maximieren. Eine interessante Neuerung in diesem Bereich ist das Konzept des Trailing Take Profit. Im Gegensatz zum Trailing Stop, der den Stop-Loss nach dem Preis anpasst, sobald dieser steigt, verfolgt der Trailing Take Profit den Preis, wenn eine Position im Minus ist. Letztendlich wird die Position mit einem Verlust geschlossen. Stellt euch vor, eine Position ist im Minus und der aktuelle Preis erreicht den TrailingTPStart (zum Beispiel 500 Punkte). Wenn der Preis 500 Punkte von dem Eröffnungspreis entfernt ist und die Position bei -500 Punkten steht, beginnt der Take Profit, dem Preis zu folgen. Dabei ist der TrailingTPDistance die maximale Entfernung zwischen dem Trailing Take Profit und dem aktuellen Preis. Ob dieses Konzept für euch hilfreich ist, kann ich nicht sagen, aber es kann in einigen Expert Advisors (EAs) ohne Stop-Loss eingesetzt werden, um die Verluste in bestimmten Punkten zu verringern. So setzt ihr den Trailing Take Profit EA ein: Startet den TrailingTakeProfit EA. Wenn TrailingTP_Mode auf true gesetzt ist, wird der EA aktiv. Gebt den Symbolnamen wie GBPUSD im EA ein. Legt den TrailingTPStart fest. Das sind die Punkte vom aktuellen Preis, ab dem der Take Profit startet und dem Preis folgt, wenn die Position im Minus ist. Definiert den TrailingTPDistance. Das ist die maximale Distanz in Punkten zwischen dem Take Profit und dem aktuellen Preis.

2023.07.11
AK-47 Scalper EA: Dein Trading-Assistent für MetaTrader 5
MetaTrader5
AK-47 Scalper EA: Dein Trading-Assistent für MetaTrader 5

Willkommen zu unserem heutigen Artikel über den AK-47 Scalper EA, ein leistungsstarker Expert Advisor für den MetaTrader 5. In diesem Beitrag werden wir die Eingabeparameter, die Initialisierung und die Hauptfunktionen dieses Systems durchgehen. 1. Eingabeparameter #define ExtBotName "AK-47 EA" //Bot Name #define  Version "1.00" //Import inputal class #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh>   #include <Trade\AccountInfo.mqh> #include <Trade\OrderInfo.mqh> //--- Einführung vordefinierter Variablen für die Lesbarkeit des Codes #define Ask    SymbolInfoDouble(_Symbol, SYMBOL_ASK) #define Bid    SymbolInfoDouble(_Symbol, SYMBOL_BID) //--- Eingabeparameter input string  EASettings         = "---------------------------------------------"; //-------- <EA Einstellungen> -------- input int      InpMagicNumber    = 124656;   //Magic Number input string  MoneySettings      = "---------------------------------------------"; //-------- <Geld Einstellungen> -------- input bool     isVolume_Percent  = true;     //Teilvolumen erlauben input double   InpRisk           = 3;        //Risiko in Prozent des Kontos (%) input string  TradingSettings    = "---------------------------------------------"; //-------- <Trading Einstellungen> -------- input double   Inpuser_lot       = 0.01;     //Lots input double   InpSL_Pips        = 3.5      //Stoploss (in Pips) input double   InpTP_Pips        = 7        //TP (in Pips) (0 = kein TP) input int      InpMax_slippage   = 3        //Maximale Slippage erlauben (in Pips) input double   InpMax_spread     = 5        //Maximal erlaubter Spread (in Punkten) (0 = flottierend) input string   TimeSettings      = "---------------------------------------------"; //-------- <Handelszeiten Einstellungen> -------- input bool     InpTimeFilter     = true;     //Handelszeitfilter input int      InpStartHour      = 2;        //Start Stunde input int      InpStartMinute    = 30       //Start Minute input int      InpEndHour        = 21       //End Stunde input int      InpEndMinute      = 0        //End Minute 2. Initialisierung der lokalen Variablen //--- Variablen int      Pips2Points;    // slippage  3 pips    3=punkte    30=punkte double   Pips2Double;    // Stoploss 15 pips    0.015      0.0150 bool     isOrder = false; int      slippage; long     acSpread; string   strComment = ""; CPositionInfo  m_position;                   // Handelspositionsobjekt CTrade         m_trade;                      // Handelsobjekt CSymbolInfo    m_symbol;                     // Symbolinfo-Objekt CAccountInfo   m_account;                    // Kontoinfo-Hülle COrderInfo     m_order;                      // Objekt für ausstehende Aufträge 3. Hauptcode a/ Initialisierungsfunktion des Expert Advisors //+------------------------------------------------------------------+ //| Initialisierungsfunktion des Experten                                   | //+------------------------------------------------------------------+ int OnInit() {    //3 oder 5 Ziffern Erkennung    //Pip und Punkt    if(_Digits % 2 == 1) {       Pips2Double  = _Point*10;       Pips2Points  = 10;       slippage = 10* InpMax_slippage;    }    else {       Pips2Double  = _Point;       Pips2Points  =  1;       slippage = InpMax_slippage;    }         if(!m_symbol.Name(Symbol())) // setzt den Symbolnamen       return(INIT_FAILED);           RefreshRates(); //---    m_trade.SetExpertMagicNumber(InpMagicNumber);    m_trade.SetMarginMode();    m_trade.SetTypeFillingBySymbol(m_symbol.Name());    m_trade.SetDeviationInPoints(slippage); //---    return(INIT_SUCCEEDED); } b/ Tick-Funktion des Expert Advisors //+------------------------------------------------------------------+ //| Tick-Funktion des Expert Advisors                                             | //+------------------------------------------------------------------+ void OnTick() {    if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == false) {       Comment("LazyBot\nHandel nicht erlaubt.");       return;    }         MqlDateTime structTime;    TimeCurrent(structTime);    structTime.sec = 0;       //Setze Startzeit    structTime.hour = InpStartHour;    structTime.min = InpStartMinute;          datetime timeStart = StructToTime(structTime);       //Setze Endzeit    structTime.hour = InpEndHour;    structTime.min = InpEndMinute;    datetime timeEnd = StructToTime(structTime);       acSpread = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD);          strComment = "\n" + ExtBotName + " - v." + (string)Version;    strComment += "\nServerzeit = " + TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS) + " - " + DayOfWeekDescription(structTime.day_of_week);    strComment += "\nHandelszeit = [" + (string)InpStartHour + "h" + (string)InpStartMinute + " --> " +  (string)InpEndHour + "h" + (string)InpEndMinute + "]";       strComment += "\nAktueller Spread = " + (string)acSpread + " Punkte";       Comment(strComment);       //Werte aktualisieren    UpdateOrders();       TrailingStop();           //Dieu kien giao dich theo phien My    if(InpTimeFilter) {       if(TimeCurrent() >= timeStart && TimeCurrent() < timeEnd) {          if(!isOrder) OpenOrder();       }    }    else {       if(!isOrder) OpenOrder();    }    } //---Ende der Funktion 3.1 Signalberechnung zur Auftragserteilung //+------------------------------------------------------------------+ //| SIGNAL BERECHNEN UND AUFTRAG SENDEN                                  | //+------------------------------------------------------------------+ void OpenOrder(){       ENUM_ORDER_TYPE OrdType = ORDER_TYPE_SELL;//-1;       double TP = 0;    double SL = 0;    string comment = ExtBotName;       //Berechne Lots    double lot1 = CalculateVolume();       if(OrdType == ORDER_TYPE_SELL) {       double OpenPrice = Bid - NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits);              TP = OpenPrice - NormalizeDouble(InpTP_Pips * Pips2Double, _Digits);       SL = Ask + NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits);                if(CheckSpreadAllow()                                             //Spread prüfen          && CheckVolumeValue(lot1)                                      //Volumen prüfen          && CheckOrderForFREEZE_LEVEL(ORDER_TYPE_SELL_STOP, OpenPrice)  //Distanz vom OpenPrice zum Bid prüfen          && CheckStopLoss(OpenPrice,  SL, TP)                           //Distanz von SL, TP zum OpenPrice prüfen          && CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_SELL)) //Balance prüfen, wenn der Auftrag ausgeführt wird       {          if(!m_trade.SellStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment))          Print(__FUNCTION__,"--> OrderSend Fehler ", m_trade.ResultComment());       }    }    else if(OrdType == ORDER_TYPE_BUY) {       double OpenPrice = Ask + NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits);       SL = Bid - NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits);              if(CheckSpreadAllow()                                             //Spread prüfen          && CheckVolumeValue(lot1)                                      //Volumen prüfen          && CheckOrderForFREEZE_LEVEL(ORDER_TYPE_BUY_STOP, OpenPrice)   //Distanz vom OpenPrice zum Bid prüfen          && CheckStopLoss(OpenPrice,  SL, TP)                           //Distanz von SL, TP zum OpenPrice prüfen          && CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_BUY))  //Balance prüfen, wenn der Auftrag ausgeführt wird       {          if(!m_trade.BuyStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment))// verwende "ORDER_TIME_GTC", wenn das Ablaufdatum = 0          Print(__FUNCTION__,"--> OrderSend Fehler ", m_trade.ResultComment());       }    }    } 3.2 Volumenberechnung //+------------------------------------------------------------------+ //| VOLUMEN BERECHNEN                                                 | //+------------------------------------------------------------------+ // Wir definieren die Funktion zur Berechnung der Positionsgröße und geben das Lot zurück, um zu bestellen. double CalculateVolume() {    double LotSize = 0;    if(isVolume_Percent == false) {       LotSize = Inpuser_lot;      }    else {       LotSize = (InpRisk) * m_account.FreeMargin();       LotSize = LotSize /100000;       double n = MathFloor(LotSize/Inpuser_lot);       //Comment((string)n);       LotSize = n * Inpuser_lot;              if(LotSize < Inpuser_lot)          LotSize = Inpuser_lot;       if(LotSize > m_symbol.LotsMax()) LotSize = m_symbol.LotsMax();       if(LotSize < m_symbol.LotsMin()) LotSize = m_symbol.LotsMin();    }      //---    return(LotSize); }3.3 Der EA hat die Funktion "Trailing Stop", SL wird jedes Mal geändert, wenn der Preis sinkt //+------------------------------------------------------------------+ //| TRAILING STOP                                                    | //+------------------------------------------------------------------+ void TrailingStop() {    double SL_in_Pip = 0;    for(int i = PositionsTotal() - 1; i >= 0; i--) {       if(m_position.SelectByIndex(i)) {    // wählt die Aufträge nach Index für weiteren Zugriff auf seine Eigenschaften                  if((m_position.Magic() == InpMagicNumber) && (m_position.Symbol() == m_symbol.Name())) {             // Für Kaufauftrag             if(m_position.PositionType() == POSITION_TYPE_BUY) {                //--Berechne SL, wenn sich der Preis ändert                SL_in_Pip = NormalizeDouble(Bid - m_position.StopLoss(), _Digits) / Pips2Double;                if(SL_in_Pip > InpSL_Pips) {                   double newSL = NormalizeDouble(Bid - InpSL_Pips * Pips2Double, _Digits);                                      if(!m_trade.PositionModify(m_position.Ticket(), newSL, m_position.TakeProfit())) {                      Print(__FUNCTION__,"--> OrderModify Fehler ", m_trade.ResultComment());                    continue                 }        }             }             // Für Verkaufsauftrag             else if(m_position.PositionType() == POSITION_TYPE_SELL) {                //--Berechne SL, wenn sich der Preis ändert                SL_in_Pip = NormalizeDouble(m_position.StopLoss() - Bid, _Digits) / Pips2Double;                if(SL_in_Pip > InpSL_Pips){                   double newSL = NormalizeDouble(Bid + (InpSL_Pips) * Pips2Double, _Digits);                   if(!m_trade.PositionModify(m_position.Ticket(), newSL, m_position.TakeProfit())) {                      Print(__FUNCTION__,"--> OrderModify Fehler ", m_trade.ResultComment());                      //continue;                     }                }             }       }       }    }       //--- Ausstehende Aufträge ändern      for(int i=OrdersTotal()-1; i>=0; i--) {// gibt die Anzahl der aktuellen Aufträge zurück       if(m_order.SelectByIndex(i)) {      // wählt den ausstehenden Auftrag nach Index für weiteren Zugriff auf seine Eigenschaften          if(m_order.Symbol() == m_symbol.Name() && m_order.Magic()==InpMagicNumber) {             if(m_order.OrderType() == ORDER_TYPE_BUY_STOP) {                SL_in_Pip = NormalizeDouble(Bid - m_order.StopLoss(), _Digits) / Pips2Double;                                   if(SL_in_Pip < InpSL_Pips/2) {                   double newOP = NormalizeDouble(Bid + (InpSL_Pips/2) * Pips2Double, _Digits);                   double newTP =  NormalizeDouble(newOP + InpTP_Pips * Pips2Double, _Digits);                   double newSL = NormalizeDouble(Bid - (InpSL_Pips/2) * Pips2Double, _Digits);                                      if(!m_trade.OrderModify(m_order.Ticket(), newOP, newSL, newTP, ORDER_TIME_GTC,0)) {                      Print(__FUNCTION__,"--> Modify PendingOrder Fehler!", m_trade.ResultComment());                      continue                     }                }             }          else if(m_order.OrderType() == ORDER_TYPE_SELL_STOP) {                SL_in_Pip = NormalizeDouble(m_order.StopLoss() - Ask, _Digits) / Pips2Double;                           if(SL_in_Pip < InpSL_Pips/2){                   double newOP = NormalizeDouble(Ask - (InpSL_Pips/2) * Pips2Double, _Digits);                   double newTP =  NormalizeDouble(newOP - InpTP_Pips * Pips2Double, _Digits);                   double newSL = NormalizeDouble(Ask + (InpSL_Pips/2) * Pips2Double, _Digits);                                      if(!m_trade.OrderModify(m_order.Ticket(), newOP, newSL, newTP, ORDER_TIME_GTC,0)) {                      Print(__FUNCTION__,"--> Modify PendingOrder Fehler!", m_trade.ResultComment());                      //continue;                     }                }             }          }          }       }     } Wir hoffen, dass dir dieser Einblick in den AK-47 Scalper EA und dessen Funktionen geholfen hat, mehr über diesen Expert Advisor zu lernen. Wenn du Fragen hast oder mehr über andere Trading-Tools erfahren möchtest, lass es uns in den Kommentaren wissen!

2023.06.12
Positionen effektiv schließen: Der MetaTrader 5 im Fokus
MetaTrader5
Positionen effektiv schließen: Der MetaTrader 5 im Fokus

Hallo liebe Trader! Heute sprechen wir über ein wichtiges Thema, das oft übersehen wird: das Schließen von Positionen im MetaTrader 5. Wenn ihr eure Trades effektiv managen wollt, dann ist es entscheidend zu wissen, wie und wann man Positionen schließt. Lasst uns gemeinsam einen Blick auf die Funktionen werfen, die der MetaTrader 5 bietet, um dies zu erleichtern.Warum ist das Schließen von Positionen so wichtig?Das Schließen von Positionen ist ein entscheidender Schritt im Trading-Prozess, der oft den Unterschied zwischen Gewinn und Verlust ausmacht. Hier sind einige Punkte, die ihr beachten solltet:Risikomanagement: Wenn der Markt sich gegen euch bewegt, ist es wichtig, rechtzeitig zu handeln.Gewinne realisieren: Schließt eure Positionen, wenn ihr eure Gewinnziele erreicht habt.Emotionen kontrollieren: Lasst nicht zu, dass Emotionen eure Entscheidungen beeinflussen.Wie schließt man Positionen im MetaTrader 5?Im MetaTrader 5 gibt es verschiedene Möglichkeiten, eure Positionen zu schließen. Hier sind die gängigsten Methoden:Manuelle Schließung: Ihr könnt eure Positionen direkt im Handelsfenster schließen, indem ihr auf den „Schließen“-Button klickt.Stop-Loss und Take-Profit: Setzt diese Aufträge, um eure Positionen automatisch zu schließen, wenn bestimmte Preisniveaus erreicht werden.Trailing Stop: Diese Funktion hilft euch, Gewinne zu sichern, während ihr weiterhin von potenziellen Marktbewegungen profitiert.Mit diesen Funktionen im MetaTrader 5 seid ihr bestens gerüstet, eure Positionen effektiv zu schließen. Denkt daran: Ein gutes Risikomanagement ist der Schlüssel zum Erfolg im Trading!

2023.05.27
Martingale Levels für effizientes Money Management im MetaTrader 5
MetaTrader5
Martingale Levels für effizientes Money Management im MetaTrader 5

Dieser EA ist ein Algorithmus für das Money Management, der beim Öffnen und Schließen von Positionen die Martingale-Strategie mit einem "Multiplikator" verwendet. Hier sind einige wichtige Schritte zur optimalen Nutzung des "MartingaleEA-5Levels": Führe den EA aus, bevor du Positionen eröffnest, um die besten Ergebnisse zu erzielen. Setze den "MartingaleEA-5Levels" auf ein beliebiges Chart. Aktiviere den "Martingale-Modus". Gib die Symbolnamen ein, z.B. EURUSD oder GBPUSD. Wähle einen Martingale-Multiplikator und gib ihn im Feld "Martingale Volumen Multiplikator" ein. Dieser Wert multipliziert das Volumen der vorherigen Position. Wenn du beispielsweise 2 eingibst und das Volumen der ersten Position 1 Lot beträgt, wird die nächste Position mit 2 Lots und die dritte mit 4 Lots eröffnet. Dieser EA kann maximal 5 Martingale-Positionen eröffnen. Gib eine Zahl zwischen 1 und 5 im Feld "Anzahl der Martingale-Trades" ein. Im Feld für die Abstände (Abstand 1 bis Abstand 5) solltest du Pips oder Punkte zwischen den zu öffnenden Positionen angeben. Im Feld "Alle Positionen schließen, wenn der Gesamt-Take Profit" erreicht ist, gib einen Betrag wie 100 ein. Wenn alle Martingale-Positionen $100 erreichen, werden alle offenen Positionen geschlossen. Im Feld "Alle Positionen schließen, wenn der Gesamt-Stop Loss" erreicht ist, gib einen Betrag wie -500 ein. Wenn alle Martingale-Positionen -$500 erreichen, werden alle offenen Positionen geschlossen.

2023.05.24
Dynamisches Trailing Stop Loss und Gewinnziel-Management für MetaTrader 5
MetaTrader5
Dynamisches Trailing Stop Loss und Gewinnziel-Management für MetaTrader 5

In der Welt des Tradings ist ein effektives Risikomanagement entscheidend. Dieser Code ist eine Strategie für einen Expert Advisor (EA) in MetaTrader 5, die bestehende Trades basierend auf festgelegten Eingabeparametern verwaltet. Der Fokus liegt darauf, Positionen zu schließen, sobald ein Gewinn- oder Verlustschwellenwert erreicht wird. Zudem wird ein Trailing Stop Loss verwendet, um Gewinne zu sichern, während sich der Trade in die gewünschte Richtung bewegt. Hier ist eine kurze Erklärung des Codes: Notwendige Header-Dateien für Handels- und Symbolinformationen werden eingebunden. Eingabeparameter für Risikoanteil, Gewinnanteil und Trailing Stop Punkte werden definiert. Globale Variablen für Handels- und Symbolinformationsobjekte werden deklariert. Die OnInit-Funktion initialisiert das Symbolinformationen-Objekt und prüft auf Fehler. Die OnDeinit-Funktion führt in diesem Fall keine Aktionen durch. Die OnTick-Funktion wird bei jedem neuen Tick aufgerufen und ruft die Funktion CheckTrades auf. Die CheckTrades-Funktion durchläuft alle offenen Positionen und prüft, ob die Position zum aktuellen Symbol gehört. Wenn ja, wird der aktuelle Gewinn berechnet und es wird festgestellt, ob die Gewinn- oder Verlustschwellenwerte erreicht wurden. Bei Erreichen eines Schwellenwertes wird die Position geschlossen. Wenn keiner der Schwellenwerte erreicht wird, überprüft der Code, ob es sich um eine Kauf- oder Verkaufsorder handelt und aktualisiert das Stop Loss-Level mit einem Trailing Stop Loss. Ist das neue Stop Loss-Level vorteilhafter als das aktuelle, wird die Position mit dem neuen Stop Loss-Level modifiziert. Dieser Code bietet eine einfache Risikomanagementstrategie, um bestehende Trades zu verwalten, indem das Stop Loss-Level dynamisch basierend auf einem Trailing Stop Loss angepasst wird und Positionen geschlossen werden, wenn die Gewinn- oder Verlustschwellenwerte erreicht werden.

2023.04.28
Multible Kauf- und Verkaufsaufträge im MetaTrader 5 mit einem Expert Advisor
MetaTrader5
Multible Kauf- und Verkaufsaufträge im MetaTrader 5 mit einem Expert Advisor

Wenn du auf der Suche nach einem praktischen Tool bist, um mehrere Kauf- und Verkaufsaufträge im MetaTrader 5 (MT5) zu eröffnen, dann ist dieser Expert Advisor (EA) genau das Richtige für dich. Mit diesem EA kannst du deine Handelsstrategien optimal umsetzen, indem du die Anzahl der Kauf- und Verkaufsaufträge sowie andere Risikoparameter ganz nach deinem Gusto anpasst. Der EA bietet dir verschiedene Eingabevariablen, die es dir ermöglichen, die Anzahl der Kauf- und Verkaufsaufträge, den Risikoprozentsatz pro Trade, Stop-Loss, Take-Profit und Slippage festzulegen. Die benutzerfreundliche Oberfläche mit klaren Kauf- und Verkaufs-Buttons macht die Bedienung zum Kinderspiel. Ein besonderes Feature dieses EAs ist die automatische Berechnung der passenden Lotgröße, basierend auf deinem festgelegten Risikoprozentsatz und dem Stop-Loss. Vor dem Platzieren der Aufträge überprüft der EA zudem die Spanne im Vergleich zur konfigurierten Slippage. Das bedeutet, dass Kaufaufträge eröffnet werden, wenn der Durchschnittspreis über dem aktuellen Ask-Preis liegt, und Verkaufsaufträge, wenn der Durchschnittspreis unter dem aktuellen Bid-Preis liegt. Wenn du auf den Kauf- oder Verkaufs-Button klickst, öffnet der EA die gewünschte Anzahl an Kauf- oder Verkaufsaufträgen mit der berechneten Lotgröße, dem Stop-Loss und dem Take-Profit. Beachte jedoch, dass dieser EA ein einfaches Beispiel ist und möglicherweise nicht für den Live-Handel geeignet ist, ohne zusätzliche Anpassungen und Optimierungen. Es ist unerlässlich, jeden Handelsalgorithmus in einem sicheren Umfeld, wie einem Demokonto, zu testen, bevor du echtes Geld investierst.

2023.04.27
CheckTrades: Ihr Risiko-Management-Tool für MetaTrader 5
MetaTrader5
CheckTrades: Ihr Risiko-Management-Tool für MetaTrader 5

Willkommen zu unserem neuesten Beitrag über CheckTrades, einem nützlichen Expert Advisor (EA) für MetaTrader 5, der speziell für das Risikomanagement Ihrer offenen Positionen entwickelt wurde. Der bereitgestellte Code ist ein MQL5-Skript, das darauf abzielt, offene Positionen zu schließen, sobald ein benutzerdefinierter Gewinn- oder Verlustschwellenwert erreicht wird. Dieser wird als Prozentsatz Ihres Kontostands berechnet. Wichtig zu beachten ist, dass dieser EA keine Einstiegssignale oder Marktzeitregeln bietet; sein Hauptzweck liegt darin, das Risiko bestehender Positionen zu verwalten, indem er diese schließt, sobald ein festgelegter Gewinn- oder Verlustschwellenwert erreicht wird. Externe Variablen im Code RiskPercentage: Diese Variable steht für den maximal zulässigen Verlust pro Trade, ausgedrückt als Prozentsatz des Kontostands. Wenn der aktuelle Verlust einer offenen Position diesen Prozentsatz erreicht, wird die Position geschlossen, um das Risiko zu begrenzen. ProfitPercentage: Diese Variable repräsentiert den gewünschten Gewinn pro Trade als Prozentsatz des Kontostands. Sobald der aktuelle Gewinn einer offenen Position diesen Prozentsatz erreicht, wird die Position geschlossen, um den Gewinn zu sichern. Da dieser EA sich auf das Risikomanagement konzentriert und nicht auf spezifische Marktindikatoren angewiesen ist, kann er auf jedes Symbol oder Zeitrahmen angewendet werden. Es ist jedoch essenziell zu betonen, dass dieser EA idealerweise mit einer Handelsstrategie kombiniert werden sollte, die Einstiegssignale und weitere Handelsmanagementregeln umfasst, um ein vollständiges Handelssystem zu bilden. Wenn Sie diesen Code als Include-Datei verwenden (indem Sie ihn in den MQL5\Include-Ordner legen), dient er hauptsächlich dem Risikomanagement, indem er Positionen basierend auf benutzerdefinierten Gewinn- und Verlustschwellen schließt. Sie können diese Include-Datei mit anderen Include-Dateien kombinieren, die spezifische Zwecke erfüllen, wie z.B. die Berechnung der Positionsgröße basierend auf dem Kontorisiko, Trailing Stop-Loss und mehr. Dazu verwenden Sie die #include-Direktive in Ihrer Haupt-EA-Datei, um diese Datei einzufügen, und rufen dann die CheckTrades()-Funktion auf, wenn Sie die offenen Positionen verwalten möchten.

2023.04.25
Erste Vorherige 1 2 3 4 5 6 7 8 9 10 11 Nächste Letzte