O EA Altarius RSI Stohastic utiliza dois indicadores iStochastic (Oscilador Estocástico) e um iRSI (Índice de Força Relativa) para otimizar suas operações. Essa combinação poderosa pode ajudar você a identificar oportunidades de trading com mais precisão.
Autor da ideia — cxa, autor do código MQL5 — barabashkakvn.
Um dos destaques do Altarius é sua capacidade de calcular o tamanho do lote com base na análise de operações fechadas. Veja como isso funciona:
//+------------------------------------------------------------------+
//| Cálculo do tamanho do lote otimizado |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots;
int losses=0; // número de perdas sem uma pausa
//--- seleciona o tamanho do lote
lot=NormalizeDouble(m_account.FreeMargin()*MaximumRisk/1000.0,2);
//--- calcula o número de ordens de perda sem uma pausa
if(DecreaseFactor>0)
{
//--- solicita o histórico de trades
HistorySelect(TimeCurrent()-86400,TimeCurrent()+86400);
//---
uint total=HistoryDealsTotal();
//--- para todas as operações
for(uint i=0;i<total;i++)
{
if(!m_deal.SelectByIndex(i))
{
Print("Erro no histórico!");
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);
}
//--- retorna o tamanho do lote
if(lot<0.1)
lot=0.1;
return(lot);
}
//| Cálculo do tamanho do lote otimizado |
//+------------------------------------------------------------------+
double LotsOptimized()
{
double lot=Lots;
int losses=0; // número de perdas sem uma pausa
//--- seleciona o tamanho do lote
lot=NormalizeDouble(m_account.FreeMargin()*MaximumRisk/1000.0,2);
//--- calcula o número de ordens de perda sem uma pausa
if(DecreaseFactor>0)
{
//--- solicita o histórico de trades
HistorySelect(TimeCurrent()-86400,TimeCurrent()+86400);
//---
uint total=HistoryDealsTotal();
//--- para todas as operações
for(uint i=0;i<total;i++)
{
if(!m_deal.SelectByIndex(i))
{
Print("Erro no histórico!");
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);
}
//--- retorna o tamanho do lote
if(lot<0.1)
lot=0.1;
return(lot);
}
Resultados dos Backtests nos pares EURUSD e USDJPY:
Comentário 0