皆さん、ミーでございます。
私は無料サインツールや有料のインジケーターなどを自分で作成し、多くの皆様にご提供しております。
そんな中、多くの皆様から、実際に「私もサインツールを作成してみたい!」という声を多数いただき、私のノウハウでお役に立てるのならばと思い、初心者の方にも分かり易い、
「サインツールの作成方法」
に関する記事を作成(公開)することにしました。
目次
サインツールの作成は難しくない!
まず、皆様にお伝えしたいのは、サインツールの作成は、そんなに難しくありません。
むしろ、少しプログラム経験(VBA、JAVA、Python等)がある方であれば、すぐに作成できると思います。何より、他人が作成した、全くロジックが分からない、高勝率だけを全面に出しているサインツールを使うくらいなら、どんなときにサインが出るのか分かるサインツールの方が価値があると思いませんか?
例えば、RSIが80以上、20以下の場合にサインを出す程度のサインツールであれば・・・10行~20行程度で出来ますよ。
私は他の方が作成したサインツールは、全く信用しておりませんので、自分で作成したサインツールで、バイナリ―オプションを楽しんでおります。(今はバイナリ―オプションより、サインツールを作成する方が楽しくなっていますが・・・)
サインツールの作成は難しい!と思われている方、主婦の私でも少し勉強すれば作成できましたので、ご安心ください。
そして、なるべく、そのまま使えるサンプルのソースも提供していきますね。
サインツールを作るための準備
サインツールを作るための準備ですが、以下の2つだけです。
① MT4
② MetaEditor 4
「MT4」と「MetaEditor 4」があれば、サインツールは簡単に作成できます!
FXやバイナリ―オプションをやっている方は、MT4は必須と言っても過言ではないものですので、既にインストールされているかと思います。まだインストールしていないという方は、以下のURLからMT4をダウンロードしてインストールすれば、環境構築は完了です。
https://www.fxcm.com/markets/platforms/metatrader-4/download/
MetaEditor 4については、MT4をインストールする際に、同時にインストールされますので、これから新たに何か準備する必要はありません。
サインツールを開発する上で、重要なのは「MetaEditor 4」です。「MetaEditor 4」はサインを表示したい条件等のプログラムを行うもので、そのプログラム結果を確認するために「MT4」を使用します。
お使いのPCに、以下のようなショートカットがあれば、サインツールを作る準備は完了です!
サインツールを作成するための環境準備って既にあるから、何もする必要がないんだ!って思われた方も多いかと思います。そうなんです、おそらく多くの方が、既にサインツールを作成できる状態なんですよね。
上記の画像は私のパソコンの画像を切り取ったものですが、MT4は「FXCM Meta Trader4」になっていますが、他のMT4でも全く問題ありません。
MQL言語について
「MetaEditor 4」は、MQL言語(Meta Quotes Languageの略)と呼ばれるものでプログラム開発を行います。
おそらく、Java言語の開発経験がある方であれば、あれ、Java言語と似てない!?って思われると思います。もしくは、C++、VC++の開発経験者ですかね。
なので、Java言語の開発経験がある方は、特別な勉強をすることなく、プログラムを解析するのは容易だと思います。
初心者の方は、英語の羅列で意味が分からない!?って最初はなるかと思いますが、サンプルコードと照らし合わせて、順番に意味を解説していきますので、初心者の方もご安心ください!(多少、ご自身でネットを調査する等の勉強は必要になるかもしれませんが・・・)
MQL言語にも、MQL4、MQL5とバージョンが異なるものがあります。MQL5はMQL4の進化版で、世界の流れはMQL5と聞いていますが、まだまだMQL4の方が需要が高い状況です。それと、MQL4の方がサンプルソースも豊富にあり、言語としても分かり易いので、特に初心者の方には、MQL4の方をオススメ致します。
MQL言語を全て覚えないとだめなの!?
きっと、初心者の方はプログラム経験もないし、MQL言語も分からないし、覚えるのが凄く大変そう!って思われていますよね。
結論から言いますと、簡単なサインツールを作成する程度であれば、サンプルプログラムをコピーして、少しだけロジックを変更することで、オリジナルなサインツールを作成することは十分可能であり、MQL言語を熟知していなくても、全く問題ありません。
私もMQL言語の仕様は全て理解しておりませんし、呼び出すインジケーターの関数なども、随時、ネットで調査しながらプログラムしたりしていますので、1つ、簡単なサインツールのサンプルプログラムを理解できれば、そこまで敷居が高いことはありません。
mq4とex4の違い
MQL4のソースである(mq4)と、MT4で動作する実行形式(ex4)の違いについて説明します。
ex4は、mq4のソースコードから「コンパイル」と呼ばれるものを実行することで作成されます。mq4の内容はテキストですので、テキストエディタで開くことが出来ますが、ex4はバイナリ―データですので、人が目で見ても全く分かりません。(暗号化されているようなものですね)
MQL4のソース(mq4)を公開しているものと、実行形式(ex4)だけを公開しているものを見かけますが、mq4はロジックが記載されたものですので、作成者のノウハウがぎっしり詰まっています。
そうした理由から、有料級のサインツールやインジケーターは、ノウハウが詰まったmq4の公開ではなく、ex4の公開が多い傾向となります。じゃ、ex4からmq4が作成できないのか!?と言われると、結論から言いますと、普通の人ではできません。
オリジナルのサインツールを作って使用する場合、mq4を削除しないように管理してください。ex4は、mq4があれば作成できますが、ex4からmq4は作成できませんので・・・要注意です。
サンプルサインツールを動かそう!
それでは、サンプルのサインツール(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」が作成されます。
mi_SAMPLE_Signal.mq4の実行
手順①: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/ストキャスなどのインジケーターを使用したサインツールの記事も作成していきますので、より、理解が深まるかと思います。
初めまして中島と申します。
ありがたい情報ありがとうございます。
早速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」のキー操作を試していただけますでしょうか。
よろしくお願い致します。