Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Telegram!
und werden Sie Mitglied unserer Fangruppe
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Bewerten Sie es im Terminal MetaTrader 5
Code Block for "Trailing Stop" based on current market price. (Ask / Bid) - Experte für den MetaTrader 5
- Ansichten:
- 83
- Rating:
- Veröffentlicht:
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Dieser Codeblock funktioniert, wenn Sie entweder einen Stop-Loss verwenden oder nicht.
Anforderungen
- Sie müssen "Trade.mqh" einbinden, um Zugriff auf die CTrade-Klasse zu erhalten, die es Ihnen ermöglicht, mit Positionen und Aufträgen zu arbeiten.
#include <Trade\Trade.mqh> <<------------------------------------------ Fügen Sie diese "Trade.mqh" ein, um auf die CTrade-Klasse zuzugreifen.
- Sie müssen einen Eingabeparameter setzen, um den Trailing-Abstand nach Ihren Wünschen einzustellen. Dies ist nicht notwendig, aber sehr praktisch.
input double Traling_Step = 3.0;
- Sie müssen eine Instanz für die Klasse CTrade definieren, wobei der Name beliebig sein kann. Es wäre besser, sie nach dem OnInt-Ereignishandler zu definieren.
- Dann müssen Sie eine if-Anweisung erstellen, um zu prüfen, ob eine Position im Moment läuft. Diese Anweisung ruft die Funktion Check_TrailingStop(); für jeden Tick auf. Dies ist wichtig, da der EA einen scharfen und glatten Trail haben sollte. Denken Sie daran, diese Anweisung an den Anfang des OnTick-Ereignishandlers zu setzen, damit sie richtig funktioniert.
//+------------------------------------------------------------------+ //| Experten-Initialisierungsfunktion| //+------------------------------------------------------------------+ int OnInit() { //--- Zeitschaltuhr erstellen EventSetTimer(60); //--- return(INIT_SUCCEEDED); } CTrade trade; // <<------------------------------------------ Deklarieren Sie den "CTrade"-Kalss. Sie können "trade" durch einen beliebigen Namen ersetzen
void OnTick() { if(PositionsTotal() > 0) // Ruft die Trailing-Stop-Funktion für jeden Tick auf, wenn es Positionen gibt, die laufen. { Check_TralingStop(); } }
- Sie müssen eine benutzerdefinierte Funktion namens Check_TrailingStop(); ( in diesem Fall) deklarieren, um den Rest zu erledigen. Sie können jeden beliebigen Namen verwenden.
- Die benutzerdefinierte Funktion durchläuft alle geöffneten Positionen und verfolgt sie in dem von Ihnen gewünschten Abstand.
void Check_TralingStop() { int totalPositions = PositionsTotal(); for(int count =0; count < totalPositions; count++) { ulong TicketNo = PositionGetTicket(count); // Abrufen der Positions-Ticketnummer unter Verwendung des "Index" der Position. if(PositionSelectByTicket(TicketNo)) // Wählen Sie eine Position anhand der Ticketnummer (wir haben die Ticketnummer bereits ausgewählt) { if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) // Überprüfen Sie die Position Typ. { double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double stopLoss = PositionGetDouble(POSITION_SL); <<-------------------Abfrage der aktuellen Stop-Loss-Position double takeProfit = PositionGetDouble(POSITION_TP); double bidPrice = SymbolInfoDouble(_Symbol,SYMBOL_BID); ulong ticket = PositionGetTicket(count); double trailingLevel = NormalizeDouble(bidPrice - (Traling_Step * Point()),_Digits); if(stopLoss < openPrice) // Kein Stop-Loss ist wahr. { if(bidPrice > openPrice && trailingLevel > openPrice) // Wird nur einmal pro Position ausgeführt. Setzt den ersten SL. trade.PositionModify(ticket,trailingLevel,takeProfit); // Ändern Sie den Trailing Stop mit "CTrade.trade". } if(bidPrice > openPrice && trailingLevel > stopLoss) // Prüfen, ob der hintere Pegel über dem vorherigen liegt. { trade.PositionModify(ticket,trailingLevel,takeProfit); // Ändern Sie den Trailing Stop mit "CTrade.trade". } } if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double stopLoss = PositionGetDouble(POSITION_SL); double takeProfit = PositionGetDouble(POSITION_TP); double bidPrice = SymbolInfoDouble(_Symbol,SYMBOL_BID); double askPrice = SymbolInfoDouble(_Symbol,SYMBOL_ASK); ulong ticket = PositionGetTicket(count); double trailingLevel = NormalizeDouble(askPrice + (Traling_Step * Point()),_Digits); if(stopLoss < openPrice) // Kein Stop-Loss ist wahr. { if(askPrice < openPrice && trailingLevel < openPrice) // Wird nur einmal pro Position ausgeführt. Setzt den ersten SL. trade.PositionModify(ticket,trailingLevel,takeProfit); // Ändern Sie den Trailing Stop mit "CTrade.trade". } if(askPrice < openPrice && trailingLevel < stopLoss) // Prüfen, ob der hintere Pegel über dem vorherigen liegt. { trade.PositionModify(ticket,trailingLevel,takeProfit); // Ändern Sie den Trailing Stop mit "CTrade.trade". } } } } }
Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/en/code/49021
ConvertServerTime
Funktion zur Konvertierung der Serverzeit von einer Zeitzone des Brokers in eine andere.
Bollinger Bands Squeeze
Er signalisiert eine Phase geringer Marktvolatilität, die sich ihrem Ende nähert und eine deutliche Kursbewegung ankündigt.
Simple Code for Detect A "New Bar or New Candle " Received
Dieser Codeblock erkennt einen neuen Balken oder eine neue Kerze, wenn er empfangen wurde.
Logarithmic Moving Average
Der logarithmische gleitende Durchschnitt berechnet fortlaufend den logarithmischen Mittelwert des höchsten und des niedrigsten Preises innerhalb einer Periode.