EA - Indicador externo - Rafi

 

Olá,

Estou tentando criar um EA, para operar com o indicador externo RAFI, pode ser encontrado no site do Raphael de forma gratuita.


RAFI: http://raphaelfigueredo.com/page12/page13/index.html

Minha dificuldade é passar para o robô realizar operações de compra e venda, apenas quando o Rafi for maior que 2.5, conforme manual do próprio.


Para importar utilizei esse post: 

https://www.mql5.com/en/forum/162627


O indicator é plotado sem erros no backtest, porém, as operações de compra e venda estão sendo executadas ignorando o Rafi > 2,5.

Alguém poderia me ajudar ?

Plotagem do Rafi, caso ajude alguém:


#resource "\\Indicators\\Rafi.ex5"

double rafi;

 rafi = iCustom(Symbol(),PERIOD_CURRENT, "::Indicators\\Rafi.ex5", 0);


Essa é minha condição de compra:

if(ultimoTick.last>smaArray[0] && rates[1].close>rates[1].open && !posAberta && !ordPendente)


Estou tentando:

if(ultimoTick.last>smaArray[0] && rates[1].close>rates[1].open && rates[1].close>rafi[2.5] && !posAberta && !ordPendente)


Porém o código compila com erro, o indicador vem apenas com o ex5, não sendo possível abrir o código fonte..


Caso alguém tenha alguma dica eu agradeço. Obrigado.

 
jorlan.araujo:


Caso alguém tenha alguma dica eu agradeço. Obrigado.

Jorian, 

desculpa aí qualquer ruído mas a dica é  estudar MQL5.  Eu sugiro ler e estudar o código seguindo a postagem https://www.mql5.com/pt/code/1921

Média Móvel
Média Móvel
  • www.mql5.com
O EA de média móvel está incluído no pacote padrão do terminal do cliente MetaTrader 5 e é um exemplo da EA que negocia com o indicador de Média Móvel. O arquivo EA Moving Average.mq5 está localizado na pasta "terminal_data_folder\MQL5\Experts\Examples\Moving Average\". Este EA é um exemplo da utilização de indicadores técnicos, histórico de...
 
jorlan.araujo:

Olá,

Estou tentando criar um EA, para operar com o indicador externo RAFI, pode ser encontrado no site do Raphael de forma gratuita.


RAFI: http://raphaelfigueredo.com/page12/page13/index.html

Minha dificuldade é passar para o robô realizar operações de compra e venda, apenas quando o Rafi for maior que 2.5, conforme manual do próprio.


Para importar utilizei esse post: 

https://www.mql5.com/en/forum/162627


O indicator é plotado sem erros no backtest, porém, as operações de compra e venda estão sendo executadas ignorando o Rafi > 2,5.

Alguém poderia me ajudar ?

Plotagem do Rafi, caso ajude alguém:


#resource "\\Indicators\\Rafi.ex5"

double rafi;

 rafi = iCustom(Symbol(),PERIOD_CURRENT, "::Indicators\\Rafi.ex5", 0);


Essa é minha condição de compra:

if(ultimoTick.last>smaArray[0] && rates[1].close>rates[1].open && !posAberta && !ordPendente)


Estou tentando:

if(ultimoTick.last>smaArray[0] && rates[1].close>rates[1].open && rates[1].close>rafi[2.5] && !posAberta && !ordPendente)


Porém o código compila com erro, o indicador vem apenas com o ex5, não sendo possível abrir o código fonte..


Caso alguém tenha alguma dica eu agradeço. Obrigado.

Boa tarde Jorlan, para que seu EA siga corretamente as instruções, é nescessário informar o buffer correto, e outras funções como Array SetasSeries, tanto do icusom, quanto Rates e etc, para que ele possa ter a interpretação correta.
Outro detalhe é que as informações e parâmetros do icustom deve seguir ao que o indicador informa também.

Ai sim ele serguirá as informações, tambem verifique a condição de compra se está correta.

 
Leonardo Joao Dos Santos Ferreira:

Boa tarde Jorlan, para que seu EA siga corretamente as instruções, é nescessário informar o buffer correto, e outras funções como Array SetasSeries, tanto do icusom, quanto Rates e etc, para que ele possa ter a interpretação correta.
Outro detalhe é que as informações e parâmetros do icustom deve seguir ao que o indicador informa também.

Ai sim ele serguirá as informações, tambem verifique a condição de compra se está correta.

Amigo... Teu código está com erros.

Está assim:

if(ultimoTick.last>smaArray[0] && rates[1].close>rates[1].open && rates[1].close>rafi[2.5] && !posAberta && !ordPendente)

E teria que ser assim:

if(ultimoTick.last>smaArray[0] && rates[1].close>rates[1].open && rafi[1]>2.5 && !posAberta && !ordPendente)

Mas, deixe-me complementar com outra informação. Rafi é utilizado para confirmar rompimentos de suporte/resistência. Se teu EA não tratar disso, Rafi será inútil.


Atualização:

Percebi que acima tem mais problema.

double rafi;     //   <----- Isto seria um buffer ou handle? Se for buffer, coloque como "double rafi[];",
		 //          e caso seja handle "int rafi" mas terá que setar um buffer para receber os dados de Rafi

rafi = iCustom(Symbol(),PERIOD_CURRENT, "::Indicators\\Rafi.ex5", 0);

Então:

double  RafiBuffer[];
int     RafiHandle;

void OnInit()
{
...
        SetIndexBuffer(#,RafiBuffer,INDICATOR_CALCULATIONS);

        int RafiHandle = iCustom(_Symbol,_Period,"Rafi");
...
}

int OnCalculate(...)
{
...
        CopyBuffer(RafiHandle,0,0,100,RafiBuffer);   //  <--- Aqui irá copiar o buffer 0, da posição 0 até a 100
...
}


Nova Atualização:

Só agora percebi que respondi para a pessoa errada... Desculpa aí, Leonardo!

Razão: