コンテンツにスキップ

【移植#75】TIIの20越え・80割れ通知 — 同じ名前でも式が違う

EURUSD H1で金色の原典式TIIと水色の旧実装型TIIを重ね、20上抜けと80下抜けの確定足マーカー、1,200本の照合結果を表示したMT5実画面

この記事の3行まとめ

  • TIIの「20越え」と「80割れ」を、形成中ではなく確定した足で一度だけ検出します
  • M.H. Peeの原典式と、旧TII_RLHに見られる別の計算解釈を同じチャートへ重ねました
  • EURUSD H1の確定1,200本を独立計算と全件照合し、2つの式は1,116本で異なりました

今回の原典はTIIへのAlert追加

今回採用したのは、2010年3月25日の「Trend Intensity IndexにAlert をつける。」です。

元記事を読む

原典では、読者から次の機能が求められていました。

  • TIIが20を上回ったときに知らせる
  • TIIが80を下回ったときに知らせる
  • ポップアップだけでなくメールも使えるようにする

通知処理だけなら、すでに移植#19と移植#33で、確定足、初回抑制、同一バーの連打防止を扱っています。同じ説明を繰り返さないため、今回はTIIの計算式まで戻りました。

調べると、同じ「TII」という名前でも、偏差を測る基準に少なくとも2通りの実装がありました。そこで配布版は2本を同時に描き、通知に使う式を選べるようにしています。

TIIは何を0〜100へ変換しているのか

TII(Trend Intensity Index)は、価格が移動平均より上にある偏差と、下にある偏差の割合を0〜100へ変換した指標です。

M.H. Peeによる定義では、まず現在の60本単純移動平均を求めます。次に、直近30本の終値をその移動平均と比べ、上側と下側の距離を別々に合計します。

Text Only
上方偏差 = Σ max(Close[j] − 現在のSMA60, 0)
下方偏差 = Σ max(現在のSMA60 − Close[j], 0)

TII = 100 × 上方偏差 ÷ (上方偏差 + 下方偏差)

原論文とMQL5 CodeBaseの解説では、標準例として60本SMAと30本の偏差が示されています。

上方偏差だけなら100、下方偏差だけなら0、両者が同じなら50です。今回、分母がほぼ0になる平坦な区間は中立の50としました。

「現在のMA」と「各バーのMA」は同じではない

原典が参照していた旧MQL4インジケーターTII_RLHは、先に各バーのClose − MAを作り、その直近30本を合計しています。

MQL4 CodeBase「TII_RLH」

この方法では、30本の終値がそれぞれ異なる時点のMAと比較されます。

Text Only
原典式          : Close[j] − MA[現在]
旧TII_RLH型     : Close[j] − MA[j]

トレンド中はMA自体も動くため、この違いは小さな丸め差では終わりません。掲載画像では、金色が現在のMAを全30本へ使う原典式、水色が各バー自身のMAを使う旧実装型です。

配布版の初期設定は、M.H. Peeの定義に合わせたSMA 60 / TII 30 / CURRENT BASELINEです。MA方式は変更できますが、SMA以外を選んだ時点で原論文どおりの設定ではなく、派生形になります。

20越え・80割れをBUY/SELLと呼ばない理由

ここには、もう一つ意味の違いがあります。

M.H. Peeの原論文は、TIIが80を超えた状態を強い上昇、20を下回った状態を強い下降として、トレンド方向へ入る例を示しています。一方、FAI-FX記事の依頼は20を上抜けたときと80を下抜けたときの通知です。これは極端な領域へ入る瞬間ではなく、そこから戻る瞬間です。

表示 一つ前の確定足 新しい確定足 意味
20-up 20以下 20より上 下側の極端領域から戻った
80-down 80以上 80未満 上側の極端領域から戻った

したがって、配布版は矢印をBUY/SELLと名付けていません。通知は状態変化を知らせるだけで、売買の優位性や反転を保証するものではありません。

確定足だけを同一バー1回通知する

表示マーカーと通知判定には、形成中の0番足を使いません。最後に確定した足と、その一つ前の確定足で境界をまたいだかを調べます。

MQL
if(previous <= InpLowLevel && selected > InpLowLevel)
   signal = 1;
else if(previous >= InpHighLevel && selected < InpHighLevel)
   signal = -1;

