Indicador customizado com seu código dentro do EA

wellingtondala
15
wellingtondala  

Ola, com faço para que um indicador possa aparecer no gráfico sendo que seu código está em uma classe e compilado no próprio EA?

Eu acompanhei (https://www.mql5.com/pt/articles/4602) um post ensinando como internalizar o código do indicador no EA porém não consigo fazer com que o indicador apareça no gráfico.

Os cálculos e as entradas sõ feitas corretamente mas não é exibido o indicador no gráfico como o Robo do VIlela o One que tem vários indicadores e eles estão todos codificados dentro o EA e tem a opção de 

serem mostrados no gráfico.


Isso é interessante para a conferência das entradas e se caso o programados desejar esconder sua estratégia poderá fazer tb.

Como transferir a parte de cálculo de qualquer indicador para o código do EA
Como transferir a parte de cálculo de qualquer indicador para o código do EA
  • www.mql5.com
Quando um programador cria um EA que recebe sinais de indicadores, ele sempre defronta a questão sobre se usar o indicador ou se transferir o código do indicador para o EA. As razões para isso podem ser diferentes: o desejo de manter em segredo os indicadores e a estratégia usados, a necessidade de distribuir o EA num único arquivo, o desejo de...
Samuel Manoel De Souza
6973
Samuel Manoel De Souza  
wellingtondala:

Ola, com faço para que um indicador possa aparecer no gráfico sendo que seu código está em uma classe e compilado no próprio EA?

Eu acompanhei (https://www.mql5.com/pt/articles/4602) um post ensinando como internalizar o código do indicador no EA porém não consigo fazer com que o indicador apareça no gráfico.

Os cálculos e as entradas sõ feitas corretamente mas não é exibido o indicador no gráfico como o Robo do VIlela o One que tem vários indicadores e eles estão todos codificados dentro o EA e tem a opção de 

serem mostrados no gráfico.


Isso é interessante para a conferência das entradas e se caso o programados desejar esconder sua estratégia poderá fazer tb.

Utilize essas funções para adicionar e remover os indicadores do gráfico.
https://www.mql5.com/pt/docs/standardlibrary/cchart/cchartindicatoradd
https://www.mql5.com/pt/docs/standardlibrary/cchart/cchartindicatordelete

Documentação sobre MQL5: Biblioteca Padrão / Gráficos de preços / IndicatorAdd
Documentação sobre MQL5: Biblioteca Padrão / Gráficos de preços / IndicatorAdd
  • www.mql5.com
[in]  O número de sub-janelas do gráfico. 0 (zero) significa a principal janela do gráfico. Se o número de uma janela que não existe for especificado, uma nova janela será criada. A função retorna verdadeira em caso de sucesso, caso...
wellingtondala
15
wellingtondala  
Samuel Manoel De Souza:

Utilize essas funções para adicionar e remover os indicadores do gráfico.
https://www.mql5.com/pt/docs/standardlibrary/cchart/cchartindicatoradd
https://www.mql5.com/pt/docs/standardlibrary/cchart/cchartindicatordelete

Ola, acredito que essas funções são usadas quando se utiliza a adição de indicadores com iMA, iMACD. Caso use por exmplo o iCuston, ainda assim pra rodar o EA teria que se ter um arquivo separado do indicador.


O que eu quero fazer é codificar todos os indicadores dentro do EA, mesmo aqueles customizados e ter a possibilidade de que ele apareçam no gráfico. O robô do Vilela por exemplo faz isso. Agora como ele faz? 

Rogerio Giannetti Torres
3837
Rogerio Giannetti Torres  
wellingtondala:


Olá,

as funções de plotagem só podem ser usadas em indicadores, portanto não tem como plotar o gráfico dos indicadores construídos dentro de um EA.

Daniel Jose
7
Daniel Jose  

@wellingtondala

Estou vindo recentemente para o forum, e não pude de notar a sua duvida, é algo super simples de ser resolvido:

SIM é possivel adicionar indicadores no EA de forma que eles venham a aparecem no grafico ( seja em na Janela atual ou em uma Sub Janela ) 😁👍

Para ficar claro, de como se faz adicione no cabeçario do seu EA o seguinte codigo, um detalhe, MUDE conforme o necessario a STRING indicada como def_Resource para ela apontar para o arquivo SUPPORT.EX5 caso contrario o MT5 irá indicar falhar ao tentar carregar o INDICADOR...
//+------------------------------------------------------------------+
#define def_Resource "\\Experts\\Pessoal\\Robots\\Support.ex5"
#define def_ObjName "_Chart_" + __FILE__
//+------------------------------------------------------------------+

O codigo do arquivo SUPPORT.EX5 é o seguinte, ele pode ser o codigo de um indicador qualquer, mas aqui é apenas para exemplificar como se faz 😁👍:

//+------------------------------------------------------------------+
//|                                                      Support.mq5 |
//|                                                      Daniel Jose |
//+------------------------------------------------------------------+
#property copyright "Daniel Jose 25-01-2020 (A)"
#property version   "1.00"
#property description "Este arquivo serve apenas como Suporte ao Indicador"
#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
int OnInit()
{
        IndicatorSetString(INDICATOR_SHORTNAME, "Support");
        
        return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[])
{
        return(rates_total);
}
//+------------------------------------------------------------------+
Crie o codigo normalmente do seu EA e adicione dentro do EA mais um pequeno trecho de codigo
//+------------------------------------------------------------------+
bool InitCustom(const string szInfo)
{
        ResetLastError();
        if ((handleChartIndicator = iCustom(NULL, 0, def_Resource)) == INVALID_HANDLE) return false;
        IdChartIndicator = (int) ChartGetInteger(0, CHART_WINDOWS_TOTAL);
        if (!ChartIndicatorAdd(0, IdChartIndicator, handleChartIndicator))return false;
        if (!ObjectCreate(0, def_ObjName, OBJ_CHART, IdChartIndicator, 0, 0)) return false;
        ObjectSetString(0, def_ObjName, OBJPROP_SYMBOL, szInfo);

        return true;
}
//+------------------------------------------------------------------+

Este ultimo trecho é que será o grande barato, estude ele, modifique-o e entenda exatamente o que ele esta fazendo pois, diferente do que muitos não entendem, é que podemos SIM fazer qualquer coisa no MT5 graças ao fato de que a MQL5 ser praticamente a linguagem C++ ...

Só para de dar um direcionamento, o codigo InitCustom irá criar criar uma SUB JANELA no grafico atual e irá apresentar um outro grafico dentro desta SUB JANELA, o simbolo que iremos visualizar é passado como parametro ....

Se você entender estes trechos de codigo irá conseguir adicionar qualquer coisa ao seu EA  ... e BOA SORTE ... 😁👍

Indicador customizado com seu código dentro do EA
Indicador customizado com seu código dentro do EA
  • 2020.03.12
  • www.mql5.com
Ola, com faço para que um indicador possa aparecer no gráfico sendo que seu código está em uma classe e compilado no próprio EA...
Rogerio Giannetti Torres
3837
Rogerio Giannetti Torres  
Daniel Jose:

Olá Daniel,

só contribuindo com seu post.

O comando #define é uma diretiva de compilação para macro substituição.

O comando #resource é uma diretiva de compilação que diz ao compilador para incluir um recurso ao EX5 final, desse modo  o EX5 pode ser distribuído sem distribuir o recurso. 

O camando ChartIndicadorAdd() insere o indicador especificado no handle na janela gráfica.


//+------------------------------------------------------------------+
#define def_Resource "\\Experts\\Pessoal\\Robots\\Support.ex5"
#resource "\\Indicators\\MyIndicators\\WeisWaves.ex5"
void OnStart(void)
  {
   Print(def_Resource);
   int weisWavesHandle = iCustom(_Symbol, 0, "::Indicators\\MyIndicators\\WeisWaves", 0);
   if(weisWavesHandle == INVALID_HANDLE)
     {
      Print(__FUNCTION__ + ": Erro ao abrir weisWavesHandle: ", GetLastError());
     }
   ChartIndicatorAdd(0, 1, weisWavesHandle);
  }
//+------------------------------------------------------------------+
Arquivos anexados:
Forum.ex5  31 kb