Autor da ideia: Hazem, autor do código MQL5: barabashkakvn.
Um dos principais desafios deste código é a comparação dos valores de iCCI e iMACD com a variável "Nível de Compra e Venda". Os valores dos indicadores podem variar em várias vezes, ou até dezenas de vezes.
Por exemplo, ao analisar os símbolos EURUSD, USDJPY e USDSEK, além de todos os períodos disponíveis no MetaTrader 5:


Como você pode notar, o iCCI apresenta leituras bastante estáveis, enquanto o iMACD é muito influenciado pelo preço do símbolo. Para contornar isso, podemos multiplicar os valores de iMACD por um fator:
void OnTick()
{
//----
m_ext_lot=NormalizeDouble(m_account.Balance()/50001.0,2);
if(m_ext_lot<0.1)
m_ext_lot=0.1;
m_cci=iCCIGet(0);
m_macd=iMACDGet(MAIN_LINE,0)*1000000;
m_buy_total=0;
m_sell_total=0;
{
//----
m_ext_lot=NormalizeDouble(m_account.Balance()/50001.0,2);
if(m_ext_lot<0.1)
m_ext_lot=0.1;
m_cci=iCCIGet(0);
m_macd=iMACDGet(MAIN_LINE,0)*1000000;
m_buy_total=0;
m_sell_total=0;

Dica: Recomendamos o uso do EURUSD em M30.
Resultados de 08/01/2016 a 06/11/2016, EURUSD M30, depósito inicial — 10.000:

Comentário 0