English Русский 中文 Español Deutsch 日本語
Sobreposição e interferência de valores mobiliários financeiros

Sobreposição e interferência de valores mobiliários financeiros

MetaTrader 4Exemplos | 8 fevereiro 2016, 14:44
454 0
Khristian Piligrim
Khristian Piligrim

"Como você não pode entrar no mesmo rio duas vezes,
não pode entrar no mesmo mercado duas vezes.
Tudo flui e nada se mantém…"

DAO Piligrimm

Introdução

Sabemos das palestras de física sobre o princípio de interferência da luz. A interferência é o fortalecimento ou o enfraquecimento de ondas da mesma frequência que se encontram em um ponto. De acordo com a eletrostática, a intensidade do campo do sistema de carga é igual à soma do vetor da intensidade de campos que seria produzida por cada uma das cargas do sistema separadamente.

Tendo essas duas leis como base, decidi verificar o desempenho deles nos valores mobiliários financeiros do mercado Forex. Para isso, considerei o seguinte como um axioma: qualquer par de moeda em cada momento no tempo mostra a razão de uma moeda em relação a outra; além disso, cada moeda nacional se altera no tempo não apenas com relação a outra moeda, mas também em relação a ela mesma.

A mudança de uma moeda nacional com o fluxo de tempo em relação a ela mesma é influenciada pela alteração de todo o complexo de fatores econômicos no país, ao qual a moeda pertence. O preço resultante em um gráfico de cada valor mobiliário é obtido como uma sobreposição de dois vetores que se alteram no tempo; depois disso, os dois vetores se alteram de acordo com a fase e a amplitude. Os vetores são derivados de sobreposições de todos os fatores econômicos dentro de um país, ao qual a moeda pertence, assim como de fatores internacionais.

Vamos considerar o par de moeda EURUSD como exemplo. O movimento resultante em um gráfico de preço é formado pela seguinte forma considerando a moeda nacional EUR e USD alterando-se com o fluxo de tempo:

1). EURUSD cresce, se:

а). EUR – cresce e USD – cai;

б). EUR – cresce e USD – não se altera;

в). EUR – não se altera e USD – cai;

г). EUR – cresce e USD – cresce, mas mais devagar que EUR;

2). EURUSD – cai, se:

а). USD – cresce e EUR – cai;

б). USD – cresce e EUR – não se altera;

в). USD – não se altera e EUR – cai;

г). USD – cresce e EUR – cresce, mas mais devagar que USD;

3). EURUSD – não se altera, se:

а). USD – não se altera e EUR – não se altera;

б). USD – cresce e EUR – cresce, mas na mesma velocidade que USD;

в). USD – cai e EUR – cai, mas na mesma velocidade que USD.

Quanto mais fatores influenciarem o comportamento de um par de moedas, mais difícil será avaliar seu comportamento e criar previsões futuras. Assim, se conseguirmos extrair componentes de um par de moeda, valores de uma moeda nacional que mudam com o tempo, poderemos delimitar consideravelmente a liberdade do movimento da moeda nacional em comparação ao par de moeda com esta moeda, assim como os fatores que influenciam seu comportamento. Como resultado, aumentaríamos a precisão da estimativa do seu comportamento e de previsões futuras. Como podemos fazer isso?

Princípio de sobreposição e interferência de valores mobiliários financeiros

Então, a tarefa é definida da seguinte forma: temos um par de moeda, por exemplo, EURUSD. Precisamos dividir este par em seus componentes - EUR e USD. Para resolver esta tarefa, usei percursos cruzados disponíveis de EUR e USD com outras moedas: EURGBP, EURJPY, EURAUD, EURCHF, EURCAD, EURNOK, EURSEK, EURDKK, EURNZD, EURSGD, EURHKD, USDCHF, USDJPY, USDCAD, USDNOK, USDSEK, USDDKK, USDSGD, USDHKD, USDMXN, USDZAR, GBPUSD, AUDUSD, NZDUSD. Apesar de ter dados dos percursos cruzados de USDMXN, USDZAR, eu não tinha os percursos cruzados correspondentes com EUR na minha empresa de corretagem. Mas isso pode ser facilmente resolvido: EURMXN = EURUSD * USDMXN; EURZAR = EURUSD * USDZAR.

No primeiro estágio de resolução da tarefa, devemos levar todas as moedas a uma escala única. Para isso, vamos calcular o coeficiente de escala para cada par de moeda como o valor médio de Close para um par de moeda correspondente no comprimento de amostra LengthSample. Após dividir os valores de preço de cada par de moeda ao longo de todo o comprimento da amostra pelo coeficiente de escala correspondendo a este par de moeda, obteremos os pares de moeda levados a uma escala única.

No segundo estágio para obter EUR e USD, vamos aplicar as leis de sobreposição e interferência para corresponder aos grupos de pares de moeda, contendo EUR e USD, correspondentemente; e os resultados médios pelo número de valores mobiliários usados.

