バイナリーオプション

【チャットGPT活用】バイナリー・ハイローで活躍!MT4版サインツールの作り方

バイナリーオプションやハイローオーストラリアで役に立つMT4版サインツールの作り方を紹介!チャットGPTを活用することでMQL4の知識を高める事が出来ます。

このページで分かる事
  • サインツールの作成にプログラムの知識が必要か分かる
  • MT4、MetaEditorの設定方法が分かる
  • チャットGPTでサインツールが作れることが分かる
  • チャットGPTを活用した問題解決方法が分かる

MT4でサインツールを作るのにプログラムの知識は必要か

MT4でサインツールを作るのにプログラムの知識は必要か

MT4でサインツールを作るにはMQLと呼ばれるプログラム言語が必要になります。

MQL4とは

MQL4はMetaQuotes社が提供する外国為替証拠金取引用のプラットフォームである「MetaTrader4」の機能を拡張するためのプログラム言語です。MetaTrader4は2005年にリリースされましたが、MQL4による拡張性の高さが投資家からの評価を集め、10年以上経つ現在でも数多くの証券会社が対応しているという、非常に息の長い取引プラットフォームとなります。

MQL4はC++をベースに開発された言語のため、C++をはじめC#やJavaなどの開発経験があれば比較的容易に開発を行う事が出来ます。さらにMQL4の開発環境はMetaTrader4と一緒に提供されているため、MetaTrader4をインストールすれば開発環境も全て揃います。このようにプログラム開発に対する敷居の低さもMetaTrader4が長年支持され続けている理由の一つなのでしょうね。
引用:MQL4逆引きリファレンス

MQL4はC++やC#、Javaを使った事がある方なら、理解しやすい言語となっています。

理解しやすい言語なのですが、プログラム初心者の方は初めは苦労すると思います。

フランのなるほどMT4

プログラムの知識がある方も、無い方も一度確認して欲しいサイトが「フランのなるほどMT4」と言うサイトです。

このサイトではMQL4のいろいろな関数や基礎知識を学ぶ事が出来ます。

プログラム初心者の方は、初めは何をして良いか分からないと思うのですが「データ型、演算子、処理、機能、変数、定数」はどのプログラム言語でも重要になる基礎知識なので、時間がある時に覚えておきましょう。

MT4のサインツールに特化した学習サイトは少ない

MT4のサインツールに特化した学習サイトは少ない

残念なことにMT4のサインツールに特化した学習サイトは、ほとんどありません。1から10まで教えてくれるサイトがあれば良いのですが、現状見つける事は出来ませんでした。

誰かに教わる事が一番なのですが、そんな都合よくMT4のサインツールが得意な人はいません。そこでチャットGPTに頼る事にしました。

私自身、プログラムはかじった程度ですので、詳細まで答える事はできません。このページで紹介している内容自体間違いだらけかもしれません。

それでも!

完璧を求めて進めないままでいるのか、たまにおかしな回答をするチャットGPTを活用してでも前に進むのかはあなた次第だと思います。

完璧を求める方はこのページを閉じて、スクールに通う事をおすすめします。

チャットGPTにサインルーツを作ってもらった

チャットGPTにサインルーツを作ってもらった

チャットGPTに以下の様な質問をして、サインツールのコードを書いて貰いました。

質問内容
MT4でRSIが70以上の時と30以下の時にサインを出すコードを教えて

チャット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でサインツールを作る為の準備方法をまとめています。MT4に関しては公式サイトからダウンロードする事が出来ない(サポート終了の為)のでFX業者からダウンロードする必要があります。

MT4をダウンロードする

まずはMT4をダウンロードしましょう。MT4のダウンロードに関しては関連記事をご確認下さい。※当サイトではFXTFのダウンロードを推奨しています。

ハイローオーストラリアとMT4
ハイローオーストラリアとMT4での勝ち方!ダウンロードや設定方法も紹介ハイローオーストラリアとMT4を併用する事で分析力が上がり勝率を上げる事が出来ます。ここではMT4のダウンロードから設定方法、勝ち方まで...

サインツールを作るには「MT4」と「MetaEditor」が必要になります。通常MT4をダウンロードすれば「MetaEditor」も一緒に付いてきます。

MT4-MetaEditor1

「MetaEditor」に関しては「ツール」⇒「メタエディター」を選ぶと使う事が出来ます。

MT4-MetaEditor2

MetaEditorにチャットGPTのコードを記入してコンパイルする

MT4-MetaEditor設定1

MetaEditorより「ファイル」⇒「新しいファイル」をクリックします。

MT4-MetaEditor設定2

MQLウィザード:ファイルが開きますので「カスタムインディケーター」を選択して「次へ」ボタンをクリックします。

MT4-MetaEditor設定3

ファイル名を決めます。

名前の部分は「Indicators¥」と書かれていますが「Indicators¥zakosuke」にすればzakosukeと言う名前のインジケーターファイルが作られます。

ファイルの名前はご自身が分かりやすいものでご記入下さい。

ファイルの名前を記入したら「次へ」ボタンをクリックします。

MT4-MetaEditor設定4

