English Русский 中文 Español Deutsch Português
フラクタルを利用した水平ブレークスルーレベルの描画

フラクタルを利用した水平ブレークスルーレベルの描画

MetaTrader 4 | 21 4月 2016, 11:57
3 047 0
Victor Chebotariov
Victor Chebotariov

フラクタル

フラクタルとは、ビル・ウィリアムのトレーディング戦略の5種類のインディケータの一つで、頂点と底を見つけることのできるものです。アッププラクタルの技術的定義は、最低5本の連続したバーで、低い方の最大値の2本のバーが高い方の最大値の直前、直後にきているものです。逆の構成(連続5本のバーで、高い方の最小バーが低い方の最小の直前、直後にきている)はダウンフラクタルに相当します。フラクタルには高い値と低い値があり、チャート上では矢印でマークされています。

チャートを注意して見ると、フラクタルレベルを超えると、フラクタル方向での変動が継続する傾向にあることを理解するでしょう。上昇市場では、この種の通過はロングポジションを維持する役目を果たします。フラクタルの低いレベルは、サポートレベル通過で、それはロングポジションをクローズする合図です。すべて同じように動作しますが、逆の下落トレンドです。この戦略をフラットな市場で使用してもなにも結果は得られません。



フラクタルレベルのインディケータ

最後の上方または下方フラクタル レベルをより簡単に判断するために、こういったレベルを水平なラインで描くシンプルなインディケータを書きます。

『Expert Advisor ウィザード』を用いてこのインディケータの主になる本体を作成します。それには、一連のコマンド、『ファイル → 作成する』を実行するかツールバーの ボタンを押します。『Expert Advisor ウィザード』が画面上で開かれます。

  • 第1ステップでは、『カスタム インディケータ』を選択します。
  • 第2ステップで、名前、著者、リンク、パラメータを指定します。インディケータの用に「フラクタル」インディケータを使用するので、調整可能なパラメータは入れません。そのため名前、著者、リンクのみ指定します。
  • 第3ステップでは、ウィザードがカスタムインディケータを表示するパラメータを指定するように促します。われわれのインディケータはメインチャートで表示されるため、『個別ウィンドウのインディケータ』フィールドにチェックは入れません。のちに、インデックスを決定するように促されます。インデックスは2つ必要です。一つは上方のフラクタルレベル、もう一つは下方のフラクタルレベルです。どちらのインデックスも『ライン』タイプで、1番目のインデックスにはブルーを、2番目のインデックスには赤色を選択したら、『終了する』ボタンを押します。

プログラム本文の作成は終わりました。以下がそれです。


//+------------------------------------------------------------------+
//|                                                 FractalsLine.mq4 |
//|                             Copyright © 2006, Victor Chebotariov |
//|                                      http://www.chebotariov.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Victor Chebotariov"
#property link      "http://www.chebotariov.com/"
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----

   
//----
   return(0);
  }
//+------------------------------------------------------------------+

今残っているのは、コードのちょっとした部分を追加することで、そうするとわれわれのインデックスは準備完了となります。

必要なのは以下です。
1. 現行チャート上の各バーに対してインディケータ値を計算する。そのために次のサイクルが必要です。

int i=Bars-counted_bars-1;
 
while(i>=0)
  {
   // Here we calculate the value of the indicator for each bar (i)
   i--;
  }

2. 上方および下方のフラクタル値を取得する。

double upfrac_val=iFractals(NULL,0,MODE_UPPER,i+1);
double lofrac_val=iFractals(NULL,0,MODE_LOWER,i+1);

3. 最重要事項です。最終フラクタル値を記憶する。それには、グローバル変数の依頼を取得します。

if(upfrac_val>0)
  {
   GlobalVariableSet(Symbol()+Period()+"upfrac",upfrac_val);
  }
else if(lofrac_val>0)
  {
   GlobalVariableSet(Symbol()+Period()+"lofrac",lofrac_val);
  }


4. グローバル変数からデータを読み出し、それをインデックスに渡します。

