
ディナポリ取引システム
内容
1. はじめに
新しい取引戦略と古典的な取引システムの修正版は毎日のように現れています。最も有名な取引法の1つは、トレーダー、エコノミスト、かつ人気書籍の著者であるジョー・ディナポリによって作成されました。 その広く使われているシステムはフィボナッチレベルに基づいています。
本稿では、このシステムを詳しく見ていきます。フィボレベルを熟知していないと説明が難しい基本的なコンセプトや取引の原則について説明するのにも、最善を尽くしました。これらのレベルは何なのでしょうか。それらをどのように解釈し、実際にそれらを適用するのでしょうか。そして、最も重要なことに、それらはどのように取引に使えるのでしょうか?
2. ディナポリレベル:基礎
ディナポリレベルの基礎
ディナポリレベル取引の一般的な原則について考えてみましょう。これには、それらをいかにチャートに正しくプロットし、価格動向に対して解釈し、市場参入ポイントを定義するために適用するかが含まれます。
すでに述べたように、ディナポリ戦略はフィボレベルに基づいています。このメソッドでは水平マークアップのみが使用され、フィボアークとファンは適用されません。
フィボレベルの間違った配置
フィボレベルの正しい配置
ディナポリレベルは本質的に支持と抵抗レベルですが、その解釈は従来のレベルよりも深いものです。それらはフィボレベルに基づいており、いわゆる市場のスイング(より単純に言うと動向)を適用します(下記参照)。ディナポリを構築するには、3つのフィボレベル(61.8%、50%、38.2%)のみが必要です。これらは、チャート上で支持と抵抗として使用されるレベルです。フィボレベルは、上昇動向の場合は上向きに、下降動向の場合は下向きにプロットされます。
理想的には、線は現在の動向の方向に0%から100%まで配置されています。100%を超えるすべてのフィボレベルは、ポジション決済点を設定するために使用されます。
市場のスイング
ディナポリレベルは、拡張と補正の2つの方法で適用できます。
目標参入ポイントの検出には補正が適用され、拡張グリッドは市場のエグジットポイントを検出するために組み込まれています。
3. 主な原則とコンセプト
- フィボノード — 補正の移動が終了する価格チャートでのポイント。ディナポリは、38.2%と61.8%の間にあるノードでのみ操作するように助言しました。38.2%未満のノードは無意味な一方、61.8%を超えるノードは強すぎます(動向が回復しない可能性があります)。
- 市場のスイング (極値間の距離) - フィボレベルがプロットされる、価格の動きの最初から最後までの距離。補正の終了後に価格が高値または低値に変わった場合は、レベルの極値点も移動される必要があります。この場合、スイングが増加します。
- 累積 — チャート上で複数のフィボノードの累積(複数の互いに近い補正レベル)が検出された場所。
- フォーカスポイント(極値) — 市場スイングの極値(価格補正が始まるレベル)。極値が変化すると、チャートには別のフォーカスポイントが表示されるため、1つのスイング領域内にチャート上に複数のポイントが存在する可能性があります。
- 目標レベル — 決済指値を置くべき価格チャート上の点。
- 目標ポイント — アクション(市場参入、エグジットなど)が予定されているチャート上の点。
- 反応 — 動向の動きで完了した補正。1つのスイングの範囲内で複数の反応が形成されることがあります。
拡張、修正、フォーカスポイント
価格チャートは絶えず動いており、市場のスイングはチャートごとに補正されなければなりません。この場合、スイングが拡大され、そのたびにチャート上のフォーカスポイントの数が変化します。市場反応の中心に「反応」と呼ばれる価格補正が現れ、それぞれが独自のインデックスを持ちます。
チャート上の反応
ディナポリからのヒント
- レベルから受け取ったシグナルは、補正レベルと累積/支持レベルが38.2%〜61.8%の範囲内にある場合にのみ、結果を生成します。他のシグナルは無視されます。
- 161.8%と261.8%に決済逆指値を置くためには、決済指値として、最後の補正に達する共通のフィボーレベルを使用してください。
- チャート上でのスイングの数は、常にフォーカスの数と同じです。
- フォーカス番号は常に、接続されている反応の右側にあります。言い換えれば、レベルスイング上に形成された価格補正は、フォーカス番号の左側に配置されるべきです。
- 期間が長くなればなるほど、反応の数は少なくなります。すでにお気づきになったかもしれませんが、異なる時間枠で作業する場合、価格の動きは短い時間枠ではかなり速いのに対し、これらの動きはより長い時間枠で表示されません。この規則は反対方向でも使用されます。 価格が強い抵抗/支持を検出すると、より長い時間枠に表示されない必要な反応とスイングはより短い時間枠を使用して見つけることができます。
4. フィボ/ディナポリの拡張
ディナポリ拡張グリッドは、フィボ拡張グリッドに基づいて市場エグジットポイントを定義することを可能にします。今度は、決済指値の設定の目標点には100%、161.8%、および261.8%のレベルを使用します。
フィボ(ディナポリ)レベルの拡張
フィボ拡張グリッドは、次のように構築されています。
- 下降トレンド — 安値から価格ロールバックラインによって形成された価格補正ピークで38.2%から開始
- 上昇トレンド — 安値から価格ロールバックラインによって形成された価格補正の最低額で38.2%レベルを上向きに交差
フィボ拡張グリッドのチャートへの配置
ディナポリはその著書「ディナポリレベルでの取引」で、「複数のフォーカス番号」や「市場のスイング」といった概念に注目しています。これらのパターンは頻繁なフラットを持つ製品を取引をするときには典型的です。このようなパターンは、単純なスイングより複雑で、その主な難しさは、不必要なレベルを選別することにあります。
この本を読んだ後に私が達した結論を簡単に列挙してみます。この本の明白な利点は、それが理論家ではなく経験豊富なトレーダーとマネージャーによって書かれたという事実にあります。数百年前の時間テストを通過し、数学的にバランスのとれた検証されたフィボレベルが使用されているということも、あと一つの利点の確論です。さらに、本書で提供されている例は、商品や株式市場だけでなく為替先物取引も記述しており、その原則は外国為替市場に適用することができます。
ディナポリによって導入された多くの新しいコンセプトには、慎重な調査と包括的な理解が必要です。
5. ディナポリレベル取引技術
さて、ディナポリレベルを使った取引を検討しましょう。要約すると、彼の本で述べられているその基本的なアイディアは、複数の「挑戦的」かつ「穏やかな」取引戦略を開発することを可能にします。
- 挑戦的な戦略には、「やぶ」と「盆栽」の2つの市場進参入方法があります。両取引の原則は似ており、唯一の違いは逆指値注文の配置です。
- 穏やかな戦略もまた、掃海艇AとBの2つの方法を説明しています。
挑戦的な取引方法を適用すると、価格は38.2%レベルと既に形成されたスイングからロールバックしていると見なされます。「やぶ」戦略と「盆栽」戦略の唯一の違いは逆指値注文が配置されるフィボレベルです。
やぶ戦略から始めましょう。この方法では、生成された補正グリッドの価格が現在のトレンド方向で38.2%のレベルを横切っている間にポジションを開く必要がありますが、決済逆指値は50%を超えます。盆栽法での市場参入はやぶ法のものと似ていますが、決済逆指値はフィボレベルの50%未満です。
チャートの価格ロールバックが起こらないリスクがあるため、これらの方法に従うことは挑戦的であると考えられます。補正が新しい動向に変わることは非常に一般的であり、価格が短期的にフラットになるかもしれません。したがって、この方法を適用する場合は、シグナルが完全に安全であることを確認するまで待つべきです。
やぶ戦略
この本は、盆栽戦略のいくつかの否定的な特徴についても説明しています。ディナポリは、強力なレベルが存在しない(取引の数が不十分であり、要求が完全に一致しない)場合にストップ注文を実行するとかなりのスリッページが発生する可能性が高いことを強調しています。従って、選択はブローカーと取引プラットフォームに依存します。一方、市場で高い流動性を持つ製品を少量売買すると、そのような状況は起こりにくいでしょう。
6. 掃海艇A 戦略と掃海艇B 戦略
最も穏やかで危険性の低い戦略は、掃海艇AとBです。それらによると、取引自体は安全対策を用いて行われますが、市場参入は補正後に行われるべきです。
- 掃海艇A最初に、最初の補正が完了するのを待ちます(市場参入はありません)。その後、初めてポジションを開きます。前の戦略と同じく、決済逆指値は次のフィボレベルの後ろに置かれます。
- 掃海艇Bポジションは第2の補正後ではなく、第3、第4またはそれ以降の補正後に開かれます。言い換えれば、シグナルが誤っているというリスクが大幅に軽減され、動向が完全に確認された後に、市場に参入します。
掃海艇A戦略
複数の補正(反応)を特徴とするかなり長寿的な動向に遭遇してすべての分析ルールに従うと、チャートはあっという間に重要でないレベルやラインでいっぱいになります。それらのほとんどは、ディナポリレベルの取引に関する規則に該当しない服従データとして単に破棄することができます。
2、3の反応をもつ強力な上昇トレンドがあるとします。ある時点で、すべての上向きの動きが補正されます。結果として、価格はいくつかの反応の安値を書き直し始めます。そのような反応は取り消され、その安値は無視されるべきです。
7. ディナポリレベル指標
手動でフィボレベルを設定してディナポリレベルをプロットすることに時間を費やしたくない方のために、これを自動化できる指標があります。指標は下に添付されており、コードベースからも入手できます。その動作をより詳細に分析しましょう。指標名はより便利に変更されました。
この指標はMetaTrader 5ルートディレクトリのIndicatorsフォルダにファイルを配置するという通常の方法でインストールされます。設定はほとんどレベルの色についてであり、他にはあまりありません。色はカスタマイズ可能ですが、表示や市場分析のエラーを避けるために初心者の方が変更することはお勧めできません。
ディナポリレベルを自動的に表示する指標にはジグザグとジグザグ反転音声シグナルが含まれます。赤い線は、決済逆指値を配置する場所をチャートに表示し、青い線は、操作の開始レベルを示しています。残りの水平線は価格目標値です。また、指標には、垂直の時間レイアウトラインが表示されます(指標設定で無効にすることもできます)。
指標の入力
ターミナルの価格表でのディナポリレベルを表示
入力:
- Minimum points in a ray (デフォルト = 400) – 垂直の時間レベルの幅を変える
- Show the vertical lines (デフォルト = true) – 垂直の時間レベルを表示する/しない
- Number of history bars (デフォルト = 5000) – 組み込みのジグザグ指標が使用する履歴バーの数
- Play sound (デフォルト = true) – ジグザグ反転の音声通知を有効にする
- Sound file (デフォルト = "expert.wav") – 音声通知ファイルを選択する
- Start Line color (デフォルト = Blue) – 水平のスタートラインの色
- Stop Line color (デフォルト = Red) – 水平の決済逆指値設定ラインの色
- Target1 Line color (デフォルト = Green) – 水平の目標1ラインの色
- Target2 Line color (デフォルト = DarkOrange) – 水平の目標2ラインの色
- Target3 Line color (デフォルト = DarkOrchid) – 水平の目標3ラインの色
- Target4 Line color (デフォルト = DarkSlateBlue) – 水平の目標4ラインの色
- Time Target1 color (デフォルト = DarkSlateGray) – 垂直の時間1ラインの色
- Time Target2 color (デフォルト = SaddleBrown) – 垂直の時間2ラインの色<
- Time Target3 color (デフォルト = DarkSlateGray) – 垂直の時間3ラインの色<
- Time Target4 color (デフォルト = DarkSlateGray) – 垂直の時間4ラインの色<
まず、コード全体が構築される基本的な指標パラメータを紹介します。
初期コードパラメータは次のようになります。
//------------------------------------------------------------------------------------ // DiNapoli Levels.mq5 // 修正された指標 FastZZ.mq5 // ディナポリ目標レベルと時間目標を追加 // victorg, www.mql5.com, 2013 //------------------------------------------------------------------------------------ #property copyright "Copyright 2012, Yurich" #property link "https://login.mql5.com/ja/users/Yurich" #property version "3.00" #property description "FastZZ plus DiNapoli Target Levels." #property description "The modified indicator 'FastZZ.mq5'." #property description "victorg, www.mql5.com, 2013." //------------------------------------------------------------------------------------ #property indicator_chart_window // 指標をチャートウィンドウに表示する #property indicator_buffers 3 // 指標計算に使うバッファの数 #property indicator_plots 1 // 指標ウィンドウの数 #property indicator_label1 "DiNapoli Levels" // グラフィックシリーズのラベルを設定する #property indicator_type1 DRAW_COLOR_ZIGZAG // 指標の描画スタイルN - グラフィックシリーズの数 #property indicator_color1 clrTeal,clrOlive // Nライン出力の色(Nはグラフィックシリーズの数) #property indicator_style1 STYLE_SOLID // グラフィックシリーズの線のスタイル #property indicator_width1 1 // グラフィックシリーズの線の幅 //------------------------------------------------------------------------------------ input int iDepth=400; // 線の点の最小値 input bool VLine=true; // 垂直線を表示する input int iNumBars=5000; // 履歴内のバーの数 input bool Sound=true; // 音声通知を有効にする input string SoundFile="expert.wav"; // 音声ファイル input color cStar=clrBlue; // スタートラインの色 input color cStop=clrRed; // ストップラインの色 input color cTar1=clrGreen; // 目標ライン#1の色 input color cTar2=clrDarkOrange; // 目標ライン# 2の色 input color cTar3=clrDarkOrchid; // 目標ライン# 3の色 input color cTar4=clrDarkSlateBlue; // 目標ライン#4の色 input color cTarT1=clrDarkSlateGray; // 時間ライン#1の色 input color cTarT2=clrDarkSlateGray; // 時間ライン#2の色 input color cTarT3=clrSaddleBrown; // 時間ライン#3の色 input color cTarT4=clrDarkSlateGray; // 時間ライン#4の色 input color cTarT5=clrDarkSlateGray; // 時間ライン#5の色
指標に変数を入力しましょう。
// 主要変数 double DiNapoliH[],DiNapoliL[],ColorBuffer[],Depth,A,B,C,Price[6]; int Last,Direction,Refresh,NumBars; datetime AT,BT,CT,Time[5]; color Color[11]; string Name[11]={"Start Line","Stop Line","Target1 Line","Target2 Line", "Target3 Line","Target4 Line","Time Target1","Time Target2", "Time Target3","Time Target4","Time Target5"};
主なパラメータを設定して変数を入力した後は、指標の主要部分を開発する時です。
主要部分:
// 指標の初期化を始める void OnInit() { int i; string sn,sn2; // 線の中の点の条件を設定する if(iDepth<=0)Depth=500; else Depth=iDepth; // 履歴内のバーの条件を設定する if(iNumBars<10)NumBars=10; else NumBars=iNumBars; // 指標バッファの表示を設定する SetIndexBuffer(0,DiNapoliH,INDICATOR_DATA); SetIndexBuffer(1,DiNapoliL,INDICATOR_DATA); SetIndexBuffer(2,ColorBuffer,INDICATOR_COLOR_INDEX); // 指標値の表示精度を設定する IndicatorSetInteger(INDICATOR_DIGITS,Digits()); // 線の描画を設定する PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0); PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0); // 指標の短縮名を設定する sn="DiNapoli"; sn2=""; for(i=1;i<100;i++) { // チャート検索を設定する if(ChartWindowFind(0,sn)<0){break;} sn2="_"+(string)i; sn+=sn2; } // 銘柄の表示を設定する IndicatorSetString(INDICATOR_SHORTNAME,sn); for(i=0;i<11;i++) Name[i]+=sn2; // バッファを空の値で初期化する ArrayInitialize(DiNapoliH,0); ArrayInitialize(DiNapoliL,0);
指標の開発を進めましょう。
// 指標のカラーラインを調整する Color[0]=cStar; Color[1]=cStop; Color[2]=cTar1; Color[3]=cTar2; Color[4]=cTar3; Color[5]=cTar4; Color[6]=cTarT1; Color[7]=cTarT2; Color[8]=cTarT3; Color[9]=cTarT4; Color[10]=cTarT5; Depth=Depth*_Point; Direction=1; Last=0; Refresh=1; for(i=0;i<6;i++) { if(ObjectFind(0,sn)!=0) { // 水平線と垂直線を設定する ObjectCreate(0,Name[i],OBJ_HLINE,0,0,0); ObjectSetInteger(0,Name[i],OBJPROP_COLOR,Color[i]); ObjectSetInteger(0,Name[i],OBJPROP_WIDTH,1); ObjectSetInteger(0,Name[i],OBJPROP_STYLE,STYLE_DOT); // ObjectSetString(0,Name[i],OBJPROP_TEXT,Name[i]);// オブジェクトの説明 } } if(VLine==true) { for(i=6;i<11;i++) { if(ObjectFind(0,sn)!=0) { ObjectCreate(0,Name[i],OBJ_VLINE,0,0,0); ObjectSetInteger(0,Name[i],OBJPROP_COLOR,Color[i]); ObjectSetInteger(0,Name[i],OBJPROP_WIDTH,1); ObjectSetInteger(0,Name[i],OBJPROP_STYLE,STYLE_DOT); // ObjectSetString(0,Name[i],OBJPROP_TEXT,Name[i]);// オブジェクトの説明 } } } } // 指標がチャートから削除されたときに関数を追加し、指標からグラフィックオブジェクトを削除する void OnDeinit(const int reason) { int i; for(i=0;i<11;i++) ObjectDelete(0,Name[i]); ChartRedraw(); return; }
さて、指標バッファを計算しましょう。
// 指標の反復関数 int OnCalculate(const int total, // 入力時系列のサイズ const int calculated, // 処理されたバーの呼び出し const datetime &time[], // 時間値の配列 const double &open[], // 始値の配列 const double &high[], // 高値をコピーするための配列 const double &low[], // 安値の配列 const double &close[], // 終値の配列 const long &tick[], // ティックボリューム履歴を含むパラメータ const long &real[], // 実ボリューム const int &spread[]) // スプレッド履歴を含む配列 { int i,start; bool set; double a; // バーのチェックを設定する if(calculated<=0) { start=total-NumBars; if(start<0)start=0; // バッファを空の値で初期化する Last=start; ArrayInitialize(ColorBuffer,0); ArrayInitialize(DiNapoliH,0); ArrayInitialize(DiNapoliL,0); } // 新しいバーの計算 else start=calculated-1; for(i=start;i<total-1;i++) { set=false; DiNapoliL[i]=0; DiNapoliH[i]=0; if(Direction>0) { if(high[i]>DiNapoliH[Last]) { DiNapoliH[Last]=0; DiNapoliH[i]=high[i]; if(low[i]<high[Last]-Depth) { if(open[i]<close[i]) { DiNapoliH[Last]=high[Last]; A=C; B=high[Last]; C=low[i]; AT=CT; BT=time[Last]; CT=time[i]; Refresh=1; } else { Direction=-1; A=B; B=C; C=high[i]; AT=BT; BT=CT; CT=time[i]; Refresh=1; } DiNapoliL[i]=low[i]; } // 線の色を設定する ColorBuffer[Last]=0; Last=i; ColorBuffer[Last]=1; set=true; } if(low[i]<DiNapoliH[Last]-Depth&&(!set||open[i]>close[i])) { DiNapoliL[i]=low[i]; if(high[i]>DiNapoliL[i]+Depth&&open[i]<close[i]) { DiNapoliH[i]=high[i]; A=C; B=high[Last]; C=low[i]; AT=CT; BT=time[Last]; CT=time[i]; Refresh=1; } else { if(Direction>0) { A=B; B=C; C=high[Last]; AT=BT; BT=CT; CT=time[Last]; Refresh=1; } Direction=-1; } // 線の色を設定する ColorBuffer[Last]=0; Last=i; ColorBuffer[Last]=1; } } else { if(low[i]<DiNapoliL[Last]) { DiNapoliL[Last]=0; DiNapoliL[i]=low[i]; if(high[i]>low[Last]+Depth) { if(open[i]>close[i]) { DiNapoliL[Last]=low[Last]; A=C; B=low[Last]; C=high[i]; AT=CT; BT=time[Last]; CT=time[i]; Refresh=1; } else { Direction=1; A=B; B=C; C=low[i]; AT=BT; BT=CT; CT=time[i]; Refresh=1; } DiNapoliH[i]=high[i]; } // 線の色を設定する ColorBuffer[Last]=0; Last=i; ColorBuffer[Last]=1; set=true; } if(high[i]>DiNapoliL[Last]+Depth&&(!set||open[i]<close[i])) { DiNapoliH[i]=high[i]; if(low[i]<DiNapoliH[i]-Depth&&open[i]>close[i]) { DiNapoliL[i]=low[i]; A=C; B=low[Last]; C=high[i]; AT=CT; BT=time[Last]; CT=time[i]; Refresh=1; } else { if(Direction<0) { A=B; B=C; C=low[Last]; AT=BT; BT=CT; CT=time[Last]; Refresh=1; } Direction=1; } // 線の色を設定する ColorBuffer[Last]=0; Last=i; ColorBuffer[Last]=1; } } DiNapoliH[total-1]=0; DiNapoliL[total-1]=0; } //------------ if(Refresh==1) {
下記は指標計算の最終ループです。
// 計算に十分なバー数を確認する Refresh=0; a=B-A; Price[0]=NormalizeDouble(a*0.318+C,_Digits); // 開始 Price[1]=C; // 終了 Price[2]=NormalizeDouble(a*0.618+C,_Digits); // 目標1 Price[3]=a+C; // 目標2 Price[4]=NormalizeDouble(a*1.618+C,_Digits); // 目標3 Price[5]=NormalizeDouble(a*2.618+C,_Digits); // 目標4 for(i=0;i<6;i++) ObjectMove(0,Name[i],0,time[total-1],Price[i]); if(VLine==true) { // 指定した値を最も近い整数に丸めた値を返す a=(double)(BT-AT); Time[0]=(datetime)MathRound(a*0.318)+CT; // 一時的なゴール番号1 Time[1]=(datetime)MathRound(a*0.618)+CT; // 一時的なゴール番号2 Time[2]=(datetime)MathRound(a)+CT; // 一時的なゴール番号3 Time[3]=(datetime)MathRound(a*1.618)+CT; // 一時的なゴール番号4 Time[4]=(datetime)MathRound(a*2.618)+CT; // 一時的なゴール番号5 for(i=6;i<11;i++) ObjectMove(0,Name[i],0,Time[i-6],open[total-1]); } ChartRedraw(); // 方向が変更されたら音声再生をオンにする if(Sound==true&&calculated>0)PlaySound(SoundFile); } return(total); } //------------------------------------------------------------------------------------
指標は下に添付されています。
8. 終わりに
本稿はディナポリメソッドを取引に適用するための十分なデータを提供したでしょうか。ディナポリレベルは、標準のフィボレベルと拡張機能を使用する独自のアプローチを提供します。レベルを扱うという基本原則は変わりません。ディナポリは、適切に適用された場合に市場で信頼できる結果をもたらす多くの新しいルールを導入しました。
以下は本稿で使用されているプログラムです。
# | 名称 |
種類 |
説明 |
---|---|---|---|
1 | DiNapoli Levels.mq5 | 指標 | ディナポリレベルの自動計算とプロットのための指標 |
9. 参照
- ジョー・ディナポリ ディナポリレベル:フィボナッチ分析の投資市場への実践Coast Investment Software, Inc; 第2版 (1998)
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/3061





- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索