AJUDA: MÉDIA MÓVEL x AFIRMA - página 2

 
Jonathan Pereira:

Olhe o caminho declarado no codigo....

A documentação diz o seguinte:

name

[in]  O nome do indicador personalizado, com o caminho relativo ao diretório raiz de indicadores (MQL5\Indicators\). Se um indicador está localizado em um subdiretório, por exemplo, em MQL5/Indicadores/Exemplos, o seu nome deve ser especificado como: "Examples\\nome_do_indicador" (é necessário utilizar uma barra dupla, em vez de uma única barra como um separador).

Na atualização 2845 temos uma abordagem melhorada. 


This version features a revised custom indicator loading algorithm via iCustom.

If the backslash '\' is indicated before the custom indicator name, the EX5 indicator file is searched relative to the MQL5 root folder. So, for a call of iCustom(Symbol(), Period(), "\FirstIndicator"...), the indicator will be loaded as MQL5\FirstIndicator.ex5. If the file is not found at this path, error 4802 (ERR_INDICATOR_CANNOT_CREATE) is returned.

If the path does not start with a backslash '\', the indicator is searched and loaded based on the following sequence of actions:

  • The EX5 file is searched in the same folder, where the caller program's EX5 is located. For example, the CrossMA.EX5 Expert Advisor is located at MQL5\Experts\MyExperts. It contains the following call: iCustom(Symbol(), Period(), "SecondIndicator"...). In this case, the indicator is searched at MQL5\Experts\MyExperts\SecondIndicator.ex5.
  • If the indicator is not found, a search relative to the Indicators root directory is performed: MQL5\Indicators. Thus, file MQL5\Indicators\SecondIndicator.ex5 is searched. If the indicator is not found, the function returns INVALID_HANDLE and error 4802 (ERR_INDICATOR_CANNOT_CREATE) is raised.
If the indicator path is set in a subdirectory such as MyIndicators\ThirdIndicator, the search starts in the folder of the calling program (the Expert Advisor is located in the folder MQL5\Experts\MyExperts) at the following path: MQL5\Experts\MyExperts\MyIndicators\ThirdIndicator.ex5. In case of failure, file MQL5\Indicators\MyIndicators\ThirdIndicator.ex5 is searched. Please note that the path separator should be specified as a double backslash '\\'. For example: iCustom(Symbol(), Period(), "MyIndicators\\ThirdIndicator"...)

Also, if a custom indicator call via iCustom is found in the program code, the compiler will implicitly add the "#property tester_indicator XXX" directive if it is not specified.

Beleza! Muito obrigado!


A documentação que eu vi realmente não falava da necessidade da "\" antes do nome do indicador quando ele está no diretório raiz:



Eu alterei no código informando a "\", mas agora dá erro de compilação:



Estou testando em MT5 build 2875. Vou atualizar pra ver se muda alguma coisa...

 
Vinicius de Oliveira:

Beleza! Muito obrigado!


A documentação que eu vi realmente não falava da necessidade da "\" antes do nome do indicador quando ele está no diretório raiz:



Eu alterei no código informando a "\", mas agora dá erro de compilação:



Estou testando em MT5 build 2875. Vou atualizar pra ver se muda alguma coisa...

Utilizando agora a versão mais recente do MT5 (build 2899) ...



... Mas permanece erro de compilação ...



... E mesmo o indicador estando no diretório raiz, o EA não localiza ...



... Quando eu coloco o indicador em um subdiretório, o EA executa normalmente.

 
Vinicius de Oliveira:

Utilizando agora a versão mais recente do MT5 (build 2899) ...



... Mas permanece erro de compilação ...



... E mesmo o indicador estando no diretório raiz, o EA não localiza ...



... Quando eu coloco o indicador em um subdiretório, o EA executa normalmente.



Se o indicador está no diretório raiz, coloque apenas o nome que irá funcionar, na nota de atualização ele diz que se colocarmos apenas o nome ele primeiro procura em alguma pasta subjacente e depois na pasta raiz, ou seja, se vc cria projetos com a estrutura de pasta dentro de Experts informando apenas o nome ele procurará primeiro nessa pasta. 
 
Jonathan Pereira:


Se o indicador está no diretório raiz, coloque apenas o nome que irá funcionar, na nota de atualização ele diz que se colocarmos apenas o nome ele primeiro procura em alguma pasta subjacente e depois na pasta raiz, ou seja, se vc cria projetos com a estrutura de pasta dentro de Experts informando apenas o nome ele procurará primeiro nessa pasta. 

