Systemhandel

Risk Manager EA: Der perfekte Assistent für MetaTrader 4
MetaTrader4
Risk Manager EA: Der perfekte Assistent für MetaTrader 4

Um die besten Ergebnisse zu erzielen, solltest du deine eigene technische Analyse (TA) durchführen. Du entscheidest, in welche Richtung der EA die Trades platzieren soll (sowohl Long- als auch Short-Trades sind möglich, jedoch funktioniert Hedging nicht). Der EA wartet auf ein passendes Setup und setzt die Trades für dich um. Die Parameter Level und Length beziehen sich auf das Niveau und die Länge der Rücksetzer. Je länger die Length eingestellt ist, desto stärker wird der EA in Positionen gehen. Ein höheres Level bedeutet, dass der EA nach tieferen Rücksetzern sucht. Close PL ist der maximal zulässige schwimmende Verlust, bevor der EA alle Positionen schließt. Die Gewinn- und Risikolimite sind die Parameter, die du anpassen musst, um anzugeben, wie viel Gewinn bzw. Risiko du mit dem gegebenen Signal erzielen möchtest. Der Kapitalparameter wird auf dein Konto vor der Verbindung des EAs gesetzt. Falls du einen schwimmenden Verlust oder Gewinn hast, möchtest du diesen vielleicht anpassen, aber der Standardwert von 0 geht davon aus, dass es sich um dein anfängliches Kapital handelt. Wenn du mehrere Währungspaare handelst, wird die Hedging-Funktion nicht funktionieren, also wird nichts abgesichert. Stelle sicher, dass du das Multipairtrading ausschaltest, wenn du nur ein Paar handelst und die Hedging-Funktion nutzen möchtest. Die Hedging-Funktion sichert deine Position ab, sobald das Hedgelevel erreicht ist, wobei das Hedgelevel den verbleibenden Risikoanteil angibt und im Verhältnis zum festgelegten Verhältnis steht. Maxsize ist die größte Position, in die der EA skalieren kann, und Layers ist die Anzahl der Positionen, in die du die Maxsize aufteilen möchtest. Zum Beispiel, wenn du 1 Lot eines Instruments kaufen und 10 Mal skalieren möchtest, wäre Maxsize = 1 und Layers = 10.

2023.04.08
Reversal-Strategie für MetaTrader 5: Kleine Gewinne clever nutzen
MetaTrader5
Reversal-Strategie für MetaTrader 5: Kleine Gewinne clever nutzen

In der Welt des Tradings ist es entscheidend, die richtigen Strategien zu wählen, um erfolgreich zu sein. Eine vielversprechende Methode ist die Reversal-Strategie, die wir hier für den MetaTrader 5 näher beleuchten möchten. Dieser Expert Advisor nutzt drei wichtige Indikatoren, um Preisumkehrungen eines Symbols zu identifizieren. Dabei kommen ein einfacher gleitender Durchschnitt, die Standardabweichung und der RSI (Relative Strength Index) zum Einsatz. Die Strategie sendet ein Kaufsignal, wenn der Eröffnungskurs unter dem gleitenden Durchschnitt minus dem Zweifachen der Standardabweichung liegt und der RSI unter dem überverkauften Wert ist. Zudem muss der Schlusskurs über dem gleitenden Durchschnitt minus dem Zweifachen der Standardabweichung liegen und der RSI muss nach oben durch das überverkaufte Signal kreuzen. Der Take Profit wird auf den Ask-Preis plus dem Zweifachen der Standardabweichung zum aktuellen Zeitpunkt gesetzt, während der Stop Loss dem Ask-Preis minus der Standardabweichung entspricht. Im Gegensatz dazu wird ein Verkaufssignal gesendet, wenn der Eröffnungskurs über dem gleitenden Durchschnitt plus dem Zweifachen der Standardabweichung liegt und der RSI über dem überkauften Wert ist. Der Schlusskurs muss dann unter dem gleitenden Durchschnitt plus dem Zweifachen der Standardabweichung liegen, während der RSI von oben durch den überkauften Wert kreuzt. Der Take Profit wird auf den Bid-Preis minus dem Zweifachen der Standardabweichung gesetzt, und der Stop Loss entspricht dem Bid-Preis plus der Standardabweichung. Die Kaufposition schließt, wenn der Schlusskurs über dem gleitenden Durchschnitt plus dem Zweifachen der Standardabweichung liegt, während die Verkaufsposition schließt, wenn der Preis unter dem gleitenden Durchschnitt minus dem Zweifachen der Standardabweichung fällt. Diese Vorgehensweise ähnelt der Technik der Bollinger-Bänder. Die Reversal-Strategie eignet sich am besten in Zeiten geringer Volatilität, wenn es keinen offensichtlichen Trend gibt und der Markt vorhersehbarer ist. Ziel ist es, viele kleine Gewinne zu erzielen. Die einzigen Währungspaare, die mit dieser Strategie gehandelt werden sollten, sind hauptsächlich das EURUSD und in geringerem Maße das GBPUSD. Ich persönlich handele nur das EURUSD in kleineren Zeitrahmen wie M5.

2023.03.12
Aktueller relativer Drawdown: Ein hilfreiches Tool für MetaTrader 5
MetaTrader5
Aktueller relativer Drawdown: Ein hilfreiches Tool für MetaTrader 5

Die Funktion DD_Relative berechnet den relativen Gewinn oder Verlust (Drawdown) des aktuellen Handelskontos in Prozent. Dazu wird die Funktion Current_LossOrProfit() verwendet, um den aktuellen Gewinn oder Verlust aller offenen Positionen zu ermitteln und dieser dann durch den aktuellen Kontostand, der über die Funktion AccountInfoDouble(ACCOUNT_BALANCE) abgerufen wird, geteilt. Nachdem der relative Gewinn oder Verlust in Prozent berechnet wurde, rundet die Funktion das Ergebnis mithilfe der NormalizeDouble()-Funktion auf zwei Dezimalstellen und gibt das Ergebnis im Chart-Kommentar mit der Comment()-Funktion aus. Schließlich liefert die Funktion den Wert des relativen Gewinns oder Verlusts in Prozent zurück. Die Funktion Current_LossOrProfit() wird verwendet, um den aktuellen Gewinn oder Verlust aller offenen Positionen im Handelskonto zu berechnen. Sie durchläuft alle offenen Positionen mit einer for-Schleife und prüft für jede Position, ob die Magic-Nummer mit der im Code angegebenen Magic-Nummer (MAGIC) übereinstimmt und ob das Symbol der Position mit dem aktuellen Symbol im Chart übereinstimmt. Wenn die Position diese Kriterien erfüllt, werden die Kommission, der Swap sowie der aktuelle Gewinn oder Verlust zur Variable Positionsprofit hinzugefügt. Sobald alle Gewinne und Verluste der Positionen addiert wurden, verwendet die Funktion wieder die NormalizeDouble()-Funktion, um das Ergebnis auf zwei Dezimalstellen zu runden, und gibt dann den aktuellen Gewinn oder Verlust zurück.

2023.02.17
Grid-Trading-Algorithmus für volatile Märkte – Dein Expert Advisor für MetaTrader 4
MetaTrader4
Grid-Trading-Algorithmus für volatile Märkte – Dein Expert Advisor für MetaTrader 4

