![フラクタルを利用した水平ブレークスルーレベルの描画](https://c.mql5.com/i/articles/overlay.png)
フラクタルを利用した水平ブレークスルーレベルの描画
フラクタル
フラクタルとは、ビル・ウィリアムのトレーディング戦略の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 インディケータからデータを取得します。
double FLU = iCustom(NULL,0,"FractalsLine",0,0); // Blue fractal line double FLL = iCustom(NULL,0,"FractalsLine",1,0); // Red fractal line
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); } }
標準 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 |
![](https://c.mql5.com/2/16/strategytester2.gif)
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 |
![](https://c.mql5.com/2/16/strategytester.gif)
おわりに
FractalsLine を使うことで、前述の検証では、集積性は伸びドローダウンが減少したことを示しています。
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/1435
![一般的トレーディングシステムを基にしたExpert Advisors と売買ロボット最適化の錬金術(パート3)](https://c.mql5.com/2/15/584_49.gif)
![インジケーターの外部パラメーターのグラフィックコントロール](https://c.mql5.com/2/17/807_6.gif)
![Accumulation/Distributionへのインサイトと、そのゴール地点](https://c.mql5.com/2/17/925_51.png)
![MQL5 - MetaTrader 5クライアントターミナルにビルトインされたトレードストラテジーの言語](https://c.mql5.com/i/registerlandings/logo-2.png)
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索