EUR = (EURUSD + EURGBP + EURJPY + EURAUD + EURCHF + EURCAD + EURNOK + EURSEK + EURDKK + EURNZD + EURSGD + EURHKD + EURMXN + EURZAR)/14;
USD = (USDCHF + USDJPY + USDCAD + USDNOK + USDSEK + USDDKK + USDSGD + USDHKD + USDMXN + USDZAR + 1/GBPUSD + 1/AUDUSD + 1/NZDUSD + 1/EURUSD)/14;

Aceitando a prioridade de que um par de moeda é formado por dois vetores de moedas nacionais e as alterações de fases desses vetores no tempo não são sincronizadas, mas sim formadas em sua maioria sob a influência de fatores econômicos de um determinado país, podemos desenhar a seguinte conclusão:

Na sobreposição de percursos cruzados de várias moedas, o constituinte de um numerador, de acordo com a lei da interferência, se fortalece devido à coincidência de fases; os constituintes de um denominador são em grande parte mutualmente compensados devido à não coincidência de fases.

A fig. 1 mostra os gráficos dos resultados dos cálculos de EUR e USD de acordo com as fórmulas acima. A cor rosa mostra o EUR, azul - USD, azul claro - EURUSD.

Fig.1

Agora, vamos estimar qual é o erro de cálculo de EUR e USD que resulta da compensação incompleta de constituintes de denominador nas fórmulas acima. Para isso, vamos fazer gráficos de EURUSD, a linha azul claro na fig. 2, e da razão do EUR calculado em relação ao USD calculado, a linha vermelha na fig. 2.

Fig.2

A partir dos gráficos acima, fica claro que as distorções de fase de EUR e USD obtidas pela sobreposição e pela interferência dos percursos cruzados de moeda são insignificantes, mas o erro de amplitude é considerável, o que aponta para a compensação incompleta dos constituintes de moedas nacionais que são partes dos percursos cruzados de EUR e USD. Entretanto, pode ser observado que o caráter não linear do erro de barra a barra é pequeno, o que nos permite executar a compensação de erro na barra atual incluindo o compensador da barra anterior às fórmulas acima.

O erro de compensação é calculado da seguinte forma:

  Och   = EURUSD * USD / EUR;

Ao introduzir o valor de erro obtido nas fórmulas de cálculo de EUR e USD como um elemento de compensação da barra anterior no cálculo do atual, obtivemos um erro de cálculo bastante aceitável para a maioria dos problemas aplicados. A fig. 3 mostra os resultados de cálculo após a compensação, gráficos de EURUSD, a linha azul claro na fig. 3, e da razão do EUR calculado em relação ao USD calculado, a linha vermelha na fig. 3. Como visto nos gráficos, os resultados obtidos são muito melhor que antes da compensação.

Fig.3

Como tem sido dito, as distorções de fase introduzidas pelo método oferecido de extração de componentes de EUR e USD de EURUSD são insignificantes, mas quanto mais afastada da barra zero a história analisada estiver, assim como o EUR e o USD são obtidos com base nessa história, mais forte será o efeito de lacunas na história. Quando as barras são omitidas, devido às lacunas históricas, a sincronização dos percursos cruzados de moedas diferentes é perturbado. Isso resulta no surgimento de distorções de fase nos EUR e USD calculados em relação ao EURUSD.

Quanto mais nos aprofundamos na história, ou quanto menores são os períodos de tempo usando nos nossos cálculos, mais forte serão o efeito das lacunas histórias e maiores serão as distorções de fase de resultados. A fig. 4 mostra os gráficos que provam a afirmação acima. Esses gráficos são a continuação dos gráficos da fig. 3 mais aprofundados na história. Devido ao erro acumulado que está conectado à omissão de barras histórias separadas de vários valores mobiliários usados, vemos distorções de fase consideráveis. Para resolver este problema, devemos usar os dados históricos de qualidade mais alta ou meio especiais para preencher essas lacunas históricas.

Fig.4

Após calcular EUR e USD, podemos calcular qualquer outra moeda nacional.

GBP = (EUR / EURGBP + GBPUSD * USD) / 2;
JPY = (EUR / EURJPY + USD / USDJPY) / 2;
AUD = (EUR / EURAUD + AUDUSD * USD) / 2;
CHF = (EUR / EURCHF + USD / USDCHF) / 2;
CAD = (EUR / EURCAD + USD / USDCAD) / 2;
NOK = (EUR / EURNOK + USD / USDNOK) / 2;
SEK = (EUR / EURSEK + USD / USDSEK) / 2;
DKK = (EUR / EURDKK + USD / USDDKK) / 2;
NZD = (EUR / EURNZD + NZDUSD * USD) / 2;
SGD = (EUR / EURSGD + USD / USDSGD) / 2;
HKD = (EUR / EURHKD + USD / USDHKD) / 2;
MXN = (EUR / EURMXN + USD / USDMXN) / 2;
ZAR = (EUR / EURZAR + USD / USDZAR) / 2;

