「インジケーターの作り方は分かったけれど、次に何を作ればいいのか分からない」。
関数の使い方を1つずつ覚えたあと、多くの人がここで止まります。
この記事では、このサイトで実際に公開してきた自作インジケーターのアイデアの中から、
初心者が最初の1本を選ぶのにちょうどいい5つを、難易度と習得できる技術で比較し、
どの順番で作っていくとスキルが積み上がるかをロードマップにしました。
この記事で分かること
・自作インジケーターのアイデア選びで失敗しない3つの基準
・どのインジケーターにも共通する最小のテンプレートコード
・5つのアイデアを難易度・習得できる技術で比較した表
・初心者が最初の1本を選ぶためのロードマップ
設計思想: なぜ「使い方」の次に「自分で考えた指標」を作るべきか
RSIやMACDなど既存の指標の「使い方」を覚えることと、
自分で考えた指標を「作る」ことの間には、実は大きな壁があります。
「使い方」の記事を読んだあとに次にやること
既存指標の解説記事は、関数の引数や戻り値を覚えれば読み進められます。
しかし、自分の悩みを数値化する自作インジケーターでは、
「何を数えるか」「どう表示するか」を自分で決める必要があり、ここで手が止まる人が多いです。
いいアイデアを選ぶ3つの基準
最初の1本を選ぶときは、次の3つを満たすものから始めるのがおすすめです。
| 基準 | 内容 |
|---|---|
| 仕組みが単純 | 「〇〇が△△本続いたら」のように、条件が1〜2個で説明できる |
| 既存関数の組み合わせでできる | 新しい公式や複雑な数学を自分で発明しなくてよい |
| 自分の悩みから発想している | 「毎回目で数えるのが面倒」等、具体的な不便さの解決になっている |
どの自作インジケーターにも共通する最小の型
以下の5つのアイデアも含め、画面に何かを表示するだけの自作インジケーターは、
ほぼ共通の骨組みで書けます。
#property strict
#property indicator_chart_window
#property indicator_buffers 0
int OnInit()
{
return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
// ここに「何を数えるか」のロジックを書く
return(rates_total);
}
「何を数えるか」の部分だけがアイデアごとに変わり、
土台となるOnInit/OnCalculateの形は変わりません。
まずこの型をコピーして、
自分の考えた条件を1つだけ足してみるところから始めると取り組みやすくなります。
アイデア1: 連続陽線・陰線カウンターで「そろそろ反転?」を可視化する
5つの中でも最も単純な条件で作れる、最初の1本に向いているアイデアです。
何を数値化するか
直近の確定ローソク足が、何本連続で陽線(または陰線)になっているかをカウントし、
本数が増えるほど「そろそろ反転するかも」という注意信号として表示します。
習得できる技術
Close[]とOpen[]の比較だけで条件が作れるため、
配列の読み方と条件分岐の組み合わせを練習するのに向いています。
詳しい実装は既刊の連続陽線・陰線カウンターの記事で解説しています。
アイデア2: 時間帯別の陽線出現率をヒートマップ表示する
「時間帯によって相場の傾向が違う気がする」という感覚を、実際の集計で確認するアイデアです。
何を数値化するか
過去の確定ローソク足を時間帯(0時〜23時)ごとに分類し、
それぞれの時間帯で陽線が出た割合を集計して一覧表示します。
習得できる技術
配列を時間帯の数だけ用意して集計するという、集計処理の基本パターンを練習できます。
詳しい実装は既刊の時間帯別陽線出現率ヒートマップの記事で解説しています。
アイデア3: 損切りラインと現在値の距離を常に表示する
EA記事群で繰り返し指摘してきた「損切り未設定」問題を、
インジケーターで可視化するアイデアです。
何を数値化するか
保有中の注文の損切り価格(StopLoss)と現在値の距離をpipsで計算し、
損切りが設定されていない注文があれば警告表示します。
習得できる技術
OrderSelect/OrdersTotalでの注文ループを読む練習になり、
この先のEA記事を理解する土台にもなります。
詳しい実装は既刊の損切りラインと現在値の距離を表示するインジケーターの記事で解説しています。
アイデア4: 複数通貨ペアの値動きの相関を1画面にまとめる
「このペアとこのペアは同じ方向に動きやすい」という感覚を、数値で確認するアイデアです。
何を数値化するか
複数の通貨ペアの変化率からピアソンの相関係数を自分で計算し、
ペアごとの相関の強さを一覧表示します。
習得できる技術
自分のチャート以外の通貨ペアのデータをiClose等で取得する方法と、
簡単な統計計算の実装を練習できます。
詳しい実装は既刊の複数通貨ペアの相関を可視化するインジケーターの記事で解説しています。
アイデア5: 複数時間足のトレンド一致度をスコア化する
5つの中では最も多くの判定を組み合わせる、少し難易度の高いアイデアです。
何を数値化するか
短期足・中期足・長期足それぞれのトレンド方向を判定し、
何本の時間足が同じ方向を向いているかを一致度スコアとして表示します。
習得できる技術
複数の判定結果を集計してスコア化する設計は、アイデア2の集計処理の発展形にあたります。
詳しい実装は既刊のマルチタイムフレーム・トレンド一致度スコアの記事で解説しています。
5つのアイデアの難易度・習得できる技術の比較
ここまでの5つを、難易度と習得できる技術で一覧にしました。
難易度比較表
| アイデア | 難易度 | 主に使う仕組み | 習得できる技術 |
|---|---|---|---|
| 1. 連続陽線・陰線カウンター | ★☆☆ | Close/Openの比較 | 配列の読み方・条件分岐 |
| 2. 時間帯別陽線出現率 | ★★☆ | 時間帯ごとの集計配列 | 集計処理の基本 |
| 3. 損切り距離の表示 | ★★☆ | OrderSelectループ | 注文情報の読み取り |
| 4. 複数通貨ペアの相関 | ★★★ | iCloseと相関係数の自作計算 | 他シンボルのデータ取得・簡単な統計 |
| 5. マルチタイムフレーム一致度 | ★★★ | 複数時間足の判定を集計 | 集計処理の発展・設計の整理 |
どの順で作るとスキルが積み上がるか
表の★の少ないものから順に、1→2→3→(4・5はどちらでも)の順で取り組むと、
配列操作から集計処理、注文情報の読み取りへと、無理なく技術を積み上げられます。
補足
・アイデア1〜3はインジケーター単体で完結する
・アイデア4・5は複数のデータソースを1つの画面にまとめる設計が必要になる
・どれも既刊記事に実際に動くコード全文が掲載されている
つまずきやすいポイント
注意
・最初から5つ全部を1つのインジケーターに詰め込もうとすると条件分岐が複雑になりすぎる
・他シンボルのデータ取得(アイデア4)は、該当シンボルがチャート一覧に表示されていないと
値が取得できないことがある(SymbolSelectで明示的に追加する)
・集計系(アイデア2・5)は、集計対象の本数が少ないと結果が偏って見える点に注意する
よくある質問
自作インジケーターのアイデア選びについて、よくある疑問に回答します。
実践アドバイス
・プログラミング経験がゼロでも、まずは表のテンプレートコードをそのまま
コピーして動かしてみる
・アイデアが思いつかないときは、「毎回チャートを見て手動で確認していること」を
そのまま数値化してみる
・1つのインジケーターに全部を詰め込まず、1本につき1つの悩みの解決に絞る
プログラミング経験がなくても自作インジケーターは作れますか?
作れます。
この記事のテンプレートコードのように、骨組み自体はほぼ決まった形をしているため、
既刊記事のサンプルコードをコピーして、
条件の部分だけ少しずつ書き換えていく進め方がおすすめです。
既存のインジケーターを改造するのとオリジナルを作るのは、どちらが先がいいですか?
既存指標の「使い方」記事を一通り読んだあとであれば、どちらから始めても構いません。
ただし、改造は元のコードの意図を理解する必要がある分、実は難易度が上がることもあるため、
この記事のアイデア1のような単純な条件のオリジナルから始める方が、
つまずきにくい傾向があります。
アイデアが思いつかないときはどうすればいいですか?
「チャートを見ながら毎回自分の頭で計算・確認していること」を思い出してみてください。
この記事の5つのアイデアも、
「連続した本数を目で数える」「時間帯ごとの傾向を感覚で判断する」といった、
本来は自分の頭の中でやっていた作業を、そのまま数値化・自動化したものです。
複数のアイデアを1つのインジケーターにまとめてもいいですか?
技術的には可能ですが、最初の数本は1本につき1つの悩みの解決に絞ることを推奨します。
複数の条件を1つのインジケーターに詰め込むと、
どこにバグがあるのか特定しづらくなるためです。
慣れてきたら、既刊のアイデア5(マルチタイムフレーム一致度)のように、
複数の判定を1つにまとめる設計に挑戦してみてください。
【MQL4】初心者が最初に作るべきオリジナルインジケーターのアイデア5選と選び方について解説してみた:まとめ
自作インジケーターのアイデア選びは、
「仕組みが単純」「既存関数の組み合わせでできる」「自分の悩みから発想している」の
3つを基準にすると失敗しにくくなります。
今回紹介した5つは、配列操作→集計処理→注文情報の読み取り→
他シンボルのデータ取得→複数判定の集計、
という順で少しずつ難易度が上がるように並んでいます。
まずは共通テンプレートをコピーして、
アイデア1の連続陽線・陰線カウンターから手を動かしてみることをおすすめします。
コメント