2018年4月3日火曜日

[EasyLanguage]総最小二乗法によるβ

直線を、最小二乗法 (least squares method : LSM) でフィッティングするのが、回帰分析で、総最小二乗法 (total least squares : TLS) でフィッティングするのが、主成分分析らしい。

ここでは、次のように定義し、それらを求める。

β : その直線の傾き。
α : その直線とy軸との交点のyの値。
βスプレッド : 主成分得点。


β



α



βスプレッド



まあ、ちょっと複雑な統計分析になると、結局 python や ExcelVBA 使ったほうが色々捗ります。

<参考> ハリー・ゲオルガコプロスRとトレード』パンローリング,2015年.

[Pineスクリプト]TradingViewのストラテジーで、定額でエグジットしたい場合、あるいは経過本数でエグジットしたい場合

例えば、以下のようにする。

[Pineスクリプト]TradingViewのバックテストの期間を制限したい場合

TradingViewのバックテスト機能は、売買回数が多すぎるとエラーになってしまう。そこで、期間を指定したいと思うのだが、そのような機能がないようだ。よって、例えば以下のようにする。


データが消失しない相対チャートとしてのKu-Chart

 fai氏のコードを見ると、主要28通貨ペア総てを使い(ただし、クロス通貨は、ドルストの合成レートを用いている)、例えば Ku_EUR であれば、ユロドルと総てのユーロクロスの LogReturn の平均として計算している。(このような計算式になっているのは、私の勝手な推測ですが、Ku-Chartが、鞘を一度に多くの銘柄で計算するためのコードを書いたときの副産物だからではないでしょうか。)しかし、ここで 7 で割っているのは間違いであろう。7 ではなく、8 で割らねばならない。なぜなら、そうしなければ
   Ku_EUR - Ku_USD = LogReturn( EURUSD )
にならないから。こちらの記事 では、正しく ペア数 + 1 で割っている。
 なぜ ペア数 + 1 で割るのだろうか?例えば、主要ドルスト7通貨ペアの LogReturn のチャートを作成する(USDが決済通貨でないものは反転する)。ここで、相対チャート(総て足せば常にゼロになるチャート)に変換したい場合、
   mean = ( 7通貨ペアの LogReturn の合計 ) / 7
を各々から引けばよい。こうしてできたチャートのゼロラインは、元のデータの平均であり、新しくできた総てのデータを足せば常にゼロになる。しかし問題があり、これだと、元の変化率のデータが消失してしまう。そこで、元のチャートのゼロラインを変数の1つと考え(この場合のゼロラインは、USDに対してレートがまったく変化しなかったアセットであり、つまりUSDそのものである)、
   mean = (7通貨ペアの LogReturn の合計 + 0 ) / ( 7 + 1 )
として、これを各々から引けばよい(ゼロラインは、0 - mean )。これなら、元のゼロラインも相対化されるから、データが消失しない。これは、通貨チャートに限らず、何かしらの推移チャートであれば、何にでも適用できる(もっとも、このようなチャートを作って意味があるのか、私は知りません)。