De fato, um artigo muito interessante! Conceito sólido e agradável... mas temo que haja um erro no software distribuído, e não é bom deixar erros por aí.
MQL5 programs not only automate routine calculations, but also can create a full-featured graphical environment. The functions for creating truly interactive controls are now virtually the same rich, as those in classical programming languages. If you want to write a full-fledged stand-alone program in MQL5, use resources in them. Programs with resources are easier to maintain and distribute.
Por que preciso transferir cálculos de um indicador para um Expert Advisor?
Muitas pessoas usam indicadores sem um Expert Advisor.
Você pode simplesmente dividir os cálculos em etapas.
Por exemplo, assim:
Devido ao fato de que o mecanismo regular dos indicadores funciona por meio de um toco, por exemplo: https://www.mql5.com/ru/forum/372612 e isso se deve à sua implementação.
Com o aumento da complexidade dos indicadores, meu Expert Advisor ficou "atolado". No testador, encontrei muitos outros bugs no trabalho dos indicadores, mas não os descrevi, porque é inútil.
Devido ao fato de que o mecanismo regular de indicadores funciona por meio do toco, por exemplo: https://www.mql5.com/ru/forum/372612 e isso se deve à sua implementação.
Com o aumento da complexidade dos indicadores, meu Expert Advisor ficou "atolado". No testador, encontrei muitos outros bugs no trabalho dos indicadores, mas não os descrevi, porque é inútil.
Não entendi sua ideia.
Para começar, seu código não está totalmente correto.
Eu o escreveria assim:
intOnInit()
{int TicksTesterIndicatorHandle = INVALID_HANDLE;
bool InitComplite=false;
if(IndicatorInitialization() == false) return(INIT_FAILED);
return(INIT_SUCCEEDED);
}
voidOnDeinit(constint reason)
{
if(TicksTesterIndicatorHandle != INVALID_HANDLE) IndicatorRelease(TicksTesterIndicatorHandle);
}
voidOnTick() { //se(!InitComplite)
// {// IndicatorInitialisation();
// } } //+------------------------------------------------------------------+
bool IndicatorInitialization()
{ //---Obter o identificador do indicador TicksTesterIndicator
TicksTesterIndicatorHandle=iCustom(NULL, _Period, "OnInit_TestIndicator");
//--- Necessidade de verificar se foram retornados valores de alça inválidosif(TicksTesterIndicatorHandle == INVALID_HANDLE)
{ Print("Erro ao criar o indicador TicksTesterIndicator - número do erro: ",GetLastError(),"!!!");
}
else
{
Print("TicksTesterIndicator inicializado, identificador: ", TicksTesterIndicatorHandle);
ArraySetAsSeries(Buf, true);
InitComplite=true;
return(true);
}
return(false);
}
Além disso, como as funções nos indicadores devem ser executadas com atrasos mínimos, os processos complexos (carregamento de histórico, cálculos complexos etc.)
são divididos em várias partes, retornando ao
OnCalculate
valor zero (return(0) ), ou seja, o indicador está no estágio inicial até executarmos todas as ações necessárias com atrasos mínimos em cada estágio.
В архитектуре MetaTrader 5 организован асинхронный доступ к значениям индикаторов. Иными словами, при получении хэндла индикатора он прикрепляется к графику. Далее этот индикатор производит свои расчеты вне потока советника. Они взаимодействуют лишь на этапе передачи данных, аналогично получению данных тайм-серий. Поэтому и время на выполнение этих операций сопоставимо.
Então você está dizendo que será mais rápido na vida real? -Porque na realidade será assim. Especialista em uma trilha, indicador em outra (e talvez até em núcleos diferentes). Somente se você o colocar em processamento serial, ele se tornará mais lento - mas essa é apenas uma limitação artificial devido ao testador de estratégia.
Não entendi no artigo se o indicador de classe tem proteção contra barras perdidas. Por exemplo, se houve uma interrupção de conexão por 5 barras e, em seguida, o histórico foi carregado, o indicador de classe preencherá novamente apenas o último valor na simulação ou fará um recálculo completo?
Decidi compartilhar o Indicator.mqh, que foi modificado por mim mesmo, talvez economize o tempo de alguém ao traduzir o indicador para uma classe.
Foi publicado o novo artigo Implementando cálculos de indicadores em um código de Expert Advisor:
Autor: Dmitriy Gizlyk
Uma explosão do passado aqui.
De fato, um artigo muito interessante! Conceito sólido e agradável... mas temo que haja um erro no software distribuído, e não é bom deixar erros por aí.
Método GetData. O código distribuído é:
O código corrigido deve ser:
O índice da matriz começa em 0 e o último elemento tem o índice (m_data_len - 1) em vez de m_data_len, não é?
rf, seção Trabalhando com indicadores personalizados de https://www.mql5.com/pt/articles/261
Obrigado pelo artigo! Estou estudando-o para me afastar dos indicadores convencionais instáveis.
Mas é importante para mim poder visualizar os indicadores em um gráfico. Alguém já o implementou?
O artigo Como transferir a parte de cálculo de qualquer indicador para o código do Expert Advisor foi publicado:
Autor: Dmitriy Gizlyk
Por que você precisa transferir cálculos de um indicador para um Expert Advisor?
Muitas pessoas usam indicadores sem EA.
Você pode simplesmente dividir os cálculos em etapas.
Por exemplo, assim:
Por que preciso transferir cálculos de um indicador para um Expert Advisor?
Muitas pessoas usam indicadores sem um Expert Advisor.
Você pode simplesmente dividir os cálculos em etapas.
Por exemplo, assim:
Devido ao fato de que o mecanismo regular dos indicadores funciona por meio de um toco, por exemplo: https://www.mql5.com/ru/forum/372612 e isso se deve à sua implementação.
Com o aumento da complexidade dos indicadores, meu Expert Advisor ficou "atolado". No testador, encontrei muitos outros bugs no trabalho dos indicadores, mas não os descrevi, porque é inútil.
Não entendi sua ideia.
Devido ao fato de que o mecanismo regular de indicadores funciona por meio do toco, por exemplo: https://www.mql5.com/ru/forum/372612 e isso se deve à sua implementação.
Com o aumento da complexidade dos indicadores, meu Expert Advisor ficou "atolado". No testador, encontrei muitos outros bugs no trabalho dos indicadores, mas não os descrevi, porque é inútil.
Não entendi sua ideia.
Para começar, seu código não está totalmente correto.
Eu o escreveria assim:
Além disso, como as funções nos indicadores devem ser executadas com atrasos mínimos, os processos complexos (carregamento de histórico, cálculos complexos etc.)
são divididos em várias partes, retornando ao
OnCalculatevalor zero (return(0) ), ou seja, o indicador está no estágio inicial até executarmos todas as ações necessárias com atrasos mínimos em cada estágio.
В архитектуре MetaTrader 5 организован асинхронный доступ к значениям индикаторов. Иными словами, при получении хэндла индикатора он прикрепляется к графику. Далее этот индикатор производит свои расчеты вне потока советника. Они взаимодействуют лишь на этапе передачи данных, аналогично получению данных тайм-серий. Поэтому и время на выполнение этих операций сопоставимо.Então você está dizendo que será mais rápido na vida real? -Porque na realidade será assim. Especialista em uma trilha, indicador em outra (e talvez até em núcleos diferentes). Somente se você o colocar em processamento serial, ele se tornará mais lento - mas essa é apenas uma limitação artificial devido ao testador de estratégia.