Systeemhandel

AK-47 Scalper EA: Jouw Gids voor MetaTrader 5
MetaTrader5
AK-47 Scalper EA: Jouw Gids voor MetaTrader 5

Welkom bij mijn blog! Vandaag gaan we het hebben over de AK-47 Scalper EA, een krachtige trading tool voor MetaTrader 5 die je kan helpen je handelsstrategieën te optimaliseren. 1. Invoeren van parameters #define ExtBotName "AK-47 EA" // Bot Naam #define Version "1.00" #include &lt;Trade\PositionInfo.mqh&gt; #include &lt;Trade\Trade.mqh&gt; #include &lt;Trade\SymbolInfo.mqh&gt; #include &lt;Trade\AccountInfo.mqh&gt; #include &lt;Trade\OrderInfo.mqh&gt; #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) input string EASettings = "---------------------------------------------"; // &lt;EA Instellingen&gt; input int InpMagicNumber = 124656; // Magisch Nummer input string MoneySettings = "---------------------------------------------"; // &lt;Geld Instellingen&gt; input bool isVolume_Percent = true; // Sta Volume Percentage toe input double InpRisk = 3; // Risico percentage van het saldo (%) input string TradingSettings = "---------------------------------------------"; // &lt;Trading Instellingen&gt; 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 = Geen TP) input int InpMax_slippage = 3; // Maximale slippage toelaatbaar input double InpMax_spread = 5; // Maximale toegestane spread (in punten) input string TimeSettings = "---------------------------------------------"; // &lt;Tijd Instellingen&gt; input bool InpTimeFilter = true; // Trading Tijd Filter input int InpStartHour = 2; // Start Uur input int InpStartMinute = 30; // Start Minuten input int InpEndHour = 21; // Eind Uur input int InpEndMinute = 0; // Eind Minuten 2. Initialisatie van lokale variabelen //--- Variabelen int Pips2Points; // slippage 3 pips 3=punten 30=punten double Pips2Double; // Stoploss 15 pips 0.015 bool isOrder = false; int slippage; long acSpread; string strComment = ""; CPositionInfo m_position; // Trade positie object CTrade m_trade; // Trading object CSymbolInfo m_symbol; // Symbool info object CAccountInfo m_account; // Account info wrapper COrderInfo m_order; // Pending orders object 3. Hoofdcodes a. Expert initialisatiefunctie int OnInit() { // Detectie van 3 of 5 cijfers // Pip en punt 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())) 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. Expert tick functie void OnTick() { if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == false) { Comment("LazyBot\nTrading niet toegestaan."); return; } MqlDateTime structTime; TimeCurrent(structTime); structTime.sec = 0; // Starttijd instellen structTime.hour = InpStartHour; structTime.min = InpStartMinute; datetime timeStart = StructToTime(structTime); // Eindtijd instellen structTime.hour = InpEndHour; structTime.min = InpEndMinute; datetime timeEnd = StructToTime(structTime); acSpread = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD); strComment = "\n" + ExtBotName + " - v." + (string)Version; strComment += "\nServer tijd = " + TimeToString(TimeCurrent(), TIME_DATE | TIME_SECONDS) + " - " + DayOfWeekDescription(structTime.day_of_week); strComment += "\nTrading tijd = [" + (string)InpStartHour + "h" + (string)InpStartMinute + " --> " + (string)InpEndHour + "h" + (string)InpEndMinute + "]"; strComment += "\nHuidige Spread = " + (string)acSpread + " Punten"; Comment(strComment); // Waarden bijwerken UpdateOrders(); TrailingStop(); // Handelsvoorwaarden volgens de tijd if(InpTimeFilter) { if(TimeCurrent() >= timeStart && TimeCurrent() < timeEnd) { if(!isOrder) OpenOrder(); } } else { if(!isOrder) OpenOrder(); } } 3.1 Bereken signaal om orders te verzenden void OpenOrder() { ENUM_ORDER_TYPE OrdType = ORDER_TYPE_SELL; double TP = 0; double SL = 0; string comment = ExtBotName; // Bereken 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() && CheckVolumeValue(lot1) && CheckOrderForFREEZE_LEVEL(ORDER_TYPE_SELL_STOP, OpenPrice) && CheckStopLoss(OpenPrice, SL, TP) && CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_SELL)) { if(!m_trade.SellStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment)) Print(__FUNCTION__, "--> OrderSend error ", 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() && CheckVolumeValue(lot1) && CheckOrderForFREEZE_LEVEL(ORDER_TYPE_BUY_STOP, OpenPrice) && CheckStopLoss(OpenPrice, SL, TP) && CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_BUY)) { if(!m_trade.BuyStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment)) Print(__FUNCTION__, "--> OrderSend error ", m_trade.ResultComment()); } } } 3.2 Bereken Volume 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); 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 EA heeft een functie "trailing Stop" void TrailingStop() { double SL_in_Pip = 0; for(int i = PositionsTotal() - 1; i >= 0; i--) { if(m_position.SelectByIndex(i)) { if((m_position.Magic() == InpMagicNumber) && (m_position.Symbol() == m_symbol.Name())) { if(m_position.PositionType() == POSITION_TYPE_BUY) { 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 error ", m_trade.ResultComment()); continue; } } } else if(m_position.PositionType() == POSITION_TYPE_SELL) { 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 error ", m_trade.ResultComment()); continue; } } } } } } //-- Wijzig pending order for(int i = OrdersTotal() - 1; i >= 0; i--) { if(m_order.SelectByIndex(i)) { 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 error!", 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 error!", m_trade.ResultComment()); continue; } } } } } } }