A fig. 5 mostra uma série de moedas calculadas acima representadas em um gráfico. EURUSD – cor azul claro, EUR – cor rosa, USD – cor azul, GBP – cor vermelha, JPY – cor marrom, AUD – roxo, CHF – amarelo, CAD – preto.

Fig.5

O algoritmo de cálculo de moeda nacional descrito acima usando o princípio de sobreposição e interferências é implementado no meu indicador SuperPosition, que está anexado ao artigo.

//+------------------------------------------------------------------+
//|                                                SuperPosition.mq4 |
//|                                       Copyright © 2009,Piligrimm |
//|                                     mailto: piligrimm_fx@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009,Piligrimm"
#property link      "mailto: piligrimm_fx@mail.ru"
#property indicator_separate_window   
#property indicator_buffers 3
#property indicator_color1 Magenta
#property indicator_color2 Blue
#property indicator_color3 Aqua
//---- input parameters
extern int LengthSample=1000;
int i,j;
double GL[][81],EURClose[],USDClose[],EURUSDClose[],EURHigh[],USDHigh[],EURUSDHigh[],EURLow[],USDLow[];
double GBPClose[],JPYClose[],AUDClose[],CHFClose[],CADClose[],NOKClose[],SEKClose[],EURUSDLow[],Kf[27];
double DKKClose[],NZDClose[],SGDClose[],HKDClose[],MXNClose[],ZARClose[],SGDLow[],HKDLow[],MXNLow[];
double GBPHigh[],JPYHigh[],AUDHigh[],CHFHigh[],CADHigh[],NOKHigh[],SEKHigh[],DKKLow[],NZDLow[];
double DKKHigh[],NZDHigh[],SGDHigh[],HKDHigh[],MXNHigh[],ZARHigh[],ZARLow[],CloseOch,HighOch,LowOch;
double GBPLow[],JPYLow[],AUDLow[],CHFLow[],CADLow[],NOKLow[],SEKLow[];
//---- buffers

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   
       SetIndexBuffer(0,EURClose);               // Assigning an array to a buffer
   //    SetIndexBuffer(0,EURHigh);              // Assigning an array to a buffer
   //    SetIndexBuffer(0,EURLow);               // Assigning an array to a buffer
       SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);//   Line style
       SetIndexBuffer(1,USDClose);               // Assigning an array to a buffer
   //    SetIndexBuffer(1,USDHigh);              // Assigning an array to a buffer
   //    SetIndexBuffer(1,USDLow);               // Assigning an array to a buffer
       SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,2);//   Line style
       SetIndexBuffer(2,EURUSDClose);            // Assigning an array to a buffer
   //    SetIndexBuffer(2,EURUSDHigh);           // Assigning an array to a buffer
   //    SetIndexBuffer(2,EURUSDLow);            // Assigning an array to a buffer
       SetIndexStyle (2,DRAW_LINE,STYLE_SOLID,2);//   Line style 
       
       ArrayResize(GL, LengthSample+1);
       ArrayResize(EURClose, LengthSample);
       ArrayResize(USDClose, LengthSample);
       ArrayResize(GBPClose, LengthSample);
       ArrayResize(JPYClose, LengthSample);
       ArrayResize(AUDClose, LengthSample);
       ArrayResize(CHFClose, LengthSample);
       ArrayResize(CADClose, LengthSample);
       ArrayResize(NOKClose, LengthSample);
       ArrayResize(SEKClose, LengthSample);
       ArrayResize(DKKClose, LengthSample);
       ArrayResize(NZDClose, LengthSample);
       ArrayResize(SGDClose, LengthSample);
       ArrayResize(HKDClose, LengthSample);
       ArrayResize(MXNClose, LengthSample);
       ArrayResize(ZARClose, LengthSample);       
       ArrayResize(EURHigh, LengthSample);
       ArrayResize(USDHigh, LengthSample);       
       ArrayResize(GBPHigh, LengthSample);
       ArrayResize(JPYHigh, LengthSample);
       ArrayResize(AUDHigh, LengthSample);
       ArrayResize(CHFHigh, LengthSample);
       ArrayResize(CADHigh, LengthSample);
       ArrayResize(NOKHigh, LengthSample);
       ArrayResize(SEKHigh, LengthSample);
       ArrayResize(DKKHigh, LengthSample);
       ArrayResize(NZDHigh, LengthSample);
       ArrayResize(SGDHigh, LengthSample);
       ArrayResize(HKDHigh, LengthSample);
       ArrayResize(MXNHigh, LengthSample);
       ArrayResize(ZARHigh, LengthSample);
       ArrayResize(EURLow, LengthSample);
       ArrayResize(USDLow, LengthSample);
       ArrayResize(GBPLow, LengthSample);
       ArrayResize(JPYLow, LengthSample);
       ArrayResize(AUDLow, LengthSample);
       ArrayResize(CHFLow, LengthSample);
       ArrayResize(CADLow, LengthSample);
       ArrayResize(NOKLow, LengthSample);
       ArrayResize(SEKLow, LengthSample);
       ArrayResize(DKKLow, LengthSample);
       ArrayResize(NZDLow, LengthSample);
       ArrayResize(SGDLow, LengthSample);
       ArrayResize(HKDLow, LengthSample);
       ArrayResize(MXNLow, LengthSample);
       ArrayResize(ZARLow, LengthSample);
       ArrayResize(EURUSDClose, LengthSample); 
       ArrayResize(EURUSDHigh, LengthSample);      
       ArrayResize(EURUSDLow, LengthSample);
       