インジケーターの初回読み込みでは、最新の確定足時刻を記録するだけにします。次に新しい足が確定し、その時刻が変わったときだけ通知を評価するため、過去の矢印がまとめて送られたり、同じ足で繰り返し通知されたりしません。

ポップアップとメールは初期値OFFです。必要な場合だけ端末設定を済ませて有効にしてください。Alert()とSendMail()はストラテジーテスターでは動作しないため、実通知は通常チャートで確認します。

パラメーター

パラメーター 初期値 役割
InpMajorPeriod 60 基準となる移動平均の期間
InpMinorPeriod 30 偏差を合計する期間
InpMAMethod SMA 基準MAの方式。原典設定はSMA
InpLowLevel 20 上抜けを検出する下側レベル
InpHighLevel 80 下抜けを検出する上側レベル
InpSignalFormula CURRENT BASELINE 通知へ使う計算解釈
InpEnablePopup false MT5のポップアップを有効化
InpEnableEmail false MT5設定済みメールを有効化

ROLLING BASELINEへ切り替えると、水色の旧実装型で境界を判定します。金色と水色は常に表示するため、式を変えた影響を画面上で確認できます。

75_TII_Threshold_Reentry_Alert_v1_00.mq5 をダウンロード

EURUSD H1の確定1,200本で照合

専用MT5 Build 6182で、配布インジケーターと独立検証EAをコンパイルしました。どちらも0エラー・0警告です。

検証側では、配布版のバッファを読むだけで合格にせず、EURUSD H1の終値から60本SMA、2通りの偏差合計、20上抜け、80下抜けを別に計算しました。

検査項目 結果
照合した確定足 1,200本
原典式 vs 独立計算 不一致0
旧実装型 vs 独立計算 不一致0
シグナルコード・矢印 不一致0
20上抜け 16件
80下抜け 11件
2つの式が異なった足 1,116本
2つの式の最大差 80.0661
2系列の値域 0.0000〜100.0000
計算許容差 1e-8
注文数・ポジション数 開始前後で変化なし
ポップアップ・メール OFF、外部送信なし

最大の数値誤差は1.0041e-9で、許容差内でした。これはSMAを足し合わせる順番による浮動小数点差です。一方、2つのTII間の最大差80.0661は計算基準の違いそのもので、丸め誤差ではありません。

1,200本中1,116本で値が異なったため、「どちらもTIIだから同じシグナルになる」とは扱えません。別環境のTIIと比較するときは、期間だけでなく、各終値をどのMAから測っているかも確認してください。

使い方

  1. MQ5をMT5のデータフォルダー内のMQL5/Indicatorsへ置き、MetaEditorでコンパイルします。
  2. 確認したい銘柄・時間足のチャートへ適用します。
  3. 金色の原典式と水色の旧実装型、20・50・80の位置を確認します。
  4. 初期設定では、原典式が20を上抜けた足に緑、80を下抜けた足に赤の矢印が出ます。
  5. 通知が必要な場合だけ、ポップアップまたはメールを有効にします。

注意点

  • 今回の件数はEURUSD H1、確定1,200本、SMA 60、偏差30本での実測です。別の銘柄・時間足・期間では変わります
  • 20上抜けと80下抜けは、原論文の80超・20未満によるトレンド追随ルールとは別です
  • 形成中バーは値が変わるため、配布版の通知と矢印は確定足だけを使います
  • メールの成否はMT5側の設定と通信環境に依存します。戻り値がfalseならエラー番号をログへ出します
  • 指標の式が一致しても、そのシグナルに収益性があることまでは確認していません
  • 配布版は注文、ポジション変更、DLL、WebRequest、ファイル出力を行いません

まとめ

TIIへ通知を付ける前に、どのTIIを見ているのかを固定する必要がありました。

現在のMAを直近30本へ共通して使う原典式と、各バー自身のMAを使う旧実装型は、同じ0〜100の線でも一致しません。今回のEURUSD H1では1,200本中1,116本で差がありました。

配布版は2本を隠さず重ね、FAI-FX記事が求めた20越え・80割れを確定足で一度だけ知らせます。矢印の方向を売買判断へ読み替える前に、式、境界をまたぐ向き、確定タイミングの3点をそろえてください。

あわせて読みたい記事


前後の記事

前: 【移植#74】再初期化しても同じ形か — 差分計算と全計算を500本照合

次: 【移植#76】H1の5分ずれを壊さず調べる — M1再集計でOHLCを照合

— SPONSORED —