Ok, a primeira forma que eu tentei foi informado apenas o nome, com o indicador salvo no diretório MQL5\Indicators\, mas não funciona. Mas agora, informado apenas o nome, com o indicador salvo no mesmo diretório do EA, funcionou normalmente.


Valeu! 👍

 
Vinicius de Oliveira:

De nada.


Quando eu salvo o indicador AFIRMA diretamente na pasta MQL5\Indicators, realmente ocorre esse erro. Mas eu criei essa pasta MQL5\Indicators\Testes, salvei o indicador nela e alterei o path na criação do handle e funcionou.


Não sei qual a lógica de funcionar numa pasta e noutra não, mas o fato é que aqui tá funcionando. 😃


Você tentou essa alteração como eu sugeri?


PS.: Testei no EURUSD H1 com os parâmetros default. Se você seguir essas sugestões e ainda assim não abrir nenhuma posição, dê uma olhada na guia Diário pra ver os logs de erros e retorne.

FUNCIONOU!!!

Segui o que você falou das pastas e deu certo; estava alinhando os parâmetros, mas me apareceu dois problemas:


o que eu uso pra ativar ou não o stop loss e take profit? eu coloquei... extern bool *********=false; enfim, eu não consegui encontrar ainda o que coloca no meio (no lugar dos asteriscos) que vai me permitir ativar ou não esses parâmetros. e outro:

no backtest aparece as linhas das médias, mas no gráfico real não, seria aquilo: indicator_color ? 

 
ZIMÁ:

FUNCIONOU!!!

Segui o que você falou das pastas e deu certo; estava alinhando os parâmetros, mas me apareceu dois problemas:


o que eu uso pra ativar ou não o stop loss e take profit? eu coloquei... extern bool *********=false; enfim, eu não consegui encontrar ainda o que coloca no meio (no lugar dos asteriscos) que vai me permitir ativar ou não esses parâmetros. e outro:

. . .

Opa!! Beleza!!


Você precisa adicionar esses parâmetros. Ex.:

input int InpStopLoss   = 300;   // Stop Loss
input int InpTakeProfit = 300;   // Take Profit


... e na abertura das posições, você informa esses parâmetros. Ex.:

//--- BUY
m_trade.Buy (Lot,m_symbol.Name(),m_symbol.Ask(),m_symbol.Ask() - (InpStopLoss * _Point),m_symbol.Ask() + (InpTakeProfit * _Point), "Buy: MA_cross_Method_PriceMode");

//--- SELL
m_trade.Sell(Lot,m_symbol.Name(),m_symbol.Bid(),m_symbol.Bid() + (InpStopLoss * _Point),m_symbol.Bid() - (InpTakeProfit * _Point),"Sell: MA_cross_Method_PriceMode");
 
ZIMÁ:

. . .

no backtest aparece as linhas das médias, mas no gráfico real não, seria aquilo: indicator_color ? 

O EA não desenha as linhas. Se quiser visualizar, você pode incluir os indicadores originais no gráfico e definir para eles as mesmas configurações que no EA.

 
Vinicius de Oliveira:

Opa!! Beleza!!


Você precisa adicionar esses parâmetros. Ex.:


... e na abertura das posições, você informa esses parâmetros. Ex.:

sim, mas eu estava pensando entre colocar o SL e o TP, sim ou não: ex: quero stop loss, sem take profit;


Aí ficaria assim:

extern bool *********=false;

input int InpStopLoss=300;   //Stop Loss

extern bool *********=false;

input int InpTakePeofit=300;   //Take Profit

....

 
ZIMÁ:

sim, mas eu estava pensando entre colocar o SL e o TP, sim ou não: ex: quero stop loss, sem take profit;


Aí ficaria assim:

extern bool *********=false;

input int InpStopLoss=300;   //Stop Loss

extern bool *********=false;

input int InpTakePeofit=300;   //Take Profit

....

Só deixar take profit = 0.0 (zero).

 

Essa outra versão (anexa) já inclui opção para stop loss, take profit, trailing stop e filtro do indicador Momentum.


[CÓDIGO ORIGINAL AQUI ...]

Arquivos anexados:
MA_Cross.mq5  49 kb