対数変化率の話。

とある匿名希望の読者様から、対数変化率(対数価格比?)の計算式が分からないと質問がありましたので、簡単に説明しておきます。。


複数の銘柄の値動きの傾向を比較したい場合、価格の変化量(=今日の終値-昨日の終値)をそのまま扱うと不便です。
株式を思い浮かべると分かるように、100円の株が150円に上がるのと、1000円の株が1050円に上がるのでは、価格の変化量は同じ50円でも、それを同列にみなすのは無理があります。これを価格の変化率(=今日の終値÷昨日の終値)で考えると、

100円 -> 150円 1.5倍、50%増
1000円 -> 1050円 1.05倍、5%増

となり比較しやすくなります。
(100円の白株と1000円の赤株はそもそも同列に比べるべきでない..というツッコミは無しで..^^;;


ところが、価格の変化率を採用すると、100円の株が150円に上がり、再び100円に戻った時、

100円 -> 150円 1.5倍、50%増
150円 -> 100円 0.67倍、33%減

上昇時と下落時で計算値が同じ大きさにならず、直感的に理解しにくくなります。


そこで、価格の変化率の自然対数である対数変化率(=Log(今日の終値÷昨日の終値))を採用すると..

100円 -> 150円 0.405
150円 -> 100円 -0.405

となり、価格の絶対的な大きさに依存せず、上昇と下落を対称に扱える指数として重宝するのです。




具体的な計算例として、EURUSDで前日終値が 1.33028 で、今日の終値が 1.32926 の場合、
Log(1.32926/1.33028) = -0.000767
のように非常に小さな値になってしまい、計算精度の桁落ちの問題や、表記上の不便な点があります。Excel上では特に見づらいでしょう^^;
そこで適当な定数を掛けて
Log(1.32926/1.33028) * 10000 = -7.6705
こんな風に計算した値をその後の統計処理に使ったりします。
比較対象の通貨ペア全てに同じ定数を掛けていれば良いので、もっと大きな定数値でもOKです。



ちなみに、FXのデイトレチャートの場合この変化率が非常に小さいので、
Log(1.32926/1.33028) * 10000 = -7.6705
↓
(1.32926/1.33028-1) * 10000 = -7.6675
対数変化率を使わないで、ただの変化率を用いた近似式でも十分に近い値が計算できます。

↑10期間の対数変化率のチャート(赤)の形状は、同期間の Momentum (青)とほぼ同じに見えます。
Momentum はMT4標準のインジケータで変化率を計算に使用しています。
プログラムを高速化する為に、敢えて近似式を使うというアプローチは...効果を確認していないので検討したい人に任せます。。orz