MQL講座の第1回目となります!
バイナリ―オプションでサインツールを使われている方は多いと思いますが、作るのは難しいと思われていませんか?
正直、サインツールは少し勉強すれば簡単に作れるようになります。
ぜひ、プロのサインツール開発者がノウハウを提供する「MQL講座(連載企画)」を熟読していただき、ご自身の裁量トレードにマッチしたサインツール作成にチャレンジしてみてください!
目次
講師(ミー)について

数多くのサインツールやインジケーターを長年開発してきた、私(ミー)が講師としてノウハウを公開します!
私はFX、バイナリ―オプション向けのツールとして、以下の開発実績があります。
販売実績数は2025年時点で600件を超えました!そんな私が、皆様にサインツールの作り方を分かりやすく説明します!
サインツールはどうやって作るの?

サインツールは「MQL言語」というプログラミング言語を使用し、サインを表示させたい明確な条件を記載します。
例えば、RSIの値が80以上ならHIGHエントリー、20以下ならLOWエントリーという条件でプログラムを組めば、その状態に応じたサインが表示されます。
プログラミングと聞くとハードルが凄く高そうに思えますが、C言語の開発経験がある方であれば、あれ、C言語と似てない!?って思われると思います。C言語は古すぎるので、Java言語、C++、VC++等の開発経験者であれば、特別な勉強をすることなく、プログラムを解析するのは容易だと思います。
では、初心者の方はと言うと、英語の羅列で意味が分からない!?って最初はなるかと思います。しかし、本記事のサンプルコードと照らし合わせて、順番に意味を解説していきますので、初心者の方もご安心ください!(多少、ご自身でネットを調査する等の勉強は必要になるかもしれませんが・・・)
MQL言語を使用して作成

MQL言語(MetaQuotes Language)は、バイナリ―オプションやFXに使用する、カスタムインジケーターの開発に使用されるプログラミング言語です。サインツールや便利なインジケーターを作成することができる言語です。
動作環境としては、MetaTraderプラットフォーム(MT4およびMT5)で使われますが、MQL言語には大きく、以下の2つのバージョンがあります。
- 【MQL4】MT4用のプログラミング言語。C言語に似た構文を持ち、トレーディングロボットやカスタムインジケーターの作成に使用されます。
- 【MQL5】 MT5用のプログラミング言語。MQL4よりも強力で柔軟性があり、オブジェクト指向プログラミングをサポートしています。これにより、複雑なトレーディングシステムや市場分析ツールの開発が容易になります。
MQL5はMQL4の進化版で、世界の流れはMQL5ではありますが、まだまだMQL4の方が需要が高い状況です。それと、MQL4の方がサンプルソースも豊富にあり、言語としても分かり易いので、特に初心者の方には、MQL4の方をオススメ致します。
MQL言語の拡張子(mq4、ex4)

MQL言語のソースである(mq4)と、MT4で動作する実行形式(ex4)の違いについて説明します。
まずは、サインツールのロジックを記載するファイルの拡張子が「.mq4」となります。mq4の内容はテキストですので、テキストエディタで開いて内容を確認することができます。
mq4のソースコードから「コンパイル」と呼ばれるものを実行することで作成されるのが、「.ex4」となります。ex4はバイナリ―データと呼ばれるもので、人が目で見ても分かりません。(暗号化されているイメージとなります)

MQL4のソース(mq4)を公開しているものと、実行形式(ex4)だけを公開しているものを見かけますが、mq4はロジックが記載されたものですので、作成者のノウハウがぎっしり詰まっています。
そうした理由から、有料級のサインツールやインジケーターは、ノウハウが詰まったmq4の公開ではなく、ex4の公開が多い傾向となります。じゃ、ex4からmq4が作成できないのか!?と言われると、結論から言いますと、普通の人ではできません。
オリジナルのサインツールを作って使用する場合、mq4を削除しないように管理してください。ex4は、mq4があれば作成できますが、ex4からmq4は作成できませんので・・・要注意です。
サインツールの種類は?
サインツールには、「アラート型」、「バッファー型」、「オブジェクト型」の3種類が存在します。
「アラート型」は条件にマッチした場合に、アラートを表示してエントリーのタイミングを知らせてくれます。
「バッファー型」と「オブジェクト型」は両方とも、チャート上のローソク足にHIGHサイン、LOWサインを出すものです。MQL言語でのサイン表示の作り方によって「バッファー型」と「オブジェクト型」が区別されるだけで、サインツールを使う人にとっては正直どちらでも良いです。
サインツール作成に必要な時間は?
作成するサインツールの内容によりますが、例えばRSIが80以上、20以下の場合にサインを出すロジックのサインツールであれば・・・10行~20行程度で出来ます。
MQL講座ではサンプルソースを提供していますので、すぐに動作させることが出来ます。また、サンプルソースのロジックの部分を変更(RSIをCCIに変更等)するだけで、オリジナルのサインツールが作れますので、デフォルトインジケーターを組み合わせてサインを出すサインツールであれば、数分~数時間で完成します。
世の中にはサインツールのソースコードが公開されているものもありますので、それを使って、少しだけロジックを変更するだけでも立派なサインツールが完成します。そのレベルのサインツールが高額で販売されている可能性もあります。
サインツールを作る3ステップ
さて、ここからが本題になります。実際にサインツールを作るステップは以下となります。

