金融証券の重ね合わせとインターフェース

22 4月 2016, 13:16
Khristian Piligrim
0
613

「同じ川に二度足を踏み入れられないのと同様に
同じ市場にも二度入ることはできない。
すべては流れ、一か所に留まるものは何もないのだ。」

DAO Piligrimm

はじめに

物理学の授業で、光の干渉の原理について学びました。干渉は1点で出会う同じ周波数の波を強めたり弱めたりしています。静電学によると、電荷システム場の強度はシステムの電荷によって個別に生み出される場の強度合計に等しいのです。

この2つの法則を基本に、 Forex 市場の金融証券に関する作用を確認することにしました。このために、私は公理として以下を採用しました。各時間に任意の通貨ペアが1通貨の別通貨に対する比率を示す。また各国通貨が別の通貨に対してのみならずその通貨自体に対しても時間と共に変化する。

各国通貨が時間とともにそれ自体に対する変化は、その通貨が属する国の経済的要因の複合体全体の変化により影響を受けるのです。各証券のチャートにおける結果としての価格は、時間とともに変化する2つのベクトルの重なりとして取得されます。驚異ベクトルはフェーズと振幅の両方に従って変化します。ベクトルは、通貨が属する一国内のあらゆる経済要因の重なり、また国際的要因から派生します。

例として EURUSD の通貨ペアを取りあげます。価格チャートにおける結果としての動きは時間の流れの中での各国通貨ユーロと米ドルの変化を考慮して以下のように形成されます。

1). EURUSD は以下の場合上昇します。

а). ユーロ-上昇、米ドル-下落

б). ユーロ-上昇、米ドル-変化なし

в). ユーロ-変化なし、米ドル-下落

г). ユーロ-上昇、米ドル-ユーロよりゆっくり上昇

2). EURUSD は以下の場合下落します。

а). 米ドル-上昇、ユーロ-下落

б). 米ドル-上昇、ユーロ-変化なし

в). 米ドル-変化なし、ユーロ-下落

г). 米ドル-上昇、ユーロ-米ドルよりゆっくり上昇

3). EURUSD は以下の場合変化しません。

а). 米ドル-変化なし、ユーロ-変化なし

б). 米ドル-上昇、ユーロ-米ドルと同じ速度で上昇

в). 米ドル-下落、ユーロ-米オルと同じ速度下落

通貨ペアの変動に影響を与える要因が多いほど、その変動を評価し将来を予測するのが困難になります。そのため、通貨ペアの構成要素と時間と共に変化する各国通貨の値をなんとか抽出することができれば、その動向に影響を与える要因数と共に、この通貨を通貨ペアと比較して各国通貨の動きの自由度の範囲を定めることができるかもしれません。結果、その変動推定と将来予測の精度を挙げることになるでしょう。どうすればそれができるのでしょうか?

重なり合いの原理と金融証券の干渉

タスクは次のように定義されます。例えば EURUSD のような通貨ペアがあります。このペアをその構成要素-ユーロと米ドル、に分ける必要があります。そのために、私は以下のようにユーロと米ドルの別の通貨とのクロスコースを取りました。:EURGBP、EURJPY、EURAUD、 EURCHF、EURCAD、EURNOK、EURSEK、EURDKK、 EURNZD、EURSGD、EURHKD、USDCHF、USDJPY、 USDCAD、USDNOK、USDSEK、USDDKK、USDSGD、 USDHKD、USDMXN、USDZAR、GBPUSD、AUDUSD、 NZDUSD。USDMXN、USDZAR のクロスコース データを取得していたので、仲介会社で対応する EUR のクロスコースはありませんでした。これは次のように簡単に修正ができます。 EURMXN = EURUSD × USDMXN、EURZAR = EURUSD × USDZAR。

タスクを行う第1段階では、全通貨を単一スケールに合わせます。そのために、サンプルの長さにおいて、対応する通貨ペアの平均終値として各通貨ペアに対するスケール係数を計算します。この通貨ペアに対応するスケール係数でサンプルの長さ全体で各通貨ペアの価格値を分割したあと、単一スケールでの通貨ペアを取得します。

第2段階では、ユーロと米ドルを得るため、同様にユーロと米ドルで構成する対応する通貨ペアグループに対して重ね合わせと干渉の法則を適用し、また対象の証券数からの平均結果を取得します。

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

通貨ペアが国内通貨の2つのベクトルで形成され、時間とともにこれらベクトルのフェーズが変化することは同期していませんが、特定の国の経済要因の影響の下で主に形成されることを受け入れると、以下のような結論を導くことができます。

多様な通貨のクロスコースの重なり合いにおいて、分子の構成は、干渉の法則によると、フェーズの一致のために強まります。また、分母の構成は、フェーズの不一致によりかなりの程度まで補正されます。

図1では、ユーロと米ドルを上述の式で計算した結果が示されています。ピンク色はユーロ、ブルーは米ドル、水色は EURUSD を表示しています。

図1

 

上記の式で、分母構成の不完全な補正からユーロと米ドルの結果の計算誤差がどれだけであるか推定します。これには、 EURUSD のチャートを作成します。図2における水色の線がそれで、計算済み米ドルに対する計算ずみユーロの比率は赤色の線です。

図2 

上の図から、重なり合いと通貨のクロスコースから取得されたユーロと米ドルのフェーズ分線は有意でないことが明白です。が、振幅誤差は大きく、それはユーロと米ドルのクロスコースの一部である国内通貨の構成補正が不完全であることを示しています。バー間の誤差の非線形特性は小さく、これにより前回バーから上述の式に補正機能を入れることで現行バーにおいて誤差補正か可能となります。

