2017年1月3日火曜日

Ku-chartの高速化をmt4で

Twitterを見ていたらタイムラインに「Ku-chartの簡単な計算方法」という記事が流れてきたので持っていたKu-chart-Maker2に反映させて実行時間を比較してみました。

結論としては5〜10倍程度早くなったのでEAなどのバックテストに使うには嬉しい結果でした。

計算式については@fxst24さんが書いている記事をそのまま使ってるだけです。

@fxst24さんは旬な情報提供を心がけている?ためか記事が定期的に見なおされ非有用だと判断されたものは削除されるようなので将来にわたってこの記事が見えるかはわかりませんが一応リンクを載せておきます。他の記事も非常に参考になる情報が多く更新もあるので嬉しい限りです。

参考:「コラム:Ku-Chartの簡単な計算方法」
http://fxst24.blog.fc2.com/blog-entry-364.html

元サイト:「FXシステムトレード」
http://fxst24.blog.fc2.com/

変更元のファイルですが、EA使いなら誰もが知るであろうfaiさんの作成したものを元にしています。
faiさんが基本的には変更・再配布をしても良いとしている記事があったので、faiさんのプログラムを元に作成しています。

変更・再配布について記載されている記事
http://d.hatena.ne.jp/fai_fx/20090910

何か問題が有りましたら一報頂ければ対応します。

変更点

元のKu-chart-Maker2ではドルストレート以外の値を一旦全て求めたうえで、算出した値を使ってKu-powerを計算していますが、変更後の処理ではドルストレートの値のみを使用しています。そのため、GetValMとGetValDを利用する必要がなくなり計算量が大幅に減ります。

元のKu-power計算式

       EURAV[i]=( EURUSD+EURJPY+EURCHF+EURGBP+EURAUD+EURCAD+EURNZD)/Pairs + ZeroLevelShift;
       USDAV[i]=(-EURUSD+USDJPY+USDCHF-GBPUSD-AUDUSD+USDCAD-NZDUSD)/Pairs + ZeroLevelShift;
       JPYAV[i]=(-EURJPY-USDJPY-CHFJPY-GBPJPY-AUDJPY-CADJPY-NZDJPY)/Pairs + ZeroLevelShift;
       CHFAV[i]=(-EURCHF-USDCHF+CHFJPY-GBPCHF-AUDCHF-CADCHF-NZDCHF)/Pairs + ZeroLevelShift;
       GBPAV[i]=(-EURGBP+GBPUSD+GBPCHF+GBPJPY+GBPAUD+GBPCAD+GBPNZD)/Pairs + ZeroLevelShift;

変更後のKu-power計算式
 
      int a;      
      a = (EURUSD + GBPUSD + AUDUSD + NZDUSD - USDJPY - USDCHF - USDCAD) / Pairs;

       AUDAV[i]=(-EURAUD+AUDUSD+AUDJPY+AUDCHF-GBPAUD+AUDCAD+AUDNZD)/Pairs + ZeroLevelShift;
       CADAV[i]=(-EURCAD-USDCAD+CADJPY+CADCHF-GBPCAD-AUDCAD-NZDCAD)/Pairs + ZeroLevelShift;
       NZDAV[i]=(-EURNZD+NZDUSD+NZDJPY+NZDCHF-GBPNZD+NZDCAD-AUDNZD)/Pairs + ZeroLevelShift;
       EURAV[i]= EURUSD - a + ZeroLevelShift;
       USDAV[i]= -a + ZeroLevelShift;
       JPYAV[i]= -USDJPY - a + ZeroLevelShift;
       CHFAV[i]= -USDCHF - a + ZeroLevelShift;
       GBPAV[i]= GBPUSD - a + ZeroLevelShift;
       
       AUDAV[i]= AUDUSD - a + ZeroLevelShift;
       CADAV[i]= -USDCAD - a + ZeroLevelShift;
       NZDAV[i]= NZDUSD - a + ZeroLevelShift;



実行結果の比較

上が変更後のKu-chart-Maker2-Light
下が元のKu-chart-Maker2

です。厳密に言うと値が異なりますが、各通貨の強弱を見る分には問題なさそうです。



重ねてみると

実行時間の比較

簡単に何度か時間を表示してみたところ下記のような結果になりました。
実行回数は少ないので、もっとしっかりしたデータが欲しい場合は是非実施してみて下さい。

実行環境:
[OS] Ubuntu 16.04
[MT4] Version: 4.00 Build 1031 (Wineを利用してインストール)
[CPU] Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz
[Memory] 16GB

実施パラメータ

実行時間(10回程度実施)
Ku-chart-Maker2: 11~20 milliseconds
Ku-chart-Maker2-Light:72~100 milliseconds


ソースファイル
変更後ファイル:Ku-chart-Maker2-Light
https://drive.google.com/open?id=0B0xWrUjaNTp-U0gyMzlTQUlQSEk

実行結果やこのインディケータを使った投資の結果には責任は持てませんので予めご了承下さい。
バグがあったとしても、私の利用上で問題ない場合は修正しない可能性もあるのでその場合は各自で修正・変更してご利用下さい。

おわりに

今回は私も利用頻度が高いKu-chartについて速度をあげることができたので収穫が大きかったです。Ku-chartを使ってのEA作成もいくつか行っているので検証結果についてはこちらでも報告していきたいなと思っています。基本的に作成するものは私自身が優位性を感じるものについて検証するためのものとなっています。ですが情報交換等は積極的に行っていきたいのでこういったアイディアはどう?と言った共有できるような内容があればコメントなりダイレクトメッセージなりで連絡頂ければ幸いです。

twitterアカウント: https://twitter.com/Twoer_alt


ps.

ブローカによっては通貨名にsuffixがついていてコードをいじらないとインジケータが使えないとの意見を見かけたのでパラメータで指定できるようにしたものを公開しておきます。

変更後ファイル:Ku-chart-Maker2-Light_v2
https://drive.google.com/open?id=0B0xWrUjaNTp-MG52SGdaNm1tQWc

変更点
・suffixをパラメータで設定できるようにした
・実行時間の出力の有無をパラメータで設定できるようにした

6 件のコメント:

  1. はじめまして。
    面白い記事ですね。
    私もEAに興味があります。
    ブログ更新楽しみにしています。

    返信削除
    返信
    1. 初コメントありがとうございます!
      興味を持っていただけたなら幸いです。
      今後もなるべく継続的に発信していけたらと考えていますので、よろしくお願いします。

      削除
  2. 私も、重いなぁと思っていたところに、この記事を発見できました。
    ただ、計算の原理が全く理解できません(笑)
    rawdataを使う場合、getvalのiMAもはずしていいですよね?
    また、微妙な値の誤差がでるのは、logの値がかなり小さくなるからなのでしょうか?
    これからも記事更新楽しみにしています。

    返信削除
  3. いつも楽しく閲覧させていただいています
    軽量化のファイルを使ったところすごく軽くなりました!
    このインジに基点を垂直線で変更できる機能を追加することは可能でしょうか。

    ご検討いただけますと幸いです

    返信削除
    返信
    1. 横から失礼します。
      カレーライスFXさんがドラッグで基点変更が出来るKu-chartのソースコードを公開されてますので、そのソースコードのKu-power計算式をtwoerさんの改変箇所を参考に変更されて修正するのがご自身で簡単にできるかと思います。
      http://curryfx.seesaa.net/article/440133295.html

      削除
  4. I am really impressed with your writing skills and also with the layout on your weblog. Is this a paid theme or did you modify it yourself? Anyway keep up the nice quality writing, it's rare to see a nice blog like this one nowadays.

    返信削除