Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
- Visualizações:
- 937
- Avaliação:
- Publicado:
- 2017.05.03 10:39
-
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Se, no MetaTrader, for alterado o timeframe ou o nome do símbolo do gráfico, todos los indicadores no gráfico serão descarregados e carregados novamente nele. Ao acontecer isto, ao contrário de MT4, no MT5 o processo de descarregamento/carregamento não é determinado devido a características da arquitetura interna.
Isto, por vezes, traz problemas relacionados com o fato de que o OnInit da nova cópia carregada do indicador pode ser executado antes do OnDeinit da cópia descarregada.
Tal situação está relacionada ao desejo de enviar (direta/indiretamente) certas informações a partir do OnDeinit de uma cópia velha do indicador para o OnInit da nova. Em outras palavras, a nova cópia necessita, por um lado, conhecer a existência do indicador da cópia velha e, por outro, não ser carregada até que a velha não seja descarregada.
Esta biblioteca permite que qualquer indicador esteja dotado com uma sincronização desse tipo.
Como exemplo, tomemos um indicador simples
#property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 #property indicator_color1 clrRed #property indicator_type1 DRAW_LINE input int Input = 0; double Buffer[]; int OnInit() { SetIndexBuffer(0, Buffer); Print("Init"); return(INIT_SUCCEEDED); } void OnDeinit( const int Reason ) { Print("DeInit"); } void OnChartEvent( const int id, const long& lparam, const double& dparam, const string& sparam ) { } void OnTimer() { } int OnCalculate( const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[] ) { ArrayCopy(Buffer, open, prev_calculated, prev_calculated); return(rates_total); }
Se for executado este indicador e começado a mudar de timeframe ou símbolo, veremos no log a violação na alternância de cadeia de caracteres "Init" e "Deinit".
No entanto, se for adicionado a seguinte cadeia de caracteres no início do código do indicador
#include <Init_Sync.mqh> // torna sincronizados os Init/Deinit dos indicadores
será observada a rotação correspondente.
Para que esta propriedade seja operada para qualquer indicador, é necessário adicionar a cadeia de caracteres acima no início do código deste indicador.
Observações
// A biblioteca torna sincronizados o Init/Deinit dos indicadores. // No indicador devem estar as funções int OnInit(), OnDeinit, OnTimer e OnChartEvent. // A que não são utilizados - deixar espaços vazios. #include <TypeToBytes.mqh> // https://www.mql5.com/pt/code/16280 #include <crc64.mqh> // https://www.mql5.com/en/blogs/post/683577
Os arquivos mqh anexos estão nas ligações do código-fonte
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/18138
![Color_Spread](https://c.mql5.com/i/code/indicator.png)
O indicador mostra o spread atual usando uma linha colorida.
![Exp_XFatlXSatlCloud](https://c.mql5.com/i/code/expert.png)
Sistema de negociação Exp_XFatlXSatlCloud construído com base nas alterações da direção da tendência exibida pelo indicador XFatlXSatlCloud.
![XMA_BB_Pivot](https://c.mql5.com/i/code/indicator.png)
Dois retângulos com preenchimento colorido construídos entre os valores de dois canais de Bollinger numa mesma barra.
![XMA_Keltner_Pivot](https://c.mql5.com/i/code/indicator.png)
Dois retângulos com preenchimento colorido construídos entre os valores de dois canais de Keltner numa mesma barra.