バイナリーオプションやハイローオーストラリアで役に立つMT4版サインツールの作り方を紹介!チャットGPTを活用することでMQL4の知識を高める事が出来ます。
- サインツールの作成にプログラムの知識が必要か分かる
- MT4、MetaEditorの設定方法が分かる
- チャットGPTでサインツールが作れることが分かる
- チャットGPTを活用した問題解決方法が分かる
ハイローオーストラリア | ザオプション | ブビンガ |
|
|
|
MT4でサインツールを作るのにプログラムの知識は必要か
MT4でサインツールを作るにはMQLと呼ばれるプログラム言語が必要になります。
MQL4はMetaQuotes社が提供する外国為替証拠金取引用のプラットフォームである「MetaTrader4」の機能を拡張するためのプログラム言語です。MetaTrader4は2005年にリリースされましたが、MQL4による拡張性の高さが投資家からの評価を集め、10年以上経つ現在でも数多くの証券会社が対応しているという、非常に息の長い取引プラットフォームとなります。
MQL4はC++をベースに開発された言語のため、C++をはじめC#やJavaなどの開発経験があれば比較的容易に開発を行う事が出来ます。さらにMQL4の開発環境はMetaTrader4と一緒に提供されているため、MetaTrader4をインストールすれば開発環境も全て揃います。このようにプログラム開発に対する敷居の低さもMetaTrader4が長年支持され続けている理由の一つなのでしょうね。
引用:MQL4逆引きリファレンス
MQL4はC++やC#、Javaを使った事がある方なら、理解しやすい言語となっています。
理解しやすい言語なのですが、プログラム初心者の方は初めは苦労すると思います。
プログラムの知識がある方も、無い方も一度確認して欲しいサイトが「フランのなるほどMT4」と言うサイトです。
このサイトではMQL4のいろいろな関数や基礎知識を学ぶ事が出来ます。
プログラム初心者の方は、初めは何をして良いか分からないと思うのですが「データ型、演算子、処理、機能、変数、定数」はどのプログラム言語でも重要になる基礎知識なので、時間がある時に覚えておきましょう。
MT4のサインツールに特化した学習サイトは少ない
残念なことにMT4のサインツールに特化した学習サイトは、ほとんどありません。1から10まで教えてくれるサイトがあれば良いのですが、現状見つける事は出来ませんでした。
誰かに教わる事が一番なのですが、そんな都合よくMT4のサインツールが得意な人はいません。そこでチャットGPTに頼る事にしました。
私自身、プログラムはかじった程度ですので、詳細まで答える事はできません。このページで紹介している内容自体間違いだらけかもしれません。
それでも!
完璧を求めて進めないままでいるのか、たまにおかしな回答をするチャットGPTを活用してでも前に進むのかはあなた次第だと思います。
完璧を求める方はこのページを閉じて、スクールに通う事をおすすめします。
チャットGPTにサインルーツを作ってもらった
チャットGPTに以下の様な質問をして、サインツールのコードを書いて貰いました。
チャットGPTの回答が以下の様になります。
//+——————————————————————+
//| RSI_Signal |
//| Copyright 2024, MetaQuotes Software Corp. |
//| https://www.metaquotes.net |
//+——————————————————————+
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
//— input parameters
input int RSIPeriod = 14;
input double LevelUp = 70.0;
input double LevelDown = 30.0;
//— indicator buffers
double BuyBuffer[];
double SellBuffer[];
//+——————————————————————+
//| Custom indicator initialization function |
//+——————————————————————+
int OnInit()
{
// Indicator buffers mapping
SetIndexBuffer(0, SellBuffer);
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 233); // Arrow code for sell signal
SetIndexLabel(0, “Sell Signal”);
SetIndexBuffer(1, BuyBuffer);
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 234); // Arrow code for buy signal
SetIndexLabel(1, “Buy Signal”);
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//| Custom indicator iteration function |
//+——————————————————————+
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[])
{
int limit = rates_total – prev_calculated;
if(prev_calculated > 0)
limit++;
for(int i = 0; i < limit; i++)
{
double rsiValue = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);
SellBuffer[i] = EMPTY_VALUE;
BuyBuffer[i] = EMPTY_VALUE;
if(rsiValue > LevelUp)
SellBuffer[i] = High[i] + (Point * 5); // Sell signal above the candle high
if(rsiValue < LevelDown)
BuyBuffer[i] = Low[i] - (Point * 5); // Buy signal below the candle low
}
return(rates_total);
}
//+------------------------------------------------------------------+
このコードが本当に動くのかMT4を実際に使って試してみましょう。
MT4でサインツールを作る為の準備
MT4でサインツールを作る為の準備方法をまとめています。MT4に関しては公式サイトからダウンロードする事が出来ない(サポート終了の為)のでFX業者からダウンロードする必要があります。
MT4をダウンロードする
まずはMT4をダウンロードしましょう。MT4のダウンロードに関しては関連記事をご確認下さい。※当サイトではFXTFのダウンロードを推奨しています。
サインツールを作るには「MT4」と「MetaEditor」が必要になります。通常MT4をダウンロードすれば「MetaEditor」も一緒に付いてきます。
「MetaEditor」に関しては「ツール」⇒「メタエディター」を選ぶと使う事が出来ます。
MetaEditorにチャットGPTのコードを記入してコンパイルする
MetaEditorより「ファイル」⇒「新しいファイル」をクリックします。
MQLウィザード:ファイルが開きますので「カスタムインディケーター」を選択して「次へ」ボタンをクリックします。
ファイル名を決めます。
名前の部分は「Indicators¥」と書かれていますが「Indicators¥zakosuke」にすればzakosukeと言う名前のインジケーターファイルが作られます。
ファイルの名前はご自身が分かりやすいものでご記入下さい。
ファイルの名前を記入したら「次へ」ボタンをクリックします。
カスタムインジケーターのイベントハンドラは何も変更せずに「次へ」ボタンをクリックします。
カスタムインジケーターの描写プロパティーも何も変更せずに「次へ」ボタンをクリックします。
初期の設定画面が表示されます。
今回はチャットGPTのコードが動くか試したいので、全て記述を削除します。
ひとつ前の項目で紹介した、チャットGPTのコードを貼り付けます。
コードを貼り付けた後にコンパイル」ボタンクリックします。
エラーが無ければ無事にコンパイルが完了しています。
コンパイルをする事でプログラムの起動が可能になります。プログラムはMetaEditorで作りましたが、コンパイルすると、MT4の本体に「zakosuke」ファイル出来上がります。
MT4本体の「ナビゲーター」内の「インディケーター」に「zakosuke」ファイルがある事を確認します。
※ファイル名は、各自が付けたファイル名になります。
「zakosuke」をダブルクリックします。
ポップアップが出てきますので「OK」ボタンをクリックします。
矢印が出ている事を確認します。
RSIを起動して70以上の時と30以下の時に矢印が出ているか確認します。
簡単な指定であればチャットGPTだけでも書けることが証明されました。
チャットGPTは完璧では無い
チャットGPTが書くプログラムコードは動く時もあれば動かない時もあります。
チャットGPTを使用した場合、プログラムコードを「MetaEditor」に張り付けて「コンパイル」します。
エラーが出た場合は、エラー箇所を修正する必要があります。
※エラーがを取り除かないとコンパイルする事が出来ません。
しかし、プログラムの知識が無い方はエラーの修正はほぼ不可能と言えます。
その様な場合は、コンパイル出来るコードが出るまで、チャットGPTに書き直してもらいます。やり方としては「同じ質問をする」か「別パターンで書いて」とチャットGPTに依頼します。
これに関してはガチャをしている様な感じですが、チャットGPTはなかなか優秀なので、何回か書きなおして貰えばコンパイルが成功します。
※2024年6月時点でgoogleのGeminiはお勧めできません。コンパイルエラーのコードばかり教えてくれるので、使い物になりません。
チャットGPTを薦める理由
チャットGPTのプログラムは完璧とは言えません。それでもチャットGPTを使う事をお勧めする理由は「挫折を防止」するためです。
MQL4を学んでいけば、いずれはサインツールを作れる様になります。しかし、多くの方はそこまで辿り付けません。
何故なら、どの様に学習すれば良いかが分からないからです。
MQL4を紹介しているサイトは確かにありますが、基礎だけ学んでもイメージが湧かなく、途中でつまらなくなり高確率で挫折します。
ではどうすれば良いか!
プログラムを学ぶ際に為になるのが「動くプログラムコード」を見る事になります。チャットGPTを使えば動くプログラムコードを見る事が出来ます。
動くプログラムコードをいくつも見る事で、知識が増えていきます。
サインツールの作り方を紹介しているサイトを見る事は非常に重要です。しかしサインツールの作り方を紹介しているサイトのコードは限られています。
限られたコードを見た後、都合よく次に知りたいコードが紹介されているサイトが見つかるとは言えません。多くの方は、都合が悪くなると立ち止まります。
作りたいサインツールのコードが紹介されているサイトが見つからない!
ならチャットGPTに動くコードを書いてもらおう!
プログラムの最大の敵は止まる事による挫折です。チャットGPTを活用すれば挫折する理由はなくなるので、うまく活用される事をお勧めします。
チャットGPTを使ったMQL4の学習方法
チャットGPTにプログラムコードを書いて貰い、張り付けるだけではいつまでたってもMQL4を覚える事はできません。
プログラムを上達するにはプログラムの解析が必要なります。
先ほど使用したチャットGPTのコードは、初めてMQL4を使う人にとてはちんぷんかんぷんだと思います。
その分からない気持ちをチャットGPTにぶつけましょう。
チャットGPTはどんなに質問しても嫌な顔をする事はありません。
本気で解析する気がある方は、分からない箇所を全て質問される事をおすすめします。
かなり根気がいりますが、分からない箇所を無くすことで、プログラムがどの様に動いているのかを理解する事が出来ます。
チャットGPTは大まかな内容を知る際に役に立ちますが、詳細を知るには専門のサイトを確認した方が良いと思います。
- ①チャットGPTに質問する
- ②更に詳細を知りたい場合は、専門サイトを探す
全てを専門サイトで知ろうとすると、頭がこんがらがる可能性があります。まずは大まかにチャットGPTから知識を得る事をおすすめします。
チャットGPTが書いたプログラムコードを解析
チャットGPTに書いて貰ったプログラムコードを徹底的に解析しています。先ほど紹介したチャットGPTを使ったMQL4の学習方法と重ね合わせてご確認下さい。
プロパティーでパラメーターの指定
#property strict(設定しておけば最新機能と動作となる為、設定しておいた方が良い)
#property indicator_chart_window(インディケーターをメインチャートに表示)
#property indicator_buffers 2(インディケーターが使用するバッファの数を2に設定)
#property indicator_color1 Red(1番目のインディケーターの色を赤に)
#property indicator_color2 Blue(2番目のインディケーターの色を青に)
プロパティーは「MT4でEA自作しちゃおう~」で詳細を確認する事が出来ます。
入力パラメータ
入力パラメーターは後程紹介するiRSI関数で使用します。
input int RSIPeriod = 14;(RSIで使用される期間を指定する入力パラメータ)
input double LevelUp = 70.0;(RSIで70以上の時)
input double LevelDown = 30.0;(RSIで30以下の時)
カスタムインディケーターのバッファ
double BuyBuffer[];(買いシグナルのデータを保存するための配列、この配列を使って、チャート上に買いシグナルを表示)
double SellBuffer[];(売りシグナルのデータを保存するための配列、この配列を使って、チャート上に売りシグナルを表示)
バッファは「メタトレーダー4でプログラムを作ってみよう」で詳細を確認する事が出来ます。
カスタムインディケーターの初期関数
int OnInit() (カスタムインディケーターの初期化を行う関数)
{
SetIndexBuffer(0, SellBuffer);(0番目のインディケーターのバッファに SellBuffer 配列を設定)
SetIndexStyle(0, DRAW_ARROW); (0番目のインディケーターに矢印の描画スタイルを設定)
SetIndexArrow(0, 233);(0番目のインディケーターに矢印コード233(表示する数)の矢印を設定)
SetIndexLabel(0, “Sell Signal”);(チャート上でインディケーターの0番目のバッファに対して説明的な名前を表示することが出来る)
SetIndexBuffer(1, BuyBuffer);(1番目のインディケーターのバッファにBuyBuffer配列を設定)
SetIndexStyle(1, DRAW_ARROW);(1番目のインディケーターに矢印の描画スタイルを設定)
SetIndexArrow(1, 234);(1番目のインディケーターに矢印コード233(表示する数)の矢印を設定)
SetIndexLabel(1, “Buy Signal”);(チャート上でインディケーターの1番目のバッファに対して説明的な名前を表示することが出来る)
return(INIT_SUCCEEDED);カスタムインジケータの初期化関数 OnInit が正常に完了したことを示すために使用される戻り値
}
SetIndexStyleは「MT4でEA自作しちゃお~」で詳細を確認する事が出来ます。
カスタムインディケーターの計算関数
OnCalculate関数に関してはこの様な形(引数は10つ)だと覚えるだけで問題ありません。
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[])(価格バーごとのスプレッド(売値と買値の差)を格納する配列)
{
int limit = rates_total – prev_calculated;(現在のチャートに表示されている価格バーの総数-前回のOnCalculate関数が計算済みとして処理した価格バーの数)
OnCalculate関数は「自動売買を作ろう」で詳細を確認する事が出来ます。
最終的な計算
最終的な計算式はプログラム経験者なら分かると思うのですが、初心者の方はifやfor等の演算子や<や++等の処理は分からないと思います。
<や++等の演算子は「フランのなるほどMT4」で詳細を確認する事が出来ます。
ifやfor等の処理は「フランのなるほどMT4」で詳細を確認する事が出来ます。
最終的な計算が一番重要になります。上記の設定の中で分からない事が1つでもあれば計算の意味が理解できないので、設定をを理解してから確認しましょう。
if(prev_calculated > 0)
limit++;
for(int i = 0; i < limit; i++){
double rsiValue = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);
SellBuffer[i] = EMPTY_VALUE;
BuyBuffer[i] = EMPTY_VALUE;
if(rsiValue > LevelUp)
SellBuffer[i] = High[i] + (Point * 5); // キャンドル高値の上に売りシグナル
if(rsiValue < LevelDown)
BuyBuffer[i] = Low[i] – (Point * 5); // キャンドル安値の下に買いシグナル
}
return(rates_total)
;
}
SellBuffer は、売りシグナルを保持するためのバッファです。EMPTY_VALUE を SellBuffer に設定することで、特定のバーに売りシグナルが表示されないことを示します。
この設定は、RSIの値に基づいてシグナルを生成する際に、特定の条件を満たさないバーにはシグナルを表示しないようにするために使用されます。BuyBuffer についても同様です。
(Point * 5); は、売りシグナルや買いシグナルを表示する際に、キャンドルの高値や安値から少し離れた位置にシグナルを表示するために使用される値です。
RISでサインを出す際はiRSI関数を利用します。
iRSI関数は既に用意されている関数でMQLから呼び出す事で使用する事が出来ます。
関数の中身は「iRSI(通貨ペア名, 時間足, 計算期間, 適用価格, シフト数)」の様になります。
通貨ペア名
通貨ペア名を文字列で指定、NULLを指定すると表示チャートの通貨ペアに
時間足
整数または定数で指定
時間足 | 整数 | 定数 |
---|---|---|
1分足 | 1 | PERIOD_M1 |
5分足 | 5 | PERIOD_M5 |
15分足 | 15 | PERIOD_M15 |
30分足 | 30 | PERIOD_M30 |
1時間足 | 60 | PERIOD_H1 |
4時間足 | 240 | PERIOD_H4 |
日足 | 1440 | PERIOD_D1 |
週足 | 10080 | PERIOD_W1 |
月足 | 43200 | PERIOD_MN1 |
集計期間
計算する期間(ローソク足の本数)を整数で指定
適正価格
適正価格を整数または定数で指定します。
適正価格 | 整数 | 定数 |
---|---|---|
終値 | 0 | PRICE_CLOSE |
始値 | 1 | PRICE_OPEN |
高値 | 2 | PRICE_HIGH |
安値 | 3 | PRICE_LOW |
中間値:(高値+安値)/2 | 4 | PRICE_MEDIAN |
平均値:(高値+安値+終値)/3 | 5 | PRICE_TYPICAL |
加重平均値:(高値+安値+終値+終値)/4 | 6 | PRICE_WEIGHT |
return(rates_total)はOnCalculate関数の戻り値になります。
MT4インジケーター倉庫のコードを活用しよう
チャットGPTによる学習方法に慣れてきたら、MT4インジケーター倉庫を活用しましょう。MT4インジケーター倉庫のコードは無料配布されており、二次配布も可能になっています。
インジケーター倉庫の中には「サインツール」と言うカテゴリーがあり、様々なサインツールのコードを無料で貰う事が出来ます。コードの中身も見る事ができるので、かなり勉強になります。
MT4インジケーター倉庫から気になるサインツールを見つけます。
コードをダウンロードします。
念のため、サインツールが動作するか確認します。
ダウンロードしたファイルをメタエディターで開きます。ファイルを開くと中身を全て知る事が出来ます。
次にダウンロードしたファイルを全てチャットGPTに読み込ませます。
読み込ませるときは初めに「以下のコードを覚えて」と書いておきましょう。
コードの中で分からない部分があったら、チャットGPTに分からない部分だけを張り付けて「分かりやすく教えて」と書けば、本当に分かりやすく教えてくれます。