カスタムインジケーターのイベントハンドラは何も変更せずに「次へ」ボタンをクリックします。

MT4-MetaEditor設定5

カスタムインジケーターの描写プロパティーも何も変更せずに「次へ」ボタンをクリックします。

MT4-MetaEditor設定6

初期の設定画面が表示されます。

MT4-MetaEditor設定7

今回はチャットGPTのコードが動くか試したいので、全て記述を削除します。

MT4-MetaEditor設定8

ひとつ前の項目で紹介した、チャットGPTのコードを貼り付けます。

MT4-MetaEditor設定9

コードを貼り付けた後にコンパイル」ボタンクリックします。

MT4-MetaEditor設定10

エラーが無ければ無事にコンパイルが完了しています。

コンパイルをする事でプログラムの起動が可能になります。プログラムはMetaEditorで作りましたが、コンパイルすると、MT4の本体に「zakosuke」ファイル出来上がります。

MT4-MetaEditor設定11

MT4本体の「ナビゲーター」内の「インディケーター」に「zakosuke」ファイルがある事を確認します。

※ファイル名は、各自が付けたファイル名になります。

「zakosuke」をダブルクリックします。

MT4-MetaEditor設定12

ポップアップが出てきますので「OK」ボタンをクリックします。

MT4-MetaEditor設定13

矢印が出ている事を確認します。

MT4-MetaEditor設定14

RSIを起動して70以上の時と30以下の時に矢印が出ているか確認します。

簡単な指定であればチャットGPTだけでも書けることが証明されました。

チャットGPTは完璧では無い

チャットGPTが書くプログラムコードは動く時もあれば動かない時もあります。

チャットGPTを使用した場合、プログラムコードを「MetaEditor」に張り付けて「コンパイル」します。

MT4-MetaEditor設定15

エラーが出た場合は、エラー箇所を修正する必要があります。

※エラーがを取り除かないとコンパイルする事が出来ません。

しかし、プログラムの知識が無い方はエラーの修正はほぼ不可能と言えます。

その様な場合は、コンパイル出来るコードが出るまで、チャットGPTに書き直してもらいます。やり方としては「同じ質問をする」か「別パターンで書いて」とチャットGPTに依頼します。

これに関してはガチャをしている様な感じですが、チャットGPTはなかなか優秀なので、何回か書きなおして貰えばコンパイルが成功します。

※2024年6月時点でgoogleのGeminiはお勧めできません。コンパイルエラーのコードばかり教えてくれるので、使い物になりません。

チャットGPTを薦める理由

チャットGPTを薦める理由

チャットGPTのプログラムは完璧とは言えません。それでもチャットGPTを使う事をお勧めする理由は「挫折を防止」するためです。

MQL4を学んでいけば、いずれはサインツールを作れる様になります。しかし、多くの方はそこまで辿り付けません。

何故なら、どの様に学習すれば良いかが分からないからです。

MQL4を紹介しているサイトは確かにありますが、基礎だけ学んでもイメージが湧かなく、途中でつまらなくなり高確率で挫折します。

ではどうすれば良いか!

プログラムを学ぶ際に為になるのが「動くプログラムコード」を見る事になります。チャットGPTを使えば動くプログラムコードを見る事が出来ます。

動くプログラムコードをいくつも見る事で、知識が増えていきます。

サインツールの作り方を紹介しているサイトを見る事は非常に重要です。しかしサインツールの作り方を紹介しているサイトのコードは限られています。

限られたコードを見た後、都合よく次に知りたいコードが紹介されているサイトが見つかるとは言えません。多くの方は、都合が悪くなると立ち止まります。

作りたいサインツールのコードが紹介されているサイトが見つからない!

ならチャットGPTに動くコードを書いてもらおう!

プログラムの最大の敵は止まる事による挫折です。チャットGPTを活用すれば挫折する理由はなくなるので、うまく活用される事をお勧めします。

チャットGPTを使ったMQL4の学習方法

チャットGPTを使ったMQL4の学習方法

チャットGPTにプログラムコードを書いて貰い、張り付けるだけではいつまでたってもMQL4を覚える事はできません。

プログラムを上達するにはプログラムの解析が必要なります。

先ほど使用したチャットGPTのコードは、初めてMQL4を使う人にとてはちんぷんかんぷんだと思います。

その分からない気持ちをチャットGPTにぶつけましょう。

チャットGPTはどんなに質問しても嫌な顔をする事はありません。

本気で解析する気がある方は、分からない箇所を全て質問される事をおすすめします。

質問の例
#property indicator_chart_window を簡潔に教えて

かなり根気がいりますが、分からない箇所を無くすことで、プログラムがどの様に動いているのかを理解する事が出来ます。

チャットGPTは大まかな内容を知る際に役に立ちますが、詳細を知るには専門のサイトを確認した方が良いと思います。

確認の手順
  1. ①チャットGPTに質問する
  2. ②更に詳細を知りたい場合は、専門サイトを探す

全てを専門サイトで知ろうとすると、頭がこんがらがる可能性があります。まずは大まかにチャット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関数の戻り値になります。