サインツール作成には「MetaEditor」が必要であり、サインツールを動作させる環境として「MetaTrader」が必要です。
MetaTraderのインストールは非常に簡単で、数分で構築が完了します。

皆様がチャートにサインを表示させたいロジックを、MQL言語を使用してプログラミングします。作成したプログラムを「コンパイル」することで、MT4で動作するサインツールが作成されます。

作成したサインツールが期待通りにサインを出してくれるのか動作確認を行います。問題なく動作すればサインツールの作成は完了です。
STEP①:サインツール作成に必要な環境準備
サインツールを作るための準備ですが、以下の2つとなります。
- MetaEditor4(MQL開発環境)
- MetaTrader4(MT4動作環境)
FXやバイナリ―オプションをやっている方は、MetaTrader4(MT4)は必須と言っても過言ではないものですので、既にインストールされているかと思います。まだインストールしていないという方は、以下のURLからMT4をダウンロードしてインストールすれば、環境構築は完了です。
https://www.fxcm.com/markets/platforms/metatrader-4/download/

「MetaEditor4」については、MT4をインストールする際に、同時にインストールされますので、これから新たに何か準備する必要はありません。
サインツールを開発する上で、重要なのは「MetaEditor 4」です。「MetaEditor 4」はサインを表示したい条件等のプログラムを行うもので、そのプログラム結果を確認するために「MT4」を使用します。
インストールが完了すると、以下の「MetaEditor4」と、「MetaTrader4」のファイルが出来ます。お使いのPCに、以下のようなショートカットがあれば、サインツールを作る準備は完了です!

サインツールを作成するための環境準備って既にあるから、何もする必要がないんだ!って思われた方も多いかと思います。そうなんです、おそらく多くの方が、既にサインツールを作成できる状態なんですよね。
上記の画像は私のパソコンの画像を切り取ったものですが、MT4は「FXCM Meta Trader4」になっていますが、他のMT4でも全く問題ありません。
STEP②:MQL言語でサイン表示ロジックを作る
このステップがサインツール作成のメイン作業となります。まずは、サンプルのサインツール(mi_SAMPLE_Signal.mq4)を動かしてみましょう!
このサンプルは、全てのローソク足に対して、下方向(↓)のサインを出すサインツールとなります。
mi_SAMPLE_Signal.mq4の作成方法
手順①:「mi_SAMPLE_Signal.mq4」という空のファイルを作成
手順②:テキストエディタにて、「mi_SAMPLE_Signal.mq4」を開く
手順③:以下のソースコードをコピーして、「mi_SAMPLE_Signal.mq4」へ貼り付け。その後、保存してください。
double DrawReverseLowBuffer[]; int start() { int counted_bars=IndicatorCounted(); int limit = Bars - counted_bars - 1; SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1,clrRed); SetIndexArrow(0,234); SetIndexBuffer(0,DrawReverseLowBuffer); for (int i=limit;i>=0;i--){ DrawReverseLowBuffer[i]=High[i]; } }
mi_SAMPLE_Signal.mq4をIndicatorsフォルダへ格納
手順④:MetaEditorを起動




mi_SAMPLE_Signal.mq4のビルド(mq4→ex4)



このコンパイル実行により、「mi_SAMPLE_Signal.mq4」から「mi_SAMPLE_Signal.ex4」が作成されます。
STEP③:サインツールの動作確認
STEP②で作成した、mi_SAMPLE_Signal.ex4の実行を行っていきます!
手順①:MT4を起動してください。


