
EA自作企画第3弾!準備がまだ!って人は先に準備しましょう!こっちのページを参照してね!

こちらのサイトのようなところへ行けば、EA自体は購入が可能です。
今回から、ついに、実際に作業…に入れると良いのですが、プログラミングなんてやったことないよ…って人も多くいるでしょう。一応、今は義務教育に組み込まれるって話ではありますが、2025年時点でこのサイト見ている人は、プログラミングなんて~って世代かと思います。
プログラミング?
コンピューターに命令して実行してもらう。ってことなんだと思います。ただ、その為の命令の文章に、色々な作法があって、また、プログラミング言語によっても作法が違ったりと、なかなかとっつきにくい部分でもあります。FP嶋も正直プログラミングはまともに習ったことありません!
ただ、結局のところ、プログラミングって、順番に実行されるだけなので、その並びと、使える関数、変数、記号、書き方がちょっと違うってだけ!慣れればどんな言語も扱えます!(たぶん)
MT4のEAに使われるプログラミング言語はMQLといいます。恐らくC言語系列…だと思いますが、良くわかりません。まぁ特に気にすることではありませんが、CとかC++とかやったことがある人は、わかりやすいみたいです。MT4にはMQL4、MT5にはMQL5が使われます。
MQL4の使い方
MT4に標準的についています。MT4が無いって人は、まずは準備編へ!

上の図の赤い丸のところをクリックすると…
↓

こんな感じの画面になるはず!
ここで、命令文を書いていって、実際に動かせる形に「コンパイル」してやればEAの完成です!
コンパイルってなんやねん!?って思うかもしれませんが、コンピューターがわかるように翻訳することだと思ってください。彼らは基本的には電気的なon・offだけで動いてるので、その形に変えています(きっと)
では、実際に触ってみましょう。
EAを作るなら…
新規作成をクリックします。

こんな画像が出てくるので、エキスパートアドバイザ(テンプレート)を選択して、次へ
そうすると、EAの名前を求められますので、お好きな名前を付けましょう。
ここでは、OnewayTraderとします。片方にしか入らない予定なので。
著作者は自分の名前がわかるようにしておけば良いと思います。もちろん本名でなくても良いですよ。
それ以外には特に操作無く、次へを選択して、完了で大丈夫です。
//+------------------------------------------------------------------+
//| OnewayTrader.mq4 | 名前
//| Copyright 2025, FPshima | 著作者
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, FPshima" 著作者
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
1 設置した時にだけ動くプログラム
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
2 設置を終了した時にだけ動くプログラム
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
3 レートが動いた時にだけ動くプログラム
}
//+------------------------------------------------------------------+
そうすると、上記のようなコードが出てきます。多少違うと思いますが、それは、EAの名称や、著作者名。1,2,3の注釈だと思います。注釈に関してはこちらで説明用に入れたものなので…
これはテンプレートなので、EAを作るうえで、必要な関数があらかじめ3つおいてあるというだけです。

