MetaTrader4
Neem Winst op Basis van Huidige Winst - Handige Strategie voor MetaTrader 4
Inleiding De meeste Expert Advisors (EA's) sluiten posities op basis van een vooraf bepaalde afstand in pips vanaf de aankoopprijs. Echter, de code die gebruikt wordt door EA Perceptron is voornamelijk gebaseerd op de huidige winst. Deze aanpak maakt het eenvoudig om de take profit te beheren wanneer je meerdere open posities hebt. Je kunt de totale huidige winst eenvoudig volgen op basis van het magic number, ideaal als je verschillende botinstellingen of verschillende EA's tegelijkertijd gebruikt. Voeg me toe als vriend en volg mijn updates om op de hoogte te blijven van het laatste nieuws! Het gebruik van deze code kan ook positieve effecten hebben op problemen die zich kunnen voordoen bij een take profit die is gebaseerd op pips. Bijvoorbeeld, een pip-gebaseerde take profit kan veranderen afhankelijk van de slippage van je broker, wat je winst kan beperken. Door een code te gebruiken die is gebaseerd op de huidige winst, kun je dit probleem vermijden en meer controle hebben over je trades. Wil je meer leren over hoe je een take profit kunt instellen op basis van de huidige winst? Kijk dan eens naar de code van EA SwingBot als referentie. … Totaal aantal orders Laten we beginnen met de code die het totale aantal open orders met hetzelfde magic number berekent. Het magic number is een unieke identificatie die aan een order is toegewezen door de trader of een EA (Expert Advisor). De code initialiseert een variabele totaal_orders op nul. Vervolgens doorloopt het alle open orders met een for-lus en selecteert elke order met behulp van de OrderSelect()-functie. Als een order succesvol is geselecteerd, wordt de totaal_orders-variabele met één verhoogd. //-----------------
int totaal_orders = 0;
for(int i = 0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderMagicNumber() == MagicNumber)
{
totaal_orders++;
}
}
} … Huidige Winst Berekenen De code initialiseert twee variabelen: winstMin en winst. De variabele winstMin wordt gebruikt om de take profit op dit niveau te activeren; de waarde wordt uitgedrukt in de valuta van de rekening. De variabele winst wordt gebruikt om de huidige winst van alle open posities met hetzelfde magic number op te tellen. De variabele stopLoss wordt gebruikt voor de stop loss. De code maakt gebruik van een for-lus om door alle open posities te itereren met de OrdersTotal()-functie. Voor elke open positie wordt de bijbehorende order geselecteerd met behulp van de OrderSelect()-functie. Als de order succesvol is geselecteerd en het dezelfde magic number heeft, wordt de winst van de order opgeteld bij de winst-variabele. double winstMin = 3; // doelwinst
double winst = 0; // huidige winst
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderMagicNumber() == MagicNumber) // In geval van meerdere EA's, kun je de MagicNumber-filter verwijderen om de functie op alle orders toe te passen
{
winst += OrderProfit();
}
}
} De minimale winst kan ingesteld worden als een externe variabele en geconfigureerd in de EA-instellingen: … Posities Sluiten bij Bereiken van Winst De code gebruikt een for-lus om door alle open orders te itereren met de OrdersTotal()-functie. De lus begint vanaf de laatste order en gaat naar de eerste order. Voor elke order wordt de bijbehorende trade geselecteerd met de OrderSelect()-functie. Als de geselecteerde trade hetzelfde symbool heeft als de huidige grafiek, van het type OP_BUY is, en hetzelfde magic number heeft zoals opgegeven in de code, wordt gecontroleerd of de winst van de trade groter of gelijk is aan winstMin. Als dat zo is, wordt de trade gesloten tegen de biedprijs met de OrderClose()-functie en wordt er een bericht weergegeven dat de kooporder is gesloten. Op dezelfde manier, als de geselecteerde trade hetzelfde symbool heeft als de huidige grafiek, van het type OP_SELL is, en hetzelfde magic number heeft zoals opgegeven in de code, wordt gecontroleerd of de winst van de trade groter of gelijk is aan winstMin. Als dat zo is, wordt de trade gesloten tegen de verkoopprijs met de OrderClose()-functie en wordt er een bericht weergegeven dat de verkooporder is gesloten. for(int e = OrdersTotal() - 1; e >= 0; e--)
{
if(OrderSelect(e, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber) // De order wordt alleen gewijzigd als het MagicNumber overeenkomt met dat van de huidige order.
{
if(winst >= winstMin)
{
OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // Biedprijs
Print("Kooporder gesloten", winst, " - Minimale stoploss: ",MarketInfo(Symbol(), MODE_STOPLEVEL));
}
}
if(OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber)
{
if(winst >= winstMin)
{
OrderClose(OrderTicket(), OrderLots(), ND(OrderClosePrice()), 3); // Vraagsprijs
Print("Verkooporder gesloten", winst, " - Minimale stoploss: ",MarketInfo(Symbol(), MODE_STOPLEVEL));
}
}
}
} … Conclusie Deze code kan nuttig zijn voor al die strategieën voor het sluiten van posities op basis van take profit, maar het kan ook gecombineerd worden met een trailing stop die is gebaseerd op de toename van de huidige winst. Het systeem is ook handig in het geval van meerdere Expert Advisors. Als je de if-voorwaarde op de MagicNumber uitsluit, kun je algemene take profit-niveaus instellen om gelijktijdig alle open posities van alle actieve EA's te beheren.
2023.10.27