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

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

スポンサーリンク

SimpleAutoTL v2.2をアップしました。

SimpleAutoTL v2.2をアップしました。変更点はパフォーマンスの改善がメインですが表示方法なども変えてみました。

f:id:fxborg:20170107121537p:plainEURUSD4H

f:id:fxborg:20170107121759p:plain

パフォーマンスの改善

以前のバージョンではトレンドラインを引く際の輪郭(凸包)となる頂点を毎回計算していたのですが、新しいバージョンでは一度求めた頂点を記憶させ再利用しています。

頂点の集合を記憶するコードは「CArrayInt」を使ってこんな風に実現しています。

//--- グローバルスコープ

//--- CArrayInt オブジェクトのポインタを格納する配列を定義
CArrayInt *HighCache[];
CArrayInt *LowCache[];

...

//---OnCalculate 内のメインループ
for(int i=(int)MathMax(prev_calculated-1,0); i<rates_total; i++)
  {
   //--- rates_totalと同じサイズになるようリサイズする
   if(ArraySize(HighCache) != rates_total) ArrayResize(HighCache,rates_total);
   if(ArraySize(LowCache) != rates_total) ArrayResize(LowCache,rates_total);
   
   //--- 配列内のオブジェクトが未割り当ての場合のみインスタンスを作る
   if(HighCache[i] == NULL) HighCache[i]=new CArrayInt();
   if(LowCache[i] == NULL) LowCache[i]=new CArrayInt();
   if(i>0)
     {
       //--- 直前のバーの情報をコピーして引き継ぐ
      HighCache[i].AssignArray(HighCache[i-1]);
      LowCache[i].AssignArray(LowCache[i-1]);
     }
 }

ポインタ配列の使い方は、こちらの記事を参考にしました。 

水平ラインブレイクとの違い

トレンドラインと水平ラインを比較してみるとブレイクアウトが生じる状況に違いがあることがわかります。

▼水平ライン(ドンチャン・チャネル)

f:id:fxborg:20170107123734p:plain

▼トレンドライン

f:id:fxborg:20170107121537p:plain

★水平ラインで判別可能なブレイクアウト

  • ・フラットな状態からのブレイクアウトを捉えることが可能。
  • ・トレンド継続時にトレンド方向のブレイクアウトが起きやすい。

★トレンドラインで判別可能なブレイクアウト

  • ・スクイーズ状態からのブレイクアウトを捉えることが可能。
  • ・トレンドの終盤でトレンドとは逆向きにブレイクアウトが起きやすい。

以上のことを踏まえるとトレンドラインのブレイクはリバーサル・パターンやスクイーズの判別に向いていることが分かります。

これらの特徴を補強するようなフィルターを追加すると、バックテストでいい感じのパフォーマンスになることも分かってきました。

f:id:fxborg:20170107163537p:plain

(主要9通貨2006年~)

最後に

今回は SimpleAutoTL インジケーターのチューニングを行いました。

トレンドライン・ブレイク戦略はバックテストである程度のパフォーマンスは確認できたのですが、まだまだ論理的な根拠が弱いと感じています。

今回のインジケーターだとMTのシュミレーターでも動くので、しばらくはチャートを眺めたいと思います。

こちらからどうぞ
Indicators/SimpleAutoTL_v2_2.mq5