De Altarius RSI Stochastic is een slimme systeemtrader die gebruikmaakt van twee iStochastic (Stochastic Oscillator) indicatoren en één iRSI (Relative Strength Index). Dit maakt het een waardevol hulpmiddel voor iedereen die serieus is over handelen met MetaTrader 5.
Idee Auteur — cxa, ontwikkelaar van de MQL5 code — barabashkakvn.
Deze EA berekent de optimale lotgrootte op basis van de analyse van gesloten transacties. Dit is cruciaal voor het beheren van risico's en het maximaliseren van winst.
//+------------------------------------------------------------------+
//| Berekenen van optimale lotgrootte |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots;
int losses=0; // aantal verliestransacties zonder break
//--- selecteer lotgrootte
lot=NormalizeDouble(m_account.FreeMargin()*MaximumRisk/1000.0,2);
//--- bereken aantal verliesorders zonder break
if(DecreaseFactor>0)
{
//--- vraag handelsgeschiedenis op
HistorySelect(TimeCurrent()-86400,TimeCurrent()+86400);
//---
uint total=HistoryDealsTotal();
//--- voor alle deals
for(uint i=0;i<total;i++)
{
if(!m_deal.SelectByIndex(i))
{
Print("Fout in geschiedenis!");
break;
}
if(m_deal.Symbol()!=Symbol() || m_deal.Entry()!=DEAL_ENTRY_OUT)
continue;
//---
if(m_deal.Profit()>0)
break;
if(m_deal.Profit()<0)
losses++;
}
if(losses>1)
lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//--- retourneer lotgrootte
if(lot<0.1)
lot=0.1;
return(lot);
}
//| Berekenen van optimale lotgrootte |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots;
int losses=0; // aantal verliestransacties zonder break
//--- selecteer lotgrootte
lot=NormalizeDouble(m_account.FreeMargin()*MaximumRisk/1000.0,2);
//--- bereken aantal verliesorders zonder break
if(DecreaseFactor>0)
{
//--- vraag handelsgeschiedenis op
HistorySelect(TimeCurrent()-86400,TimeCurrent()+86400);
//---
uint total=HistoryDealsTotal();
//--- voor alle deals
for(uint i=0;i<total;i++)
{
if(!m_deal.SelectByIndex(i))
{
Print("Fout in geschiedenis!");
break;
}
if(m_deal.Symbol()!=Symbol() || m_deal.Entry()!=DEAL_ENTRY_OUT)
continue;
//---
if(m_deal.Profit()>0)
break;
if(m_deal.Profit()<0)
losses++;
}
if(losses>1)
lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//--- retourneer lotgrootte
if(lot<0.1)
lot=0.1;
return(lot);
}
Hier zijn de resultaten van backtests voor EURUSD en USDJPY:
Reactie 0