ExtMapBuffer1[i] = GlobalVariableGet(Symbol()+Period()+"upfrac");
ExtMapBuffer2[i] = GlobalVariableGet(Symbol()+Period()+"lofrac");

インディケータの準備状態は以下のように表示されます。

//+------------------------------------------------------------------+
//|                                                 FractalsLine.mq4 |
//|                             Copyright © 2006, Victor Chebotariov |
//|                                      http://www.chebotariov.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Victor Chebotariov"
#property link      "http://www.chebotariov.com/"
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//----
   int i=Bars-counted_bars-1;
 
   while(i>=0)
     {
      double upfrac_val=iFractals(NULL,0,MODE_UPPER,i+1);
      double lofrac_val=iFractals(NULL,0,MODE_LOWER,i+1);
      if(upfrac_val>0)
        {
         GlobalVariableSet(Symbol()+Period()+"upfrac",upfrac_val);
        }
      else if(lofrac_val>0)
        {
         GlobalVariableSet(Symbol()+Period()+"lofrac",lofrac_val);
        }
      ExtMapBuffer1[i] = GlobalVariableGet(Symbol()+Period()+"upfrac");
      ExtMapBuffer2[i] = GlobalVariableGet(Symbol()+Period()+"lofrac");
      i--;
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+

メニューコマンド『ファイル → コンパイルする』を実行するか、ツールバーの ボタンを押してコンパイルします。

新たに作成されたインディケータがチャートにアタッチされます。




実際の適用

最初の例では、フラクタルレベルは上昇市場で赤色のラインのいたでストップロスレベルが移動しているときに有用です。後退市場ではストップロスをブルーのラインの上に維持します。このようにストップロスと市場の間の安全で妥当な距離が確保されるのです。

たとえば、ブルーのライン(マーク2)の上のストップで市場に参入しました(グラフのマーク1参照)。赤色のラインが突破される(マーク3)場合、ストップロス(マーク4)を移動します。新たに突破することがあった場合(マーク5)には、ストップロスを同様に移動します(マーク6)。ブルーのラインが突破されれば(マーク7)、ポジションを消去します。

FractalsLine をトレーリングストップとして使用するために、EA にコードの小片を2つ追加する必要があります。

FractalsLine インディケータからデータを取得します。

double FLU = iCustom(NULL,0,"FractalsLine",0,0); // Blue fractal line
double FLL = iCustom(NULL,0,"FractalsLine",1,0); // Red fractal line

FractalsLine インディケータに基づくトレーリングストップ
if(Close[0]>FLU) //Trailing-stop for the long positions
  {
   if(OrderStopLoss()<FLL-3*Point || OrderStopLoss()==0)
     {
      OrderModify(OrderTicket(),OrderOpenPrice(),FLL-3*Point,OrderTakeProfit(),0,Green);
      return(0);
     }
  }


if(Close[0]<FLL) //Trailing-stop for the short positions
  {
   if(OrderStopLoss()>FLL+(Ask-Bid+3)*Point || OrderStopLoss()==0)
     {
      OrderModify(OrderTicket(),OrderOpenPrice(),FLL+(Ask-Bid+3)*Point,OrderTakeProfit(),0,Red);
      return(0);
     }
  }


FractalsLine インディケータを基にしてトレーリングストップを「MACD サンプル」に移植することでポジティブな結果を得ました。これは比較検証からわかります。


標準 MACD サンプルの検証

シンボル EURUSD(ユーロ vs 米ドル)
期間 1 時間 (H1) 2008.01.02 12:00~2008.06.30 23:00(2008.01.01~2008.07.01)
モデル ティックごと(有効な最小タイムフレーム中、もっとも精度の高い方法)
パラメータ TakeProfit=50; Lots=0.1; TrailingStop=30; MACDOpenLevel=3; MACDCloseLevel=2; MATrendPeriod=26;
検証のバー 4059 モデル化されたティック 1224016 モデル化するクオリティー 90.00%
不一致のチャートエラー 1
初期デポジット 10000.00
総純利益 182.00 粗利益 1339.00 総損失 -1157.00
プロフィットファクター 1.16 期待利得 3.79
絶対ドローダウン 697.00 最大ドローダウン 827.00 (8.16%) 相対ドローダウン 8.16% (827.00)
総トレード 48 ショートポジション(勝利 %) 28 (82.14%) ロングポジション(勝利 %) 20 (85.00%)
利益トレード(トータルの %) 40 (83.33%) 損失トレード(トータルの %) 8 (16.67%)
最大 利益トレード 50.00 損失トレード -492.00
平均 利益トレード 33.48 損失トレード -144.63
最大 連続勝利(資金における利益) 14 (546.00) 連続敗北(資金における損失) 3 (-350.00)
最大 連続利益(勝利数) 546.00 (14) 連続敗北(敗北数) -492.00 (1)
平均 連続勝利 7 連続敗北 1


FractalsLine インディケータを基にしたトレーリングストップを持つ MACD サンプル検証

シンボル EURUSD(ユーロ vs 米ドル)
期間 1 時間 (H1) 2008.01.02 12:00~2008.06.30 23:00(2008.01.01~ 2008.07.01)
モデル ティックごと(有効な最小タイムフレーム中、もっとも精度の高い方法)
検証のバー 4059 モデル化されたティック 1224016 モデル化するクオリティー 90.00%
不一致のチャートエラー 1
初期デポジット 10000.00
総純利益 334.00 粗利益 1211.00 総損失 -877.00
プロフィットファクター 1.38 期待利得 5.14
絶対ドローダウン 211.00 最大ドローダウン 277.00 (2.75%) 相対ドローダウン 2.75% (277.00)
総トレード 65 ショートポジション(勝利 %) 41 (41.46%) ロングポジション(勝利 %) 24 (62.50%)
利益トレード(トータルの %) 32 (49.23%) 損失トレード(トータルの %) 33 (50.77%)
最大 利益トレード 50.00 損失トレード -102.00
平均 利益トレード 37.84 損失トレード -26.58
最大 連続勝利(資金における利益) 3 (150.00) 連続敗北(資金における損失) 4 (-168.00)
最大 連続利益(勝利数) 150.00 (3) 連続敗北(敗北数) -168.00 (4)
平均 連続勝利 2 連続敗北 2


おわりに

FractalsLine を使うことで、前述の検証では、集積性は伸びドローダウンが減少したことを示しています。

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1435

添付されたファイル |
FractalsLine.mq4 (2.28 KB)
StrategyTester.zip (33.25 KB)
一般的トレーディングシステムを基にしたExpert Advisors と売買ロボット最適化の錬金術(パート3) 一般的トレーディングシステムを基にしたExpert Advisors と売買ロボット最適化の錬金術(パート3)
本稿では、もっともシンプルなトレーディングシステムのアルゴリズム実装の分析を続行し、バックテストの自動化を紹介します。初心者トレーダーや EA プログラマ―に有用です。
インジケーターの外部パラメーターのグラフィックコントロール インジケーターの外部パラメーターのグラフィックコントロール
インジケーターの外部変数は、パラメーターが変更できる特別なウィンドウを用いてコントロールされ、そのインジケーターは再度使用されます。これらの操作の不便さは、スクリーン上に必要なパラメータを表示させ、視覚的にインジケータを管理する必要性を生み出しました。
パルスによるマーケット診断 パルスによるマーケット診断
本稿では、特定マーケットとその時間セグメントの強度を可視化し、規則性と変動パターンを検出してみます。
Accumulation/Distributionへのインサイトと、そのゴール地点 Accumulation/Distributionへのインサイトと、そのゴール地点
Accumulation/Distribution (A/D)インジケーターは、一つ興味深い特徴があります - このインジケータチャートのトレンド線のブレークアウトは、特定の確率にてやがて来る価格チャートのトレンド線のブレークアウトを示唆します。この記事は、MQL4プログラミングに慣れ親しんでいない人にとってはとても役に立ち、面白い記事になるかと思います。この観点から最も簡単なコードの構造を用い、コーディングの方法を理解する上でわかりやすい情報を提示することに努めました。