プログラミングをしてみよう!
っと、その前に基本的な話。
プログラミングは上から下方向に進んでいきます。で、ずっと実行されます。ぐるぐると回っていると考えてもらうと良いかもしれません。
さらに、その中に色々と分岐があって、こんな時はこの操作、それとは違う時はあっちの操作ってのをどんどん実行していきます。
OnInit()、OnDeinit()、OnTick()ってのはそれぞれ、「最初」、「最後」、「動いてるとき」って意味です。したがって、トレードを行ってもらうプログラムはOnTick()の{}内に書いていきます。
#propertyはEA上気にする必要は無いので、無視しましょう。そういうもんだと思ってください。
で、特に問題が無ければ、OnInit()、OnDeinit()にも記載は必要ないです。
それ以外に必要なのは、宣言ということ...まぁFP嶋も良くわからないので、この単語が正しく使えているのか定かではありません!
で、使うプログラムはすべて宣言する必要があるのですが、その場で宣言しても良いし、EA全体に影響を与える位置で宣言しても良いです。
EA全体に影響を与えるのは「グローバル」、個々のプログラミング内でだけ使われるものは「ローカル」と呼びます。
グローバル?ローカル?
上から順番に実行されると言いましたが、グローバルにいるプログラムはずっと動いてます。すなわち、ローカル内ではどこでも使えます。一方、ローカル内で使われた単語は、グローバルでは使えません。
で、宣言するときは、その言葉が一体どんなものなのか。ってのを先に教えてあげる必要があります。代表的なものを見てみましょう。コンピューターに分かってもらうためのお約束です。
int ○○ → ○○は整数です
double △△ → △△は小数点以下も持っています
bool □□ → □□はtrueかfalseです
string ●● → ●●は文字列です
datetime ▲▲ → ▲▲は時間を示しています
void ×× → ××っていってるけど見えません!
ここらへんは、実際にプログラミングしていかないとわからないかもしれません。ちょっと戻って考えてみると
int OnInit()
{
//---
1 設置した時にだけ動くプログラム
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
2 設置を終了した時にだけ動くプログラム
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
3 レートが動いた時にだけ動くプログラム
}
//+------------------------------------------------------------------+
OnInit()だけ、intで宣言されて、return()がついていますよね?つまり、intで宣言しているので、returnとしてINIT_SUCCEEDEDってのが出てきます。で、このINIT_SUCCEEDEDてやつは整数なんです。ほんと、整数には見えないんですけど、MQL的には整数として存在しています。
実は、プログラミング言語ってやつは、前もって、変数や関数が宣言されていて、それをどこで使うか?ってものなんです。したがって、既に宣言されている単語はその中身の形状がintならintなんです。見えないんですけどね。したがって、INIT_SUCCEEDEDはなんかの整数が割り当てられています。恐らく0か1でしょう。他にもたくさん0,1,2、と整数がふられた単語があります。
ここでテンプレートとして宣言された単語たちはお尻に()がついていますね。これは、関数であることを意味しています。つまり、ちょっとしたプログラムであるという事。OnTick()はレートが動くたびに{}内を実行してねっていうプログラムなわけです。
何となくわかりましたか?
宣言する前につけるものもある
MT4をいじるとパラメーターを設定しないといけないインジケーターやスクリプトがあることに気が付くと思います。これらの設定をしたり、単語として宣言したものにさらなる情報の付加をすることがあります。いくつかあるのですが、本EAで使いそうなのは
「extern」
この子にはだいぶお世話になると思います。externはパラメーターとして、EAを使う時に設定が出来るようにするお約束です。したがって、この直後に宣言される単語は、EAの設定として値を変化させることが出来るようになります。
ちょっとだけプログラミングしてみよう!
という事で、さっそく、やってみましょう!
損切しない!
スワップが増える方向にだけエントリー
似たようなところでエントリーしない!
最大ポジション数を取った時にレバレッジ10倍を超えない!
今回作ろうとしているEAは上記のような条件を持っていましたね。
この部分の一部を作ってみます。
//+------------------------------------------------------------------+
//| OnewayTrader.mq4 |
//| Copyright 2025, FPshima |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, FPshima"
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern bool LongOn = true; //ロングを許可
extern bool ShortOn = false;//ショートを許可
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
~~~~
LongONとShortONってのをboolで宣言しました。MQLでのプログラミングは、一行ごとに終わる場合は、最後に「;(セミコロン)」を忘れないようにしましょう。つけないと、改行しただけで、プログラムが続いていると勘違いされます。すなわち、うまくいかなくなります。
boolは「true」と「false」です。externとしましたので、LongOnとShortOnがEAの設定としていじることが出来るようになりました。ただ、まだ設定しただけなので、これだけでロングのみになったりはしません。今後作っていきますが、このLongOnがtrueの時だけ動くようにしたりしていけば、ロングだけ~ってEAを作ることが出来ます。
では、実際に動くかどうか試したいので、MetaEditorの上部にあるコンパイルってボタンをクリックしてみましょう。特にエラーが出なければ大丈夫です。

その後、MT4で赤丸のところを、ポチっとすると下の方になんか出るんですけど、隠れているので、ターミナルってのとテスターって境目をクリックして引っ張ると大きくなります。

EA選択プルダウンで今作ったEAを選択
その後EA設定を押してみると…

設定できるようになっていますね!次回はもう少しプログラミングをすすめます!
おすすめFXアイテム
過去検証や分析はMT4かFT4、Trading viewがおすすめです。
無料が良い人はMT4で、MT4を使わせてくれる口座を使用すると良いです。おすすめはFXTF
チャート分析に毎月課金してもいいよって人はTrading viewがおすすめです。無料もあります