//----

   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 

//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
//
int start()
    {//1

   for (i=0; i<=LengthSample; i++)                    
     {//2
       GL[i][0]=  iClose("EURUSD",0,i); 
       GL[i][1]=  iClose("EURGBP",0,i); 
       GL[i][2]=  iClose("EURJPY",0,i); 
       GL[i][3]=  iClose("EURAUD",0,i); 
       GL[i][4]=  iClose("EURCHF",0,i); 
       GL[i][5]=  iClose("EURCAD",0,i); 
       GL[i][6]=  iClose("EURNOK",0,i); 
       GL[i][7]=  iClose("EURSEK",0,i); 
       GL[i][8]=  iClose("EURDKK",0,i); 
       GL[i][9]=  iClose("EURNZD",0,i); 
       GL[i][10]= iClose("EURSGD",0,i); 
       GL[i][11]= iClose("EURHKD",0,i); 
       GL[i][12]= iClose("USDCHF",0,i); 
       GL[i][13]= iClose("USDJPY",0,i); 
       GL[i][14]= iClose("USDCAD",0,i); 
       GL[i][15]= iClose("USDNOK",0,i); 
       GL[i][16]= iClose("USDSEK",0,i); 
       GL[i][17]= iClose("USDDKK",0,i); 
       GL[i][18]= iClose("USDSGD",0,i); 
       GL[i][19]= iClose("USDHKD",0,i);
       GL[i][20]= iClose("USDMXN",0,i); 
       GL[i][21]= iClose("USDZAR",0,i); 
       GL[i][22]= iClose("GBPUSD",0,i); 
       GL[i][23]= iClose("AUDUSD",0,i); 
       GL[i][24]= iClose("NZDUSD",0,i); 
       GL[i][25]= GL[i][0]*GL[i][20];  //Close"EURMXN"
       GL[i][26]= GL[i][0]*GL[i][21];  //Close"EURZAR"
       GL[i][27]= iHigh ("EURUSD",0,i); 
       GL[i][28]= iHigh ("EURGBP",0,i); 
       GL[i][29]= iHigh ("EURJPY",0,i); 
       GL[i][30]= iHigh ("EURAUD",0,i); 
       GL[i][31]= iHigh ("EURCHF",0,i); 
       GL[i][32]= iHigh ("EURCAD",0,i); 
       GL[i][33]= iHigh ("EURNOK",0,i); 
       GL[i][34]= iHigh ("EURSEK",0,i); 
       GL[i][35]= iHigh ("EURDKK",0,i); 
       GL[i][36]= iHigh ("EURNZD",0,i); 
       GL[i][37]= iHigh ("EURSGD",0,i); 
       GL[i][38]= iHigh ("EURHKD",0,i); 
       GL[i][39]= iHigh ("USDCHF",0,i); 
       GL[i][40]= iHigh ("USDJPY",0,i); 
       GL[i][41]= iHigh ("USDCAD",0,i); 
       GL[i][42]= iHigh ("USDNOK",0,i); 
       GL[i][43]= iHigh ("USDSEK",0,i); 
       GL[i][44]= iHigh ("USDDKK",0,i); 
       GL[i][45]= iHigh ("USDSGD",0,i); 
       GL[i][46]= iHigh ("USDHKD",0,i);
       GL[i][47]= iHigh ("USDMXN",0,i); 
       GL[i][48]= iHigh ("USDZAR",0,i); 
       GL[i][49]= iHigh ("GBPUSD",0,i); 
       GL[i][50]= iHigh ("AUDUSD",0,i); 
       GL[i][51]= iHigh ("NZDUSD",0,i); 
       GL[i][52]= GL[i][27]*GL[i][47];  //High"EURMXN"
       GL[i][53]= GL[i][27]*GL[i][48];  //High"EURZAR"
       GL[i][54]= iLow  ("EURUSD",0,i); 
       GL[i][55]= iLow  ("EURGBP",0,i); 
       GL[i][56]= iLow  ("EURJPY",0,i); 
       GL[i][57]= iLow  ("EURAUD",0,i); 
       GL[i][58]= iLow  ("EURCHF",0,i); 
       GL[i][59]= iLow  ("EURCAD",0,i); 
       GL[i][60]= iLow  ("EURNOK",0,i); 
       GL[i][61]= iLow  ("EURSEK",0,i); 
       GL[i][62]= iLow  ("EURDKK",0,i); 
       GL[i][63]= iLow  ("EURNZD",0,i); 
       GL[i][64]= iLow  ("EURSGD",0,i); 
       GL[i][65]= iLow  ("EURHKD",0,i); 
       GL[i][66]= iLow  ("USDCHF",0,i); 
       GL[i][67]= iLow  ("USDJPY",0,i); 
       GL[i][68]= iLow  ("USDCAD",0,i); 
       GL[i][69]= iLow  ("USDNOK",0,i); 
       GL[i][70]= iLow  ("USDSEK",0,i); 
       GL[i][71]= iLow  ("USDDKK",0,i); 
       GL[i][72]= iLow  ("USDSGD",0,i); 
       GL[i][73]= iLow  ("USDHKD",0,i);
       GL[i][74]= iLow  ("USDMXN",0,i); 
       GL[i][75]= iLow  ("USDZAR",0,i); 
       GL[i][76]= iLow  ("GBPUSD",0,i); 
       GL[i][77]= iLow  ("AUDUSD",0,i); 
       GL[i][78]= iLow  ("NZDUSD",0,i); 
       GL[i][79]= GL[i][54]*GL[i][74];  //Low"EURMXN"
       GL[i][80]= GL[i][54]*GL[i][75];  //Low"EURZAR"                               
     }//2 

   for (j=0; j<27; j++)
     {//3
      Kf[j]=0;
    for (i=1; i<=LengthSample; i++)
      Kf[j]+=GL[i][j];
      Kf[j]/=LengthSample;
     }//3 
       
      CloseOch   = (GL[LengthSample][0]/Kf[0])*((Kf[0]/GL[LengthSample][0]+GL[LengthSample][12]/Kf[12]+GL[LengthSample][13]/Kf[13]
                   +GL[LengthSample][14]/Kf[14]+GL[LengthSample][15]/Kf[15]+GL[LengthSample][16]/Kf[16]+GL[LengthSample][17]/Kf[17]
                   +GL[LengthSample][18]/Kf[18]+GL[LengthSample][19]/Kf[19]+GL[LengthSample][20]/Kf[20]+GL[LengthSample][21]/Kf[21]
                   +Kf[22]/GL[LengthSample][22]+Kf[23]/GL[LengthSample][23]
                   +Kf[24]/GL[LengthSample][24])/14)/((GL[LengthSample][0]/Kf[0]
                   +GL[LengthSample][1]/Kf[1]+GL[LengthSample][2]/Kf[2]+GL[LengthSample][3]/Kf[3]+GL[LengthSample][4]/Kf[4]
                   +GL[LengthSample][5]/Kf[5]+GL[LengthSample][6]/Kf[6]+GL[LengthSample][7]/Kf[7]+GL[LengthSample][8]/Kf[8]
                   +GL[LengthSample][9]/Kf[9]+GL[LengthSample][10]/Kf[10]+GL[LengthSample][11]/Kf[11]+GL[LengthSample][25]/Kf[25]
                   +GL[LengthSample][26]/Kf[26])/14); 

      HighOch    = (GL[LengthSample][27]/Kf[0])*((Kf[0]/GL[LengthSample][27]+GL[LengthSample][39]/Kf[12]+GL[LengthSample][40]/Kf[13]
                   +GL[LengthSample][41]/Kf[14]+GL[LengthSample][42]/Kf[15]+GL[LengthSample][43]/Kf[16]+GL[LengthSample][44]/Kf[17]
                   +GL[LengthSample][45]/Kf[18]+GL[LengthSample][46]/Kf[19]+GL[LengthSample][47]/Kf[20]+GL[LengthSample][48]/Kf[21]
                   +Kf[22]/GL[LengthSample][49]+Kf[23]/GL[LengthSample][50]
                   +Kf[24]/GL[LengthSample][51])/14)/((GL[LengthSample][27]/Kf[0]
                   +GL[LengthSample][28]/Kf[1]+GL[LengthSample][29]/Kf[2]+GL[LengthSample][30]/Kf[3]+GL[LengthSample][31]/Kf[4]
                   +GL[LengthSample][32]/Kf[5]+GL[LengthSample][33]/Kf[6]+GL[LengthSample][34]/Kf[7]+GL[LengthSample][35]/Kf[8]
                   +GL[LengthSample][36]/Kf[9]+GL[LengthSample][37]/Kf[10]+GL[LengthSample][38]/Kf[11]+GL[LengthSample][52]/Kf[25]
                   +GL[LengthSample][53]/Kf[26])/14);
      
      LowOch     = (GL[LengthSample][54]/Kf[0])*((Kf[0]/GL[LengthSample][54]+GL[LengthSample][66]/Kf[12]+GL[LengthSample][67]/Kf[13]
                   +GL[LengthSample][68]/Kf[14]+GL[LengthSample][69]/Kf[15]+GL[LengthSample][70]/Kf[16]+GL[LengthSample][71]/Kf[17]
                   +GL[LengthSample][72]/Kf[18]+GL[LengthSample][73]/Kf[19]+GL[LengthSample][74]/Kf[20]+GL[LengthSample][75]/Kf[21]
                   +Kf[22]/GL[LengthSample][76]+Kf[23]/GL[LengthSample][77]+Kf[24]/GL[LengthSample][78])/14)/((GL[LengthSample][54]/Kf[0]
                   +GL[LengthSample][55]/Kf[1]+GL[LengthSample][56]/Kf[2]+GL[LengthSample][57]/Kf[3]+GL[LengthSample][58]/Kf[4]
                   +GL[LengthSample][59]/Kf[5]+GL[LengthSample][60]/Kf[6]+GL[LengthSample][61]/Kf[7]+GL[LengthSample][62]/Kf[8]
                   +GL[LengthSample][63]/Kf[9]+GL[LengthSample][64]/Kf[10]+GL[LengthSample][65]/Kf[11]+GL[LengthSample][79]/Kf[25]
                   +GL[LengthSample][80]/Kf[26])/14);
      
   for (i=LengthSample-1; i>=0; i--)
     {//4
      EURUSDClose[i]= GL[i][0]/Kf[0];

      EURClose[i]= (GL[i][0]/Kf[0]+GL[i][1]/Kf[1]+GL[i][2]/Kf[2]+GL[i][3]/Kf[3]+GL[i][4]/Kf[4]+GL[i][5]/Kf[5]+GL[i][6]/Kf[6]
                   +GL[i][7]/Kf[7]+GL[i][8]/Kf[8]+GL[i][9]/Kf[9]+GL[i][10]/Kf[10]+GL[i][11]/Kf[11]+GL[i][25]/Kf[25]
                   +GL[i][26]/Kf[26]+CloseOch)/14; 
                   
      USDClose[i]= (Kf[0]/GL[i][0]+GL[i][12]/Kf[12]+GL[i][13]/Kf[13]+GL[i][14]/Kf[14]+GL[i][15]/Kf[15]+GL[i][16]/Kf[16]
                   +GL[i][17]/Kf[17]+GL[i][18]/Kf[18]+GL[i][19]/Kf[19]+GL[i][20]/Kf[20]+GL[i][21]/Kf[21]+Kf[22]/GL[i][22]
                   +Kf[23]/GL[i][23]+Kf[24]/GL[i][24]+CloseOch)/14;
      
      CloseOch   = EURUSDClose[i]*USDClose[i]/EURClose[i];      
      GBPClose[i]= (Kf[1]*EURClose[i]/GL[i][1]+GL[i][22]*USDClose[i]/Kf[22])/2;                                                                 
      JPYClose[i]= (Kf[2]*EURClose[i]/GL[i][2]+Kf[13]*USDClose[i]/GL[i][13])/2;       
      AUDClose[i]= (Kf[3]*EURClose[i]/GL[i][3]+GL[i][23]*USDClose[i]/Kf[23])/2;       
      CHFClose[i]= (Kf[4]*EURClose[i]/GL[i][4]+Kf[12]*USDClose[i]/GL[i][12])/2;      
      CADClose[i]= (Kf[5]*EURClose[i]/GL[i][5]+Kf[14]*USDClose[i]/GL[i][14])/2;      
      NOKClose[i]= (Kf[6]*EURClose[i]/GL[i][6]+Kf[15]*USDClose[i]/GL[i][15])/2;      
      SEKClose[i]= (Kf[7]*EURClose[i]/GL[i][7]+Kf[16]*USDClose[i]/GL[i][16])/2;      
      DKKClose[i]= (Kf[8]*EURClose[i]/GL[i][8]+Kf[17]*USDClose[i]/GL[i][17])/2;      
      NZDClose[i]= (Kf[9]*EURClose[i]/GL[i][9]+GL[i][24]*USDClose[i]/Kf[24])/2;      
      SGDClose[i]= (Kf[10]*EURClose[i]/GL[i][10]+Kf[18]*USDClose[i]/GL[i][18])/2;      
      HKDClose[i]= (Kf[11]*EURClose[i]/GL[i][11]+Kf[19]*USDClose[i]/GL[i][19])/2;      
      MXNClose[i]= (Kf[25]*EURClose[i]/GL[i][25]+Kf[20]*USDClose[i]/GL[i][20])/2;      
      ZARClose[i]= (Kf[26]*EURClose[i]/GL[i][26]+Kf[21]*USDClose[i]/GL[i][21])/2;      
      EURUSDHigh[i] = GL[i][27]/Kf[0];                   
      EURHigh[i] = (GL[i][27]/Kf[0]+GL[i][28]/Kf[1]+GL[i][29]/Kf[2]+GL[i][30]/Kf[3]+GL[i][31]/Kf[4]+GL[i][32]/Kf[5]
                   +GL[i][33]/Kf[6]+GL[i][34]/Kf[7]+GL[i][35]/Kf[8]+GL[i][36]/Kf[9]+GL[i][37]/Kf[10]+GL[i][38]/Kf[11]
                   +GL[i][52]/Kf[25]+GL[i][53]/Kf[26]+HighOch)/14; 
                 
      USDHigh[i] = (Kf[0]/GL[i][27]+GL[i][39]/Kf[12]+GL[i][40]/Kf[13]+GL[i][41]/Kf[14]+GL[i][42]/Kf[15]+GL[i][43]/Kf[16]
                   +GL[i][44]/Kf[17]+GL[i][45]/Kf[18]+GL[i][46]/Kf[19]+GL[i][47]/Kf[20]+GL[i][48]/Kf[21]+Kf[22]/GL[i][49]
                   +Kf[23]/GL[i][50]+Kf[24]/GL[i][51]+HighOch)/14;             
      
      HighOch    = EURUSDHigh[i]*USDHigh[i]/EURHigh[i];      
      GBPHigh[i] = (Kf[1]*EURHigh[i]/GL[i][28]+GL[i][49]*USDHigh[i]/Kf[22])/2;                                                                 
      JPYHigh[i] = (Kf[2]*EURHigh[i]/GL[i][29]+Kf[13]*USDHigh[i]/GL[i][40])/2;       
      AUDHigh[i] = (Kf[3]*EURHigh[i]/GL[i][30]+GL[i][50]*USDHigh[i]/Kf[23])/2;       
      CHFHigh[i] = (Kf[4]*EURHigh[i]/GL[i][31]+Kf[12]*USDHigh[i]/GL[i][39])/2;      
      CADHigh[i] = (Kf[5]*EURHigh[i]/GL[i][32]+Kf[14]*USDHigh[i]/GL[i][41])/2;      
      NOKHigh[i] = (Kf[6]*EURHigh[i]/GL[i][33]+Kf[15]*USDHigh[i]/GL[i][42])/2;      
      SEKHigh[i] = (Kf[7]*EURHigh[i]/GL[i][34]+Kf[16]*USDHigh[i]/GL[i][43])/2;      
      DKKHigh[i] = (Kf[8]*EURHigh[i]/GL[i][35]+Kf[17]*USDHigh[i]/GL[i][44])/2;      
      NZDHigh[i] = (Kf[9]*EURHigh[i]/GL[i][36]+GL[i][51]*USDHigh[i]/Kf[24])/2;      
      SGDHigh[i] = (Kf[10]*EURHigh[i]/GL[i][37]+Kf[18]*USDHigh[i]/GL[i][45])/2;      
      HKDHigh[i] = (Kf[11]*EURHigh[i]/GL[i][38]+Kf[19]*USDHigh[i]/GL[i][46])/2;      
      MXNHigh[i] = (Kf[25]*EURHigh[i]/GL[i][52]+Kf[20]*USDHigh[i]/GL[i][47])/2;      
      ZARHigh[i] = (Kf[26]*EURHigh[i]/GL[i][53]+Kf[21]*USDHigh[i]/GL[i][48])/2;
            
      EURUSDLow[i]  = GL[i][54]/Kf[0];      
      EURLow[i]  = (GL[i][54]/Kf[0]+GL[i][55]/Kf[1]+GL[i][56]/Kf[2]+GL[i][57]/Kf[3]+GL[i][58]/Kf[4]+GL[i][59]/Kf[5]
                   +GL[i][60]/Kf[6]+GL[i][61]/Kf[7]+GL[i][62]/Kf[8]+GL[i][63]/Kf[9]+GL[i][64]/Kf[10]+GL[i][65]/Kf[11]
                   +GL[i][79]/Kf[25]+GL[i][80]/Kf[26]+LowOch)/14; 
                   
      USDLow[i]  = (Kf[0]/GL[i][54]+GL[i][66]/Kf[12]+GL[i][67]/Kf[13]+GL[i][68]/Kf[14]+GL[i][69]/Kf[15]+GL[i][70]/Kf[16]
                   +GL[i][71]/Kf[17]+GL[i][72]/Kf[18]+GL[i][73]/Kf[19]+GL[i][74]/Kf[20]+GL[i][75]/Kf[21]+Kf[22]/GL[i][76]
                   +Kf[23]/GL[i][77]+Kf[24]/GL[i][78]+LowOch)/14;
      
      LowOch     = EURUSDLow[i]*USDLow[i]/EURLow[i];      
      GBPLow[i]  = (Kf[1]*EURLow[i]/GL[i][55]+GL[i][76]*USDLow[i]/Kf[22])/2;                                                                 
      JPYLow[i]  = (Kf[2]*EURLow[i]/GL[i][56]+Kf[13]*USDLow[i]/GL[i][67])/2;       
      AUDLow[i]  = (Kf[3]*EURLow[i]/GL[i][57]+GL[i][77]*USDLow[i]/Kf[23])/2;       
      CHFLow[i]  = (Kf[4]*EURLow[i]/GL[i][58]+Kf[12]*USDLow[i]/GL[i][66])/2;      
      CADLow[i]  = (Kf[5]*EURLow[i]/GL[i][59]+Kf[14]*USDLow[i]/GL[i][68])/2;      
      NOKLow[i]  = (Kf[6]*EURLow[i]/GL[i][60]+Kf[15]*USDLow[i]/GL[i][69])/2;      
      SEKLow[i]  = (Kf[7]*EURLow[i]/GL[i][61]+Kf[16]*USDLow[i]/GL[i][70])/2;      
      DKKLow[i]  = (Kf[8]*EURLow[i]/GL[i][62]+Kf[17]*USDLow[i]/GL[i][71])/2;      
      NZDLow[i]  = (Kf[9]*EURLow[i]/GL[i][63]+GL[i][78]*USDLow[i]/Kf[24])/2;      
      SGDLow[i]  = (Kf[10]*EURLow[i]/GL[i][64]+Kf[18]*USDLow[i]/GL[i][72])/2;      
      HKDLow[i]  = (Kf[11]*EURLow[i]/GL[i][65]+Kf[19]*USDLow[i]/GL[i][73])/2;      
      MXNLow[i]  = (Kf[25]*EURLow[i]/GL[i][79]+Kf[20]*USDLow[i]/GL[i][74])/2;      
      ZARLow[i]  = (Kf[26]*EURLow[i]/GL[i][80]+Kf[21]*USDLow[i]/GL[i][75])/2;      
     }//4  

   return(0);

     }//1