誤差補正は以下のように計算します。

  Och   = EURUSD × USD ÷ EUR

現行バーの計算において、前回バーから補正エレメントとしてユーロと米ドルの計算式に取得された誤差値を入れることで、ほとんどの適用される問題に対して取得するのはかなり許容できる計算誤差です。図3は補正後の計算結果を示しています。ブルーの線はのチャート、計算された米ドルに対する計算されたユーロ比率は赤色の線です。チャートからわかるように、取得した結果は補正前よりもずっとよくなっています。

図3

 

これまで言ったように、提供されるからユーロと米ドルを構成要素として抽出する方法によるファー図の歪みは有意ではありませんが、分析した履歴がゼロバーから遠いほど、この履歴をもとに取得したユーロおよび米ドル同様、履歴誤差の影響は強くなります。履歴誤差のためにバーが省略される場合、異なる通貨のクロスコースの同期は乱れています。計算済みユーロと米ドルにおけるフェーズの歪み表示でのこの結果は EURUSD に関連しています。

履歴に深く入るほど、または計算に使うタイムフレームが小さいほど、履歴誤差の影響は強く、結果としてのフェーズの歪みは大きくなります。図4は上記内容を売らづけるチャートを表示しています。これらチャートは図3のチャートの深い履歴の継続です。対象としている多様な証券の個別履歴バーの省略に関連する蓄積された誤差のために、重大なフェーズの歪みが見られます。この問題を解決するには、より高品質の履歴データを使うか、履歴誤差を埋めるのに特別な方法を用いる必要があります。

図4 

ユーロと米ドルを計算したので、別の任意の国内通貨も計算することができます。


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 ÷ URNOK + 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

図5は上で計算された一連の通貨を1つのチャートに表示したものです。EURUSD -水色、EUR -ピンク、USD -ブルー、GBP -赤色、JPY -茶色、AUD -紫、CHF -黄色、CAD -黒。

図5

 

重なり合いと干渉の原理を用いた国内通貨計算の上記アルゴリズムは、私のインディケータ SuperPosition に実装されています。そのインディケータは本稿に添付しています。

//+------------------------------------------------------------------+
//|                                                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
//+------------------------------------------------------------------+

ターミナルを正しく操作するために、対象の全通貨ペアは同一タイムフレームでダウンロードします。

"//2" によって制限されるループでは、データは、3つの関数: iClose、 iHigh、iLow、の助けを借りてインディケータによって使用される全証券からダウンロードされるます。"//3" によって制限されるループ内では、全シンボルに対するスケール比率が計算されます。LengthSample バーにおける誤差のより一層の補正が計算されるのです。"//4" によって制限されるループでは、このバーで誤差補正が計算されるのと同様に、国内通貨はすべて上記アルゴリズムに従って計算されます。

個別のウィンドウではなく、メインのチャートウィンドウに計算したデータを表示する必要があれば、計算された通貨値に EURUSD から取得したスケール値を掛けます。また、#property indicator_separate_window は #property indicator_chart_window と置き換えられます。図6はその計算結果を表示しています。EUR -ピンク、USD -ブルー、GBP -赤色、JPY -茶色、AUD -紫、CHF -黄色、CAD -黒。

図6

 

おわりに

各国通貨の計算方法はユニバーサルでその他のシンボルに対しても同様に利用できます。その上、みなさんの仲介会社が対応していない通貨ペアを合成することも、まったく存在していない珍しいペアを取得することもできます。これはすべて通貨ペアから各国通貨を抽出することと併せて、市場条件をより正確に推定するために役立て、さまざまなトレーディン戦略を構築するため使用する対象シンボルの有益な特徴を高めることとなるのです。


MetaQuotes Software Corp.によりロシア語から翻訳された
元の記事: https://www.mql5.com/ru/articles/1570

添付されたファイル |
SuperPosition.mq4 (17.57 KB)
トレーダーのキット:デコインディケータ トレーダーのキット:デコインディケータ

本稿では、インディケータを装飾する際の主要なタスク、そのソリューションと自動化を見つけ出します。

MеtaTrader 4 と MATLAB エンジン(仮想 MATLAB マシン)間のインタラクション MеtaTrader 4 と MATLAB エンジン(仮想 MATLAB マシン)間のインタラクション

本稿では DLL ライブラリ- MetaTrader 4 と MATLAB の数学的デスクトップパッケージのインタラクションを可能にするラッパーの作成に関する考察を行います。また落とし穴とそれを克服する方法を説明します。本稿は Borland C++ Builder 6 コンパイラを使用している準備済みの C/C++ プログラマ―を対象としています。

開発者諸君、己を守れ! 開発者諸君、己を守れ!

知的財産の保護はいまだに大きな問題です。本稿では MQL4 プログラム保護の基本原則について説明します。これら原則により、みなさんの開発結果が盗難にあわないよう、すくなくとも盗人の『仕事』をひじょうに複雑にして行わなくなるようにします。

Meta COT プロジェクト - MetaTrader 4 における CFTC レポート分析の新たな展望 Meta COT プロジェクト - MetaTrader 4 における CFTC レポート分析の新たな展望

本稿では、MetaTrader における CFTC レポートデータ(オープンインターネット)の使用について述べます。提案されている META COT プロジェクトを詳しく説明し、必要な情報をロードし処理する方法をお伝えします。プロジェクトに入っている Expert Advisor は本稿で紹介するコンセプトの有効性を分析するのに役立つものです。最後に、なんらかの結論を導き、有用な提案をします。