サンプルソースをコピーして、手順通りに実行すると、上記画像のように、全てのローソク足に対して、下方向の矢印サインが表示されます。
mi_SAMPLE_Signal.mq4のソースコードは11行と短いですが、サインが表示されることが確認できました。
サンプルサインツールの説明
サンプルサインツールは、非常にシンプルですが、サインツールを作る基本要素が多く含まれています。重要な内容になりますので一つずつ、丁寧に説明していきます。
サンプルサインツールのコメント(先頭に//があるもの)に説明を記載します。
double DrawReverseLowBuffer[]; // サインを表示する入れ物(配列)だと思ってください。 // doubleは、入れ物の型で小数点以下の値も管理できます。。 // ローソク足の状態(高値、安値、始値、終値)はdoubleの型で管理されますので、 // サイン表示用の配列には必ずdoubleを使用すると覚えてください。 int start() { // startはメイン処理の始まりです。 // このstartは、MT4起動時や最新のローソク足の値が変わった場合に、MT4から呼び出されます。 int counted_bars=IndicatorCounted(); // intは小数点を管理しない変数の型です。 // IndicatorCounted()はインジケータ起動後、計算済みのローソク足の数(基本:0)を返します。 // 2回目以降は、全ローソク足の数から1(最新のローソク足)を引いた値となります。 int limit = Bars - counted_bars - 1; // 計算対象を導き出しています。 // BarsはMT4に表示されている全てのローソク足の数です。 // つまり、Bars:10、counted_bars:0(初回)の場合、10-0で10本となります。 // 最後の-1は、少し分かりづらいのですが、配列は1から始めるのではなく、0から始まるためとなります。 SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1,clrRed); // サインの表示スタイルを設定しています。 SetIndexArrow(0,234); // サインとして表示するアイコンを設定しています。 // 234以外にも色々な種類がありますが、矢印系のアイコンとしては233,234が良く使われます。 SetIndexBuffer(0,DrawReverseLowBuffer); // サインとサインの入れ物を関連付けしています。 // SetIndexBufferで設定した入れ物は、MT4が動的配列として管理します。 for (int i=limit;i>=0;i--){ // for文ですが、繰り返し処理となります。limitが0の値になるまで繰り返し処理が行われます。 // 繰り返しの間、iの値が1ずつ減っていきます。 DrawReverseLowBuffer[i]=High[i]; // 処理対象のローソク足の高値(High)にサインを表示する指定を行っています。 } }
さて、どうだったでしょうか?
サインは出たけど、まだまだピンとこない!という方も多いと思います。何度もサンプルソースを読み返して、基本的な処理の流れのイメージを掴んでいただければと思います。
最初はサンプルプラグラムをそのまま動作確認し、少しずつ、値を変えたりすると、あっこういう処理をしてたんだ!と処理のイメージが掴みやすいですよ。最初は他人のマネから初めるが良いと思います。
サインツールへのロジック実装
サンプルサインツールの動作を確認することで、サインを出すシンプルな流れは理解できたと思います。
ロジックを実装する方法としては、RSI、CCIのような標準インジケーターの値の組み合わせや、ボリンジャーバンドへのタッチなど、相場の勢いなど、色々な手法があります。どんな手法でも、明確な条件があればロジックを組み込んでサインツール化することが可能です。
一般的に良く使われるロジックの実装について、説明します。
オシレーター系のテクニカル指標の組み合わせ

オシレーター系インジケーターは、現在の相場の「買われすぎ」「売られすぎ」を判断するものです。その瞬間の売買強弱などを把握することができるため、ある一定の値を超えたり下回った場合に、HIGH/LOWのサインを出す、逆張りエントリーの根拠に良く使われます。一定の範囲内で上下変動を繰り返すレンジ相場(持ち合い相場)でよく使われ、現状の方向性が不明瞭なときに役立ちます。
良く使われるオシレーター系のテクニカル指標は以下となります。サインツールへ組み込みたいテクニカル指標の詳細は、以下の表のリンクをクリックしてください。
テクニカル指標 | 内容 |
---|---|
RSI | Relative Strength Index(相対力指数)の略で、株価の買われすぎや売られすぎを判断 0~100の値で相場状態を判断する |
CCI | Commodity Channel Index(商品チャネル指数)の略で、相場の売られすぎや買われすぎを判断 決められた値の範囲はないが、おおよそ-200~200の値で相場状態を判断する |
ストキャス | 株価の変動幅と終値の関係から相場の過熱度合いを判断するテクニカル分析手法 0~100の値で相場状態を判断する |
MFI | マネーフローインデックス(Money Flow Index)の略で、株価の買われすぎや売られすぎを判断 0~100の値で相場状態を判断する |
WPR | ウィリアムズ%R (%R) は、モメンタムベースのオシレーターで、主に買われすぎと売られすぎの状態を識別 0~-100の値で相場状態を判断する |
サイン発生時のアラート
サインツールのロジックと一致した場合に、アラートを表示してエントリータイミングが来ることを知らせることができます。
この機能はサインツールでは必須です。サンプルソースに若干のソースコードを追加するだけで、機能実装することができます。
相場状況の簡易分析

相場分析を行う場合、レンジ相場とトレンド相場を見極める必要があります。言葉で言うのは簡単ですが、この判断は非常に曖昧であるため、ロジック化することは困難です。
しかし、何も考慮しないサインツールよりは、簡易的な分析ロジックを組み込んだ方が期待値は高くなります。
代表的なものを2つご紹介します。
相場簡易分析 | 内容 |
---|---|
ADX | 「Average Directional Movement Index」の略称で、平均方向性指数と言われる 一般的にマイナス/プラスのDMI(方向性指数)と組み合わせることで、上昇/下落のトレンドを把握する |
ZigZag | 相場のトレンドを視覚的に認識できるインジケーター チャート分析理論であるダウ理論やエリオット波動とも相性が良いが、サインツールで使用する場合には、リペイントする可能性が高くなる |
大陽線・大陰線の逆張り
ローソク足の状態で、大きく伸びる大陽線や大陰線があります。これは、サインツールを作成する際に、一般的に逆張りの強い根拠となります。
必ず逆張りが成功することは、どのロジックにおいてもありませんが、FXトレーダーが重要視するポイントですし、反発する可能性が高いロジックとなります。
ラインタッチ
ラインタッチは私が良く使う手法です。バイナリーオプション/FXは、ライントレードが基本ですので、このラインタッチを上手にロジック化することこそ、良いサインツールが作れます。
代表的なラインタッチについて、以下に記載します。
ライン種別 | 内容 |
---|---|
水平ライン | サポートライン、レジスタンスライン、自分で引いた水平ラインにタッチしたことを条件に加味 タッチした時点のローソク足の状態や、他のインジケーターの値を組み合わせて使用されることが多い |
ボリンジャーバンド | 移動平均線を中心とした上下の線(バンド)で構成された、価格変動の度合いを表す 単独での使用は根拠が弱いため、ローソク足の状態や、他のインジケーターの値を組み合わせて使用することが一般的 |
転売防止策の組み込み
サインツールを作る目的が、ご自身で使用されるだけであれば、転売防止策を組み込む必要はありませんが、販売目的として作成する場合には、転売防止策の組み込みは必須となります。
必ず実施しておきたい転売防止の対策を以下に記載します。
転売防止策 | 内容 |
---|---|
ユーザ認証 | ユーザ認証を行うサインツールにすることで、指定されたユーザー以外がサインツールを使用することを防ぎます。また、利用期限も一緒に設定することで、ユーザーが違反行為をした場合にすぐにサインツールの利用を停止することもできます。 |
iCustom呼び出し防止 | サインツールのサインを読み取って自動売買を行うツールでは、MQL言語の「iCustom」を使用してサインを読み取ります。この方法を防ぐ「カスブロ」という手法があります。 |
初めまして中島と申します。
ありがたい情報ありがとうございます。
早速mt4に矢印サインを入れてみたくてやってみましたが、マイサンプルシグナルmt4を開くと51桁まで行があり、ドラッグ&ドロップしても反映されませんでした。
画像のような4行目から始まり15行目で終わりの状態になっていないのが原因かと思います。
新規ファイルの作成がよく分からなくて、ソースコードを貼り付けてしまった事だと思います。
どうしたらいいか分かりません、お手数おかけしますが、ご教授頂ければ幸いです。
宜しくお願い致します。
中島様
ミーでございます。
手順①:「mi_SAMPLE_Signal.mq4」という空のファイルを作成
手順②:テキストエディタにて、「mi_SAMPLE_Signal.mq4」を開く
手順③:以下のソースコードをコピーして、「mi_SAMPLE_Signal.mq4」へ貼り付け。その後、保存してください。
上記の手順③にて、ソースコードがコピーされていない可能性がございます。
お手数ですが、再度、ソースコードをコピー(コードをマウスで選択して、「Ctrl+C」のキー操作)し、手順②で開いたmi_SAMPLE_Signal.mq4に、「Ctrl+C」のキー操作を試していただけますでしょうか。
よろしくお願い致します。