Wenn du mit dem Grid-Trading-Algorithmus arbeiten möchtest, sind hier einige wichtige Parameter, die du beachten solltest: Tp: Dies ist eine Zahl, die angibt, wann der Roboter Gewinne realisiert. Er nimmt Gewinne in Höhe von Tp * investiertem Geld entgegen. Eine Empfehlung wäre, zwischen 0,01 und 0,1 zu wählen. SlowMovingAverage: Dies ist der Zeitraum des gleitenden Durchschnitts, der hilft, den Trend zu bestimmen. Multiplier: Dieser Faktor beeinflusst die Volumen der nächsten Order im Grid. Die nächste Order wird mit dem Multiplier * dem Volumen der letzten Order platziert. TimeFrame: Hier legst du den Zeitrahmen in Minuten fest. Empfehlenswert sind 1 Stunde (60 Minuten) oder 15 Minuten. Der Expert Advisor (EA) verfügt über eine Funktion TotalOrderLots(), die alle eingesetzten Lot-Größen zurückgibt. Eine weitere Funktion CalcMaxLot zeigt dir die maximale Lotzahl, die du handeln kannst. Die Funktion CalcGridLot gibt dir die Anfangslot-Größe mit den gegebenen Parametern für ein Wertpapier zurück. Zusätzlich gibt es Funktionen für bearish und bullish Engulfing-Candlestick-Muster, die einen Wert zurückgeben, wenn eines dieser Muster auftritt. Die Funktion OpenOrderProfits zeigt dir alle Profite der offenen Orders an, während CloseallOrders alle offenen Orders schließt (mit mehrmaliger Überprüfung). Der EA platziert Grid-Orders basierend auf den ATR-Werten.

2023.01.27
AK-47 Scalper EA: Die perfekte Handelssoftware für MetaTrader 4
MetaTrader4
AK-47 Scalper EA: Die perfekte Handelssoftware für MetaTrader 4