//+------------------------------------------------------------------+

Para a operação correta do terminal, todos os pares de moeda usados devem ser baixados com o mesmo período de tempo.

No circuito limitado por "//2", os dados são baixados de todos os mobiliários usados pelo indicador com a ajuda de três funções: iClose, iHigh, iLow. No circuito limitado por "//3", as razões de escala de todos os símbolos são calculadas. O erro de compensação na barra LengthSample é calculado. No circuito limitado por "//4", todas as moedas nacionais são calculadas de acordo ao algoritmo acima, assim como o erro de compensação nessa barra é calculado.

Se for necessário representar os dados calculados não em uma janela separada, mas mostrá-los na janela do gráfico principal, os valores de moeda calculados devem ser multiplicados pela razão de escala obtida de EURUSD; além disso, #property indicator_separate_window deve ser substituído por #property indicator_chart_window. A fig. 6 mostra o resultado de tal cálculo. EUR – rosa, USD – azul, GBP – vermelho, JPY – marrom, AUD – roxo, CHF – amarelo, CAD – preto.

Fig.6

Conclusão

O método representado para o cálculo de moedas nacionais é universal e pode ser usado de forma similar para outros símbolos. Além disso, ele permite a sintetização de pares de moedas que não são representados em nossa empresa de corretagem, ou a obtenção de alguns pares exóticos que nem mesmo existem. Tudo isso, junto com a extração de moedas nacionais de pares de moeda, aumentará o caráter informativo dos símbolos que você utiliza ajudando a conduzir estimativas mais precisar de condições de mercado e construindo várias estratégias de negociações eficientes.

Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/1570

