Discussão do artigo "Criando um indicador de várias moedas utilizando um número de buffers indicadores intermediários"

 

Novo artigo Criando um indicador de várias moedas utilizando um número de buffers indicadores intermediários foi publicado:

Houve um recente aumento de interesse em análises de cluster do mercado FOREX. O MQL5 abre novas possibilidades para pesquisa de tendências de movimento de pares de moeda. Um recurso chave do MQL5, diferenciando-o do MQL4 é a possibilidade de utilizar uma quantia ilimitada de buffers de indicador. Este artigo descreve um exemplo da criação de um indicador de diversas moedas.

Figura 4. RSI ao lado dos índices

Autor: Alexey Klenov

 

seria útil que esses indicadores também classificassem esse indicador

dependendo de seus valores. Se houver uma função desse tipo, compartilhe-a, para não inventar uma bicicleta.

 
Prival:

Seria útil classificar isso também em tais indicadores

dependendo de seus valores. Se houver uma função desse tipo, compartilhe-a, para não inventar uma bicicleta.

Não existe uma função pronta, mas acho que não será difícil esboçá-la.

19.05.2010

Aqui está a realização

Arquivos anexados:
 

Muito obrigado.

A única coisa que gostaria de salientar é que o método de sincronização nem sempre funciona. Aqui está uma imagem. Buraco entre aspas por 24 horas, mas tudo está sincronizado (((.

Isso é muito ruim. Por que não consigo entender e, o mais importante, o que fazer a respeito?

 
Prival:

Obrigado.

A única coisa que gostaria de salientar é que o método de sincronização nem sempre funciona. Aqui está uma imagem. Buraco entre aspas por 24 horas, mas tudo está sincronizado ((((.

Isso é muito ruim. Por que não consigo entender e, o mais importante, o que fazer a respeito?


O indicador usa dois tipos de sincronização

1 pelo número de barras (deve haver mais barras no gráfico do que o histórico exigido por padrão de 500 barras) - essa condição é aparentemente atendida.

2 pelo tempo de abertura da barra zero em cada par de moedas - aparentemente, essa condição também é atendida.

Acho que vale a pena acrescentar um terceiro tipo de sincronização para verificar o horário de abertura de cada barra em cada par, por analogia com o segundo tipo de sincronização.

Como estarei um pouco mais livre, farei esse tipo também.

 
olyakish:

....

Acho que vale a pena adicionar um terceiro tipo de sincronização para verificar o horário de abertura de cada barra em cada par, por analogia com o segundo tipo de sincronização.

Em sua imagem e similaridade, criei a função bool init_tf(...).

//+------------------------------------------------------------------+
//| Inicialização dos gráficos dos pares de moedas envolvidos
//| e verificação de sincronização de dados|
//+------------------------------------------------------------------+
//| in.|
//| mas[] é uma matriz de nomes dos caracteres necessários
//| time_0 - hora atual da barra[0]|
//| count_Bars - número necessário de barras
//+------------------------------------------------------------------+
bool init_tf(string &mas[], datetime time_0, int count_Bars) { 
   bool     rez=false;              // sinalizador de sucesso
   int      copied=0,               // número de dados copiados
            counter=0,              // contador de erros
            tmp_bars=0;             // para verificar o número de barras disponíveis
   datetime tmp_time[1];            // matriz para verificar o tempo de barra
   
   f_comment("Há uma sincronização em andamento.");
     
   for(int i=0; i<count_symbol; i++)  {
      //Print("i=",i," ",count_symbol," ",mas[i]);
      tmp_bars=Bars(mas[i],PERIOD_CURRENT);
      if(tmp_bars<count_Bars) { // verificar o número de barras
         Print("i=",i," Não há barras suficientes (", mas[i],"-",fTimeFrameName(_Period),") MaxBars=",MaxBars," > Bars=",tmp_bars);
         counter++;
      }
      ResetLastError();
      copied = CopyTime(mas[i],PERIOD_CURRENT,0,1,tmp_time);
      if(copied < 1) { // erro de cópia
         Print("i=",i," Erro de cópia (", mas[i],"-",fTimeFrameName(_Period),") №",_LastError," (",ErrorDescription(_LastError),")");
         counter++;
      }
      if(tmp_time[0]!=time_0) { // a hora não coincide
         Print("i=",i," Sem sincronização de horário (", mas[i],"-",fTimeFrameName(_Period),") delta ="",(long)(time_0-tmp_time[0])/60," min");
         counter++;
      }
   }// fim for(int i=0; i<k; i++)
   
   if(counter==0) {  // tudo está ok. sem erros
      rez=true;
      f_comment("Tudo. Está bem.");
   } 
   else f_comment("Não há sincronização."+(string)counter);

   ChartRedraw( );
   return(rez);
}

Selecionei 12 pares que estarão no campeonato. Criei um indicador RVI_ALL apenas com o objetivo de estudar a sincronização. Iniciei-o. Resultado.

2010.05.30 16:55:26 RVI_ALL (EURUSD,M1) i= 10 Sem sincronização de tempo ( GBPJPY - M1 ) delta = 1 min

2010.05.30 16:55:26 RVI_ALL (EURUSD,M1) i= 5 Sem sincronização de tempo ( AUDUSD - M1 ) delta = 1 min

2010.05.30 16:55:26 RVI_ALL (EURUSD,M1) i= 1 Sem sincronização de tempo ( GBPUSD - M1 ) delta = 1 min

É domingo, não há barras (última barra) nesses símbolos. O próximo tick, somente na segunda-feira. Então me lembrei do gráfico deste artigo sem buracos https://www.mql5.com/pt/articles/1407.

E haverá buracos. Haverá. Precisamos combatê-los de alguma forma. Em princípio, você pode fazer o mesmo que foi descrito no artigo. Mas tenho uma pergunta.

O indicador está suspenso em um único gráfico. E se houver uma troca de histórico nesse símbolo, eu posso descobrir isso, o prev_calculated será redefinido para zero.

Mas como posso saber se os outros símbolos tiveram uma troca de histórico ou se os dados chegaram com um grande atraso?

 
Prival:

E haverá buracos. Eles vão acontecer. É preciso lidar com eles de alguma forma. Em princípio, você pode fazer o mesmo que foi descrito no artigo. Mas eu tenho uma pergunta.

O indicador está suspenso em um único gráfico. E se houve uma troca de histórico nesse símbolo, eu posso descobrir isso, prev_calculated será redefinido para zero.

Mas como posso saber se os outros símbolos tiveram uma troca de histórico ou se os dados chegaram com um grande atraso?


1 Não permita que o indicador seja desenhado se houver um buraco no histórico e faça uma sondagem periódica do histórico no momento de "corrigir" o buraco. (Um novo tique no gráfico atual ou um cronômetro).

2. ou desenhar o indicador somente até o buraco, desde que o buraco no histórico esteja longe o suficiente.

e modificar ligeiramente essa função

bool init_tf(string &mas[], datetime time_0, int count_Bars, int shift) 
и далее по тексту 
copied = CopyTime(mas[i],PERIOD_CURRENT,shift,1,tmp_time);


Em seguida, chame essa função em um loop (de 0 a shiftbars).

Nesse caso

shift

será a posição da barra no instrumento atual e no TF, que verificamos para sincronização com outros instrumentos.

 

Não tenho como saber se há um buraco na história.

https://www.mql5.com/ru/forum/1111/8747#comment_8747

A única saída é copiar a hora e fazer um loop por toda a matriz, mas isso pode ser novamente um incômodo, é um círculo vicioso ( ((

Se os desenvolvedores não alterarem o conceito de https://www.mql5.com/pt/articles/1407 para criar gráficos sem buracos, pode ser que seja impossível sincronizar tudo.

 
Prival:

Não tenho como saber se há um buraco na história.

https://www.mql5.com/ru/forum/1111/8747#comment_8747

A única saída é copiar a hora e fazer um loop por toda a matriz, mas isso pode ser novamente um incômodo, é um círculo vicioso ( ((

Se os desenvolvedores não alterarem o conceito de https://www.mql5.com/pt/articles/1407 para criar gráficos sem buracos, pode ser que seja impossível sincronizar tudo.

Use a sincronização por buffers de tempo[] e não haverá confusão.

Apenas uma chamada de citação deve ser acompanhada de uma pré-verificação por tempo, e então tudo será sincronizado.

Embora eu concorde que o caminho não é fácil e que pode haver muitos erros.

 

Olá!

Tenho dúvidas sobre a exatidão da fórmula do índice do dólar, talvez elas sejam falsas

Alguém poderia explicar essa fórmula com mais detalhes e como ela surgiu?

 


"O índice do dólar é um valor do tipo double calculado usando uma fórmula gentilmente fornecida a mim por Neutron."

Por que citar fórmulas e fazer referência ao nome de outra pessoa? Será que ele tem sete olhos na cabeça? Acontece que primeiro você precisa ler o artigo e depois perguntar aos autores das fórmulas? Se ele for o autor, então forneça o link de onde ele as obteve.