Du kanske redan har hört detta, men att välja lämplig partistorlek för ditt handelssystem är en nyckelingrediens för att utveckla ett bra system. Du kan ange en partistorlek lika enkelt som att deklarera en i en intern variabel som en fast partistorlek för varje beställning, men vi kommer att utforska en enkel metod som beräknar partistorleken baserat på en procentandel av din fria marginal.
Det finns lite matematik bakom kulisserna, men i princip, om du väljer en anpassad riskinställning på 1, kommer du att handla 0,01 mikrolot för varje 1K i aktiestorlek. Således, med en anpassad riskinställning på 2 och en 10K kontostorlek, kommer du att börja med 0,2 lots, och det kommer automatiskt att lägga till/subtrahera 0,01 lot för varje $100 i vinst/förlust. Den här tekniken för automatisk lotsstorlek är hur enkel som helst, men mycket effektiv för att automatiskt öka dina vinster, minska dina förluster eller automatiskt justera för insättningar och uttag på kontot.
Bool:Om du kommer att använda pengahantering eller inte.
Dubbel:Din fördefinierade riskinställning.
Dubbel:Om MM är avstängt är detta den manuella lotstorleken du kommer att använda.
Dubbel:Detta är antalet decimaler för lotterna som tillhandahålls av din mäklare. De flesta har två decimaler, men vissa har en.
extern bool MM =TRUE;
extern dubbel Risk =2;
extern dubbel Lots =0,1;
extern dubbel LotDigits =2;
double GetLots(){
double minlot =MarketInfo(Symbol(), MODE_MINLOT);
double maxlot =MarketInfo(Symbol(), MODE_MAXLOT);
dubbel hävstång =AccountLeverage();
dubbel lotsize =MarketInfo(Symbol(), MODE_LOTSIZE);
dubbel stoppnivå =MarketInfo(Symbol(), MODE_STOPLEVEL);dubbla MinLots =0,01; dubbla MaximalLots =50,0;
if(MM)
{
double lots =Lots;double lots =NormalizeDouble(AccountFreeMargin() * Risk/100 / 1000.0, LotDigits);
if(lotsif (lots> MaximalLots) lots =MaximalLots;
if (AccountFreeMargin()Print(“Vi har inga pengar. Lots =“, lots,” , Free Margin =“, AccountFreeMargin());
Kommentar ("Vi har inga pengar. Lots =“, lots, ” , Free Margin =“, AccountFreeMargin());
}}
else lots=NormalizeDouble(Lots,Digits);
return (massor);
}
Du kommer att se att vi först var tvungna att deklarera ett antal externa variabler för att avgöra om vi borde ha aktiverat hanteringen (true) eller av (falskt) , vad kommer att vara vår anpassade riskinställning om den är aktiverad, och om inte, vad kommer att vara den förinställda partistorleken.
LotDigits är hur många decimaler din mäklare tillåter (om den till exempel tillåter mikrolots, som 0,01, skulle den ha två siffror eller decimaler).
GetLots() är namnet vi har gett till vår anpassade funktion Så alla o (det kunde ha varit vilket namn som helst), och allt som är subsumerat mellan dess parenteser är en beräkning av denna funktion. Du kommer helt enkelt att placera GetLots() i den tredje parametern i OrderSend()-funktionen för att anropa den och ersätta den fasta lotvariabeln som fanns där tidigare.
Vi skapar en variabel minlot för att referera till MarketInfo() fungera. MarketInfo() funktion är funktionen vi behöver för att hämta olika marknadsdata för den givna valutan, såsom bud- eller säljpriset, swapvärdet, antalet siffror, och för våra ändamål kan den också berätta för oss den minsta lotstorleken för den valutan . Vi vill försäkra oss om att vilken lotsberäkning som helst som utförs så är den större än mäklarens minsta lotstorlek, annars är den mindre än minlot, det kommer att vara minlot.
Huvudberäkningen av det automatiska MM-partiet sker på en rad:
dubbla partier =NormalizeDouble(AccountEquity() * Risk/100 / 1000.0, LotDigits);
AccountEquity() är en av många kontoinformationsfunktioner som returnerar det aktuella kontots eget kapitalvärde. Vi vill returnera kontots eget kapital, till skillnad från AccountBalance() , eftersom eget kapital representerar en mer giltig bild av kontots tillstånd (aka, nettokontovärdet). Vi vill att aktievärdet ska genomföra vår beräkning på lämplig partistorlek. Vi kommer att multiplicera detta aktievärde med vårt riskvärde, sedan dividera med 100 och sedan dividera ytterligare med 1000, för att bestämma lämplig partistorlek.
Effekten är proportionell partistorlek, baserat på den valda riskinställningen:den gör en riskinställning på 1 handel 0,01 lot per 1K i eget kapital, en riskinställning på 2 trade 0,02 lots per 1K i eget kapital, etc. Det finns en mängd möjligheter , beroende på den valda riskinställningen. Lotter läggs till eller subtraheras till kontot när det växer eller minskar i storlek. Till exempel skulle en riskinställning på 2 handla 0,2 lotter på ett 10K-konto och lägga till/subtrahera med 0,01 lott för varje $100 vinst eller förlust i eget kapital. Användaren kan enkelt justera en riskinställning som passar hans eller hennes risktolerans, EA-handelsstil och kontostorlek.
Om MM är satt till sant kommer vi att beräkna lotstorleken baserat på eget kapital och tilldela det värdet till lotsvariabeln. Om MM är falskt, tilldelar vi helt enkelt värdet av objekten till den fasta lotstorleken för Lots.
Du kan se att ovanstående kod är relativt enkel, men den kan göra en värld av skillnad när det gäller storlek på autolot baserat på en förändrad aktiestorlek. Det finns mer komplicerade sätt att bestämma partistorlek, men ibland fungerar de enklaste metoderna bäst.