FXボーグ | テクニカル実験室

テクニカル分析を使った自動売買プログラムの開発に挑戦!

スポンサーリンク

ティックを使用した非時系列足「isokinetic chart v2.0」をアップしました。

isokinetic chart v2.0をアップしました。今回はバーの生成にティックを使用しています。isokinetic chart については以前の記事をご覧ください。

以下はUSDJPY15分足との比較です。

f:id:fxborg:20170717014138p:plain上段:USDJPY15分足、下段:isokinetic chart

ティックの解像度

ティック情報を使うにあたって2つほど気になることがありました。一つはデータ量で、もう一つはデータの信頼性です。

  • データ量・・・バックテストなどを考慮するとそのままのデータを保持するのは効率悪そう。
  • 信頼性・・・ティック情報はブローカーごとにも違うし観測誤差なども起こりそうです。

これについては中央値を使う等いろいろ考えたのですが、今回は粗視化というアイデアを取り入れてみました。具体的にはしきい値に満たない変動は記録しないというような方法をとります。

・・・ティック自体は微細な変動を繰り返していますが、実際にトレードに影響するのは一定の動きがある場合のみです。例えば2pip以内の変動をカットしてもバックテストに余り影響はなさそうですし、一定のデータ削減効果が期待できます。

変動量の算出

isokinetic chart は変動量ごとにバーの更新を行います。ここでいう変動量とは各ティックの価格差の合計になりますが、上述の粗視化後のデータを使用します。

変動量の基準値は任意で設定可能ですが、上のドル円の例では15pipにしています。これは変動量が15pipを超えた場合にバー閉じるという意味です。

それから、1ティックで100pip くらいジャンプした場合には、錬行足のように複数のバーで補完するようにしています。

実際のコード

今回のコードの大半はこちらの記事をベースにしています。

▼主な変更点を抜粋したコードです。

   MqlRates rate;
   MqlRates wk[]; //キャンドル用のバッファ
   ArrayResize(wk,ticks_stored);
   int cnt=0;   // キャンドル数
   double accum_volat=0;  //ボラティリティをここに蓄積
   double last_close = TicksBuffer[0]; 
    //---
   create_bar(rate,last_close);
    //---
   for(i=0;i<ticks_stored;i++)
     {
      // 価格差を計算
      double diff=TicksBuffer[i]-last_close;
      double adiff=fabs(diff);
      int sign=(diff>0) -(diff<0);
      if(accum_volat+adiff<threshold) 
        {
         // ボラティリティが基準量に満たないのでバーを更新
         update_bar(rate,TicksBuffer[i]);
         //---
         last_close=rate.close;
         accum_volat+=adiff;
        }
      else
        { 
         //ボラティリティが基準量を超えたのでバーを作る
         while(accum_volat+adiff>=threshold)
           {
            // 基準量ごとにバーを作る
            double decrease=(threshold-accum_volat);
            last_close=last_close+sign*decrease;
            //---
            update_bar(rate,last_close);
            //---
            accum_volat=0;
            adiff-=decrease;
            //output
            wk[cnt].open = rate.open;
            wk[cnt].high = rate.high;
            wk[cnt].low=rate.low;
            wk[cnt].close=rate.close;
            cnt++;
            //---
            create_bar(rate,last_close);
            //---
           }
        }
     }

最後に

今回はisokinetic chart をティックに対応してみました。最近は環境の構築ばかりしていますが、それもこのチャートを使う為だったりします。

コードはMQL5で書いていますが、たたき台として作っただけなので不十分なところもあるかもしれません(ティックが溜まるまでなにも表示されない等)。最終的には独自システム上で実装し直すつもりです。 

isokinetic chart はティック情報をリアルタイムで追いながら、15分足程度の流れが表示できるので、結構使えると思うのですがいかがでしょう・・・。

こちらからどうぞ
/indicators/isokinetic_chart_v2_0.mq5