Scripts: sChartsSynchroScroll

 

sChartsSynchroScroll:

O script oferece uma rolagem sincronizada para todos os gráficos abertas no terminal do cliente.


Autor: Dmitry Fedoseev

[Excluído]  

Entendi corretamente que esse script funciona simultaneamente com gráficos de diferentes períodos de tempo (como é feito aqui)?

O estilo do código lembra o MQL4. E isso não é ruim. Muito obrigado!

[Excluído]  

Há um problema de dessincronização dos gráficos à esquerda e à direita da linha de tempo total. Eu gostaria que as barras fossem sincronizadas por tempo em toda a largura do gráfico.

Sugiro que os desenvolvedores pensem novamente (talvez, coloquem isso em discussão) sobre a possibilidade de visualizar o gráfico com e sem "buracos" - barras. Nesse caso, seria apenas uma visualização, ou seja, as barras de "buracos" não estariam disponíveis na MQL5.

 

Dmitry, provavelmente seria mais fácil fazer isso por meio do CHARTEVENT_CLICK em vez de fazer um loop...

Aqui está um exemplo de sincronização de gráficos de uma moeda

//------------------------------------------------------------------ OnChartEvent
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
 if (id==CHARTEVENT_CLICK)
 {
   long cid=ChartFirst();
   long fbar=ChartGetInteger(ChartID(), CHART_FIRST_VISIBLE_BAR);
   datetime tm[], tm1[];
   int rez=CopyTime(Symbol(), Period(), 0, fbar, tm); if (rez<fbar) return;
   while (cid!=-1)
   {
    ChartSetInteger(cid, CHART_AUTOSCROLL, false); ChartSetInteger(cid, CHART_SHIFT, false);
    if (cid!=ChartID() && ChartSymbol(cid)==Symbol()) 
    {
     rez=CopyTime(ChartSymbol(cid), ChartPeriod(cid), TimeCurrent(), tm[0], tm1); if (rez<0) break;
     ChartNavigate(cid, CHART_END, rez-ChartGetInteger(cid, CHART_WIDTH_IN_BARS)+2);
     ChartRedraw(cid);
    }
    cid=ChartNext(cid);
   }
 }
}

e é isso!

 
getch:

Entendi corretamente que esse script funciona simultaneamente com gráficos de diferentes períodos de tempo (como é feito aqui)?

O estilo do código lembra o MQL4. E isso não é ruim. Obrigado!


Ele funcionará com diferentes períodos de tempo.
 
sergeev:

Dimitri, provavelmente seria mais fácil fazer isso por meio do CHARTEVENT_CLICK em vez de fazer um loop...

Aqui está um exemplo de sincronização de gráficos de uma moeda

e é isso!

Nem tudo é tão simples. Sua função sincroniza as barras na borda esquerda do gráfico, o que não é muito conveniente para o estudo visual do histórico. Você também deve desativar o deslocamento do gráfico, o que também não é muito conveniente (embora seja uma questão de gosto). Os desenvolvedores acrescentariam a capacidade de obter e definir o recuo a partir da borda direita ou a navegação por tempo. Em geral, muitas funções são feitas em um estilo tão universal que você pode passar o número da barra ou o tempo. Além disso, o evento é processado somente para o gráfico no qual o script funciona.

----------------------------------------------------------------------------------------------------------------

OnChartEvent

OnChartEvent() é um manipulador do grupo de eventos ChartEvent:

...

...

A função pode ser chamada somente em EAs e deve ter o tipo void e 4 parâmetros:

----------------------------------------------------------------------------------------------------------------

O tratamento de eventos funciona somente em Expert Advisors. Só pode haver um Expert Advisor em um gráfico; não se deve substituir um Expert Advisor por outros auxiliares e praticamente inúteis. É minha convicção que as ferramentas auxiliares que não estão diretamente relacionadas à execução da negociação não devem ser criadas na forma de Expert Advisors, com algumas exceções de extrema necessidade.

 
Integer:

OnChartEvent

OnChartEvent() é um manipulador do grupo de eventos ChartEvent:

...

...

Afunção pode ser chamada somente em Expert Advisors e deve ter o tipo void e 4 parâmetros:

----------------------------------------------------------------------------------------------------------------

O processamento de eventos funciona somente em Expert Advisors. Só pode haver um Consultor Especialista em um gráfico; não se deve substituir um Consultor Especialista por outros auxiliares e praticamente inúteis. É minha convicção que as ferramentas auxiliares não diretamente relacionadas à execução da negociação não devem ser criadas na forma de Expert Advisors, com algumas exceções de extrema necessidade.

Esse não é mais o caso, fique de olho nos anúncios - https://www.mql5.com/ru/forum/23/page4:

MetaTrader 5 Client Terminal build 245

  1. Terminal: corrigido o erro de contabilização de fundos de margem livre em ativos (na guia Exposição).
  2. Terminal: corrigido o funcionamento da propriedade de gráfico "Gráfico em primeiro plano".
  3. Terminal: corrigida e redesenhada a janela de visualização de impressão do gráfico.
  4. Terminal: corrigido um erro ao trabalhar com variáveis globais temporárias.
  5. Terminal: combinadas as barras de ferramentas "Padrão" e "Gráficos".
  6. MQL5: Correções em falhas e mensagens do fórum
  7. MQL5: Alterado o princípio de operação das funções Copy* para Expert Advisors e scripts - agora as funções aguardarão o download e a construção dos dados solicitados. O tempo de espera para os dados solicitados não excederá 30 segundos. Uma descrição mais detalhada estará disponível na Ajuda da MQL5 em um futuro próximo.
  8. MQL5: adicionada a possibilidade de processamento de eventos por indicadores personalizados, semelhante aos Expert Advisors. Uma descrição mais detalhada estará disponível na Ajuda da MQL5 em um futuro próximo.

.

 
Integer писал(а) :

Não é tão simples assim. Sua função sincroniza as barras na borda esquerda do gráfico, o que não é muito conveniente para o estudo visual do histórico.

Mas é possível sincronizar as barras em qualquer borda e fornecer ao negociador botões para escolher - pelo centro, pela direita, pela esquerda....

O deslocamento do gráfico também deve ser desativado, o que também não é muito conveniente (embora seja uma questão de gosto).

Os desenvolvedores acrescentariam a capacidade de obter e definir o recuo a partir da borda direita ou a navegação por tempo. Em geral, muitas funções são feitas em um estilo tão universal que você pode passar o número da barra ou o tempo.

A propósito, esse recurso está disponível. CHART_SHIFT_SIZE

veja o exemplo ObjChartSample.mq5

 

Parece que algo está errado com CHART_FIRST_VISIBLE_BAR.

Se você fizer ChartNavigate() para um número obviamente maior do que o número no qual você pode visualizar o gráfico, então

ChartGetInteger(ChartID(),CHART_FIRST_VISIBLE_BAR) se torna maior que Bars(ChartSymbol(ChartID()),ChartPeriod(ChartID())).

Exemplo no script 2.mq5. Execute o script e aguarde um pouco.

Arquivos anexados:
2.mq5  2 kb
 

algo me diz que o terminal não está atualizado.

Porque se você executar o script imediatamente de novo, ele funcionará na primeira vez.

Talvez seja necessário controlar o tempo

Talvez o SeriesInfoInteger possa ajudar?

[Excluído]  
Integer, sergeev, de acordo com suas postagens, tenho uma impressão extremamente desagradável de que a MQL5 e a MT5 são bastante cruas.