1. Eingabeparameter #define ExtBotName "AK-47 Scalper EA" //Bot Name #define Version "1.00" //--- Eingabeparameter extern string EASettings = "---------------------------------------------"; //-------- &lt;EA Einstellungen&gt; -------- input int InpMagicNumber = 124656; //Magic Number extern string TradingSettings = "---------------------------------------------"; //-------- &lt;Handelseinstellungen&gt; -------- input double Inpuser_lot = 0.01; //Lots input double InpSL_Pips = 3.5; //Stoploss (in Pips) input double InpMax_spread = 0.5; //Maximal erlaubter Spread (in Pips) (0 = floating) extern string MoneySettings = "---------------------------------------------"; //-------- &lt;Geldmanagement&gt; -------- input bool isVolume_Percent = true; //Erlauben Sie Volumen in Prozent input double InpRisk = 3; //Risikoanteil des Kontostands (%) input string TimeSettings = "---------------------------------------------"; //-------- &lt;Handelszeit Einstellungen&gt; -------- input bool InpTimeFilter = true; //Handelszeit Filter input int InpStartHour = 2; //Startstunde input int InpStartMinute = 30; //Startminute input int InpEndHour = 21; //Endstunde input int InpEndMinute = 0; //Endminute 2. Initialisierung der lokalen Variablen //--- Variablen int Pips2Points; // Slippage 3 Pips double Pips2Double; // Stoploss 15 Pips int InpMax_slippage = 3; // Maximal erlaubte Slippage bool isOrder = false; // nur 1 Order öffnen int slippage; string strComment = ""; 3. Hauptcode a/ Initialisierungsfunktion des EAs int OnInit() { //--- // 3 oder 5 Ziffern erkennen // Pip und Punkt if (Digits % 2 == 1) { Pips2Double = _Point * 10; Pips2Points = 10; slippage = 10 * InpMax_slippage; } else { Pips2Double = _Point; Pips2Points = 1; slippage = InpMax_slippage; } //--- return(INIT_SUCCEEDED); } b/ Tick-Funktion des EAs void OnTick() { //--- if(IsTradeAllowed() == false) { Comment("AK-47 EA\nHandel nicht erlaubt."); return; } MqlDateTime structTime; TimeCurrent(structTime); structTime.sec = 0; //Startzeit setzen structTime.hour = InpStartHour; structTime.min = InpStartMinute; datetime timeStart = StructToTime(structTime); //Endzeit setzen structTime.hour = InpEndHour; structTime.min = InpEndMinute; datetime timeEnd = StructToTime(structTime); double acSpread = MarketInfo(Symbol(), MODE_SPREAD); StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); strComment = "\n" + ExtBotName + " - v." + (string)Version; strComment += "\nGMT Zeit = " + TimeToString(TimeGMT(),TIME_DATE|TIME_SECONDS); strComment += "\nHandelszeit = [" + (string)InpStartHour + "h" + (string)InpStartMinute + " --> " + (string)InpEndHour + "h" + (string)InpEndMinute + "]"; strComment += "\nAktueller Spread = " + (string)acSpread + " Punkte"; strComment += "\nAktueller Stopp-Level = " + (string)StopLevel + " Punkte"; Comment(strComment); //Werte aktualisieren UpdateOrders(); TrailingStop(); //Handelszeit überprüfen if(InpTimeFilter) { if(TimeCurrent() >= timeStart && TimeCurrent() < timeEnd) { if(!isOrder) OpenOrder(); } } else { if(!isOrder) OpenOrder(); } } 3.1 Signal zur Ordereröffnung berechnen void OpenOrder(){ double TP = 0; double SL = 0; string comment = ExtBotName; //Lots berechnen double lot1 = CalculateVolume(); double OpenPrice = NormalizeDouble(Bid - (StopLevel * _Point) - (InpSL_Pips/2) * Pips2Double, Digits); SL = NormalizeDouble(Ask + StopLevel * _Point + InpSL_Pips/2 * Pips2Double, Digits); if(CheckSpreadAllow()) //Spread überprüfen { if(!OrderSend(_Symbol, OP_SELLSTOP, lot1, OpenPrice, slippage, SL, TP, comment, InpMagicNumber, 0, clrRed)) Print(__FUNCTION__,"--> OrderSend Fehler ", GetLastError()); } } 3.2 Volumen berechnen double CalculateVolume() { double LotSize = 0; if(isVolume_Percent == false) { LotSize = Inpuser_lot; } else { LotSize = (InpRisk) * AccountFreeMargin(); LotSize = LotSize / 100000; double n = MathFloor(LotSize/Inpuser_lot); LotSize = n * Inpuser_lot; if(LotSize < Inpuser_lot) LotSize = Inpuser_lot; if(LotSize > MarketInfo(Symbol(),MODE_MAXLOT)) LotSize = MarketInfo(Symbol(),MODE_MAXLOT); if(LotSize < MarketInfo(Symbol(),MODE_MINLOT)) LotSize = MarketInfo(Symbol(),MODE_MINLOT); } return(LotSize); } 3.3 Der EA hat eine "Trailing Stop"-Funktion, SL wird jedes Mal angepasst, wenn sich der Preis ändert (nach unten) void TrailingStop() { for(int i = OrdersTotal() - 1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if((OrderMagicNumber() == InpMagicNumber) && (OrderSymbol() == Symbol())) { //Für Verkaufsorder if(OrderType() == OP_SELL) { double SL_in_Pip = NormalizeDouble(OrderStopLoss() - (StopLevel * _Point) - Ask, Digits) / Pips2Double; if(SL_in_Pip > InpSL_Pips){ double newSL = NormalizeDouble(Ask + (StopLevel * _Point) + InpSL_Pips * Pips2Double, Digits); if(!OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0, clrRed)) { Print(__FUNCTION__,"--> OrderModify Fehler ", GetLastError()); continue; } } } //Für Verkaufs-Stopp-Order else if(OrderType() == OP_SELLSTOP) { double SL_in_Pip = NormalizeDouble(OrderStopLoss() - (StopLevel * _Point) - Ask, Digits) / Pips2Double; if(SL_in_Pip < InpSL_Pips/2){ double newOP = NormalizeDouble(Bid - (StopLevel * _Point) - (InpSL_Pips/2) * Pips2Double, Digits); double newSL = NormalizeDouble(Ask + (StopLevel * _Point) + (InpSL_Pips/2) * Pips2Double, Digits); if(!OrderModify(OrderTicket(), newOP, newSL, OrderTakeProfit(), 0, clrRed)) { Print(__FUNCTION__,"--> Modify PendingOrder Fehler!", GetLastError()); continue; } } } } } } }

2023.01.14
Erste Vorherige 5 6 7 8 9 10 11 12 13 14 15 Nächste Letzte