2023.06.12
Martingale Strategie voor Effectief Geldbeheer in MetaTrader 5
MetaTrader5
Martingale Strategie voor Effectief Geldbeheer in MetaTrader 5

Deze System Trading is een geldbeheer-algoritme dat posities opent en sluit met behulp van martingale in combinatie met een "multiplier". Hier zijn enkele belangrijke stappen om het meeste uit deze strategie te halen: Voer de EA uit voordat je enige posities opent voor de beste resultaten. Gebruik "MartingaleEA-5Levels" op elk grafiek. Zorg ervoor dat "Martingale Mode" op waar is. Voer de symbolen in, zoals EURUSD of GBPUSD. Kies een martingale multiplier en vul deze in bij "Martingale Volume Multiplier" om een getal te vermenigvuldigen met het vorige volume. Bijvoorbeeld, als je 2 in dit veld invoert en het volume van de eerste positie is 1 lot, dan zal de volgende positie openen met 2 lots en de derde positie met 4 lots. Deze EA kan maximaal 5 martingale posities openen, dus vul een getal tussen 1 en 5 in bij "Number Of Martingale Trading". In de velden voor afstanden (afstand 1 tot afstand 5) moet je pips of punten invoeren tussen elke positie die geopend moet worden. In het veld "Sluit alle posities wanneer de totale take profit is" moet je een getal invoeren, zoals 100. Zodra alle martingale posities $100 bereiken, worden alle open posities gesloten. Voer in het veld "Sluit alle posities wanneer de totale stop loss is" een getal in, zoals -500. Zodra alle martingale posities -$500 bereiken, worden alle open posities gesloten. Met deze tips kun je de Martingale strategie effectief toepassen voor jouw trading in MetaTrader 5. Veel succes!

2023.05.24
Dynamische Trailing Stop Loss en Winstdoelen Beheer voor MetaTrader 5
MetaTrader5
Dynamische Trailing Stop Loss en Winstdoelen Beheer voor MetaTrader 5

In de wereld van trading is een goede risicobeheerstrategie essentieel voor succes. Deze code biedt een effectieve manier om bestaande trades te beheren met behulp van een Expert Advisor (EA) in MetaTrader 5. Het draait allemaal om het afsluiten van posities bij het bereiken van bepaalde winst- of verliesdrempels, terwijl een trailing stop loss wordt gebruikt om winst te beveiligen naarmate de trade zich in jouw voordeel ontwikkelt. Hier is een kort overzicht van de code: Noodzakelijke headerbestanden worden ingesloten voor handels- en symboolinformatie. Invoervariabelen worden gedefinieerd voor risicopercentage, winstpercentage en trailing stop punten. Globale variabelen worden gedeclareerd voor handels- en symboolinformatie-objecten. De functie OnInit initialiseert het symboolinformatie-object en controleert op fouten. De functie OnDeinit doet in dit geval niets. De functie OnTick wordt aangeroepen telkens wanneer er een nieuwe tick binnenkomt, en roept de functie CheckTrades aan. De functie CheckTrades doorloopt alle open posities en controleert of de positie bij het huidige symbool hoort. Als dat zo is, berekent het de huidige winst en bepaalt het of de winst- of verliesdrempels zijn bereikt. Als een van de drempels is bereikt, sluit het de positie. Als geen van de drempels is bereikt, controleert de code of het type positie een koop- of verkooporder is en werkt het het stop loss-niveau bij met een trailing stop loss. Als het nieuwe stop loss-niveau gunstiger is dan het huidige niveau, wordt de positie aangepast met het nieuwe stop loss-niveau. Deze code biedt een eenvoudige maar krachtige risicobeheerstrategie om bestaande trades te beheren door het stop loss-niveau dynamisch aan te passen op basis van een trailing stop loss en het afsluiten van trades wanneer winst- of verliesdrempels zijn bereikt. Dit helpt je om meer controle te krijgen over je trades en je winst te maximaliseren.

