MetaTrader5
Trailing Stop Instellen in MetaTrader 5: Een Stapsgewijze Gids
Deze code werkt zowel met als zonder Stop Loss. Eisen Je moet "Trade.mqh" toevoegen om toegang te krijgen tot de CTrade klasse, waarmee je kunt werken met posities en orders. #include <Trade\Trade.mqh> // <<------------------------------------------ Voeg deze "Trade.mqh" toe om toegang te krijgen tot de CTrade Klasse Stel een invoervariant in om de trailing afstand aan te passen. Dit is niet noodzakelijk, maar wel handig. input double Trailing_Step = 3.0; Je moet een instantie van de CTrade klasse definiëren. De naam kan je zelf kiezen. Het is beter om deze te definiëren na de OnInit event handler. Vervolgens moet je een if-statement maken om te controleren of er op dit moment posities actief zijn. Deze statement roept de Check_TrailingStop(); functie aan bij elk tick. Dit is belangrijk omdat de EA het vloeiend en nauwkeurig moet bijhouden. Vergeet niet om deze statement aan het begin van de OnTick event handler te plaatsen voor een goede werking. //+------------------------------------------------------------------+ //| Expert initialisatie functie | //+------------------------------------------------------------------+ int OnInit() { //--- timer maken EventSetTimer(60); //--- return(INIT_SUCCEEDED); } CTrade trade; // <<------------------------------------------ Declare de "CTrade" klasse. Je kunt "trade" vervangen door een andere naam. void OnTick() { if(PositionsTotal() > 0) // roept de trailing stop functie aan bij elk tick als er posities open zijn. { Check_TrailingStop(); } } Je moet een aangepaste functie declareren genaamd Check_TrailingStop(); (je kunt elke naam kiezen). Deze functie doorloopt alle open posities en past ze aan op de gewenste afstand. void Check_TrailingStop() { int totalPositions = PositionsTotal(); for(int count =0; count < totalPositions; count++) { ulong TicketNo = PositionGetTicket(count); // Verkrijg het positie ticketnummer met de 'index' van de positie. if(PositionSelectByTicket(TicketNo)) // Selecteer een positie met het ticketnummer (we hebben het ticketnummer al gekozen). { if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) // Controleer het type positie. { double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double stopLoss = PositionGetDouble(POSITION_SL); // <<------------------- Verkrijg de huidige stop loss van de positie double takeProfit = PositionGetDouble(POSITION_TP); double bidPrice = SymbolInfoDouble(_Symbol,SYMBOL_BID); ulong ticket = PositionGetTicket(count); double trailingLevel = NormalizeDouble(bidPrice - (Trailing_Step * Point()),_Digits); if(stopLoss < openPrice) // Geen stop loss is waar. { if(bidPrice > openPrice && trailingLevel > openPrice) // Draait slechts één keer per positie. Stelt de eerste SL in. trade.PositionModify(ticket,trailingLevel,takeProfit); // Pas de trailing stop aan met behulp van "CTrade.trade" } if(bidPrice > openPrice && trailingLevel > stopLoss) // Controleer of het trailing niveau boven het vorige niveau is. { trade.PositionModify(ticket,trailingLevel,takeProfit); // Pas de trailing stop aan met behulp van "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 + (Trailing_Step * Point()),_Digits); if(stopLoss < openPrice) // Geen stop loss is waar. { if(askPrice < openPrice && trailingLevel < openPrice) // Draait slechts één keer per positie. Stelt de eerste SL in. trade.PositionModify(ticket,trailingLevel,takeProfit); // Pas de trailing stop aan met behulp van "CTrade.trade" } if(askPrice < openPrice && trailingLevel < stopLoss) // Controleer of het trailing niveau boven het vorige niveau is. { trade.PositionModify(ticket,trailingLevel,takeProfit); // Pas de trailing stop aan met behulp van "CTrade.trade" } } } }
2024.04.05