Arquivos anexados |
SuperPosition.mq4 (17.57 KB)
Ação de preço. Como automatizar a estratégia de negociação de padrão de engolfo Ação de preço. Como automatizar a estratégia de negociação de padrão de engolfo
Esse artigo descreve um processo de criação de um Expert Advisor para MetaTrader 4 baseado no padrão de engolfo, assim como no princípio de reconhecimento de padrão, nas regras de definição de ordens pendentes e ordens de parada. Os resultados de teste e otimização são fornecidos para sua informação.
Kit do trader: Indicadores de decoração Kit do trader: Indicadores de decoração
Neste artigo, você encontrará tarefas principais ao decorar indicadores, suas soluções e automatização.
Teoria de Mercado Teoria de Mercado
A lógica completa da teoria do mercado que cobre todos os tipos e variedades de mercados de bens e serviços, não estava disponível até agora aos mercados micro e macro, como o Forex. Este artigo aborda a essência de uma nova teoria do mercado com base na análise do lucro, revela padrões de mudança dos preços em andamento e o princípio da operação de um mecanismo a permitir que o preço encontre o seu valor ideal, através da formação de uma cadeia de preços virtuais que desenvolvem um controle sobre o preço real. Mecanismos de formação e de mudança das tendências do mercado também são identificados aqui.
Alerta e comentários para indicadores externos Alerta e comentários para indicadores externos
No trabalho prático, um trader pode enfrentar a seguinte situação: é necessário ficar "alerta" ou uma mensagem de texto aparecerá em uma tela (em uma janela de gráfico) indicando um sinal de um indicador. O artigo contém um exemplo de exibição de informações sobre objetos gráficos criados por um indicador externo.