2023.04.28
Handige Expert Advisor voor Meerdere Koop- en Verkooporders in MetaTrader 5
MetaTrader5
Handige Expert Advisor voor Meerdere Koop- en Verkooporders in MetaTrader 5

Als je actief bent in de wereld van het handelen, heb je vast wel eens gehoord van een Expert Advisor (EA) in MetaTrader 5 (MT5). Deze handige tool stelt je in staat om meerdere koop- en verkooporders te openen, helemaal op basis van jouw invoer. Deze EA heeft verschillende invoervariabelen waarmee je het aantal koop- en verkooporders kunt instellen, evenals het risicopercentage per trade, stop loss, take profit en slippage. Bovendien beschikt het over een gebruiksvriendelijke interface met knoppen voor 'Kopen' en 'Verkopen' die de opening van meerdere orders in gang zetten. De EA berekent automatisch de juiste lotgrootte op basis van het opgegeven risicopercentage en de stop loss. Voordat orders geplaatst worden, controleert de EA ook de spread ten opzichte van de ingestelde slippage. Vervolgens opent de EA kooporders als de gemiddelde prijs boven de huidige askprijs ligt en verkooporders als de gemiddelde prijs onder de huidige bidprijs ligt. Wanneer je op de knop 'Kopen' of 'Verkopen' klikt, opent de EA het opgegeven aantal koop- of verkooporders met de berekende lotgrootte, stop loss en take profit. Let wel: deze EA is een eenvoudig voorbeeld en is mogelijk niet geschikt voor live trading zonder verdere aanpassingen en optimalisaties. Het is cruciaal om elke trading algoritme eerst te testen in een veilige omgeving, zoals een demo-account, voordat je het met echt geld gaat gebruiken.

2023.04.27
CheckTrades - Jouw Risicobeheer Expert voor MetaTrader 5
MetaTrader5
CheckTrades - Jouw Risicobeheer Expert voor MetaTrader 5

Als trader weet je hoe belangrijk risicobeheer is. Daarom wil ik je graag voorstellen aan CheckTrades, een MQL5 Expert Advisor (EA) die speciaal is ontworpen om je te helpen bij het sluiten van open posities zodra ze een vooraf gedefinieerde winsten of verliesdrempel hebben bereikt, berekend als een percentage van je accountbalans. Deze EA geeft geen instapsignalen of markt timing regels; zijn hoofddoel is het beheren van het risico van bestaande posities door ze te sluiten wanneer een bepaalde winsten of verliesdrempel is bereikt. Externe variabelen in de code: RisicoPercentage: Dit is het maximale verlies dat je per trade bereid bent te accepteren, uitgedrukt als een percentage van je accountbalans. Wanneer het huidige verlies van een open positie dit percentage bereikt, wordt de positie gesloten om het risico te beperken. WinstPercentage: Dit is de gewenste winst per trade, ook als percentage van je accountbalans. Zodra de huidige winst van een open positie dit percentage bereikt, wordt de positie gesloten om de winst veilig te stellen. Omdat deze EA gericht is op risicobeheer en niet afhankelijk is van specifieke marktindicatoren, kan hij toegepast worden op elk symbool of tijdsframe. Het is echter cruciaal om te benadrukken dat deze EA moet worden gecombineerd met een handelsstrategie die instapsignalen en andere handelsmanagementregels bevat om een compleet handelssysteem te vormen. Als je deze code als een include-bestand wilt gebruiken (door het in de MQL5\Include map te plaatsen), is het hoofddoel risicobeheer door posities te sluiten op basis van door de gebruiker gedefinieerde winsten en verliesdrempels. Je kunt dit include-bestand combineren met andere include-bestanden die specifieke functies vervullen, zoals het berekenen van de positie grootte op basis van het accountrisico, trailing stop-loss en meer. Gebruik hiervoor de #include directief in je hoofd EA-bestand om dit bestand op te nemen, en roep vervolgens de CheckTrades() functie aan wanneer je open posities wilt beheren.

2023.04.25
Eerste Vorige 4 5 6 7 8 9 10 11 12 13 14 Volgende Laatste