MT4上で動くFXの自動売買システム「EA」(エキスパートアドバイザー)。
これを自作するとなると、
「複雑なプログラミングスキルが必要になるんじゃないの??」
と思われるかもしれませんが、実は以外にカンタンに作れてしまいます。
ぼくはもともとプログラミングのことなど全く右も左もわからないような人間でした。
C言語?変数?関数??なにそれ〜??wという感じ笑
今でもエクセルのショートカットやマクロなども全然知らないレベルです。
そんなぼくでも1週間くらいで基本的な「注文」「決済」「執行条件」などのコードをかけるようになるほど、EAのプログラミングはけっこうカンタンなんです。
ですので今回は「EA作りの超ざっくりとした説明」と題して、極力難しいコードなどは使わずに基本的なEAの概要を説明できたらと思います。
EAのプログラムはカンタン!まずは注文の「OrderSend」を覚えよう
まず、EAのプログラムというのは、当たり前ですがFXのトレード、つまり「買って」「売って」を自動で行わせるものです。
ちなみにFXトレードは「買い」からでも「売り」からでもトレードをスタートできるものですので、正しくは「ポジションの取得」と「手仕舞い」ですね。
この2つのコードは、
ポジションの取得=OrderSend()
手仕舞い=OrderClose()
というもの。
それぞれの後ろに()が付いていますね?
この()の中に、いくらで買うのか、指値なのか、成り行きなのか?などの条件を入れられるのです。
日本語でわかりやすく書くと、だいたいこんな感じで()内に条件を書いていきます。
たとえば一番シンプルな指値の注文の場合、
ドル円をトレードしているとして、110円で1ロット指値で買う場合、
OrderSend(Symbol(),OP_BUYLIMIT,1,110,);
という感じ。
このコードはストップロス値や利食い値の数字が入っていないので、実際にはエラーが出てしまうのですが、今はわかりやすさを重視したいのでバッサリ省きました。
中身を一つずつ見ていくと、
Symbol()
OP_BUYLIMIT
1
110
という要素が()の中に入っていますね?
Symbol()というのは、MT4上でEAのプログラムを動かしているチャート上の通貨ペアのことです。
ドル円なら「USDJPY」と書いても大丈夫です。
なら最初からUSDJPYって書けよ!なんだよSymbol()って!と思ったかもしれませんね…汗
でもSymbol()と書いておくことで、ユーロドルやユーロ円など、トレードしたいチャートにEAを走らせた時にMT4側が自動でチャート上の通貨ペアに対応してくれるのです。
なので、とりあえずよほど「俺は絶対に一生ドル円しかトレードしない!!」という人以外はSymbol()と書いておくのが便利です。
OP_BUYLIMITとは、オペレーションバイリミット、つまり指値で買い注文ですよという意味です。
で、次の「1」はロット数。
もちろん1ロットが大きすぎるようなら0.1でも0.01と書いてもOK。業者によって注文できる最小ロットは変わってきますので、あなたがお使いの業者の最小ロット値を確認しておきましょう。
で、最後の「110」
もうお分かりですね、そう、110円で買ってねということです。
これもわかりやすいように「110」と書きましたが、もちろん細かく110.050などと指定できます。
このOrderSendには他にもスリッページの値の設定など、全部で11項目の数字を入れていくのですが、(↓参考)
引用元:https://docs.mql4.com/trading/ordersend
なにやら怪しげな英単語や数列が並んでいて
「うわ〜めっちゃプログラミングっぽいじゃん!ムリ〜」
と、ビビってしまうかもしれませんね….汗。
でも今はほとんど無視で大丈夫。w
初心者のあなたが、今、とりあえず覚えておけばいいのは
EAには「OrderSend()」というコマンドがあって、後ろの()の中に値段などの条件を入れておけばそれに沿った注文ができる!
ということ。
これをまず知ったということでもかなりの進歩です。
例えとして、買いではなくて売りからトレードしたかったら、
OrderSend(Symbol(),OP_SELLLIMIT,1,110,);
です。
ざっくりですが、これで「110円で売り」の指値注文が出せる感じです。
ね、けっこうカンタンでしょう?
では、次にこの110円の注文が無事に約定したとして、手仕舞う時のコマンド(関数)も紹介しますね。
※「関数」というのは、数学アレルギーのあるぼくのような人間からすると、言われただけでビビってしまいますが、要は「コマンド」です。
何かを自動で行ってくれる「命令文、コマンド」的なことを「関数」というのですな。
ぼくは関数っていわれると、条件反射的に「なんか計算をとかなくちゃいけないのかな??」と思ってビビってしまいますが、プログラミングの世界ではあなたが計算をする必要はありませんのでご安心をw
複雑な計算はコンピューターがやってくれます。
あなたは「コマンド、命令文」を書くだけでOK。
手仕舞いは「OrderClose」関数を使おう!
手仕舞いは
OrderClose()
という関数を使います。
オーダークローズ。
オーダーを閉じる。ということですので、手仕舞いするための関数ということがわかると思います。
詳しい中身は↓
引用元:https://docs.mql4.com/trading/orderclose
という感じで、最初のOrderSend関数よりも()の中身は少ないですね!
OrderSendの時のように、スリッページの値などは一旦抜きにして、ここから特に重要な部分だけ抜き出すと、
OrderClose(ticket,1,113);
という内容になります。
113円で手仕舞いという例です。
1つずつ見ていくと、
ticketというのは、OrderSend関数が正しく実行されて注文が約定すると、その注文に対してMT4が自動で固有のチケット番号を発行してくれるんですね。
なので、そのチケット番号と同じ番号を「ticket」に入れます。
こうすることで、先ほど110円で約定させた注文をこのOrderCloseで手仕舞えるというカラクリです。
で、1というのは、ロット数。
OrderSendで1ロット注文しているので、手仕舞いも1ロットというわけです。
で、最後の113というのは、あなたもお分かりの通り、「113円で手仕舞いしようね」という条件です。
これでMT4のチャート上でドルが113円になると、注文が通って約定するという流れです。
まとめ:まずは基本の2つの関数さえ理解できればOK
注文するには「OrderSend」
手仕舞いするには「OrderClose」
この2つがMT4の自動売買で使うもっとも基本的な2つの関数です。
この2つをベースにして、あとは細かい条件などを指定していく流れです。
例えば
移動平均線より価格が上抜けしたら、、OrderSend注文!
そこから20%含み益が出たら、OrderClose発動で利確!
損切りの注文も別のOrderClose関数でちゃんと書いておく!
みたいなノリです。w
そう、1つのOrderSendと、利確用と損切り用の2つのOrderClose関数。
計3つの関数を用意していくというわけです。
どうでしょうか?
けっこうカンタンだと思いませんか?
では今回はひとまずこの辺にしておきます。
次回はif文を使った注文の執行条件、トレードルールの書き方などをざっくり解説できたらと思います!
関連記事:
⇒XMの日本語サポートが素晴らしい件。日本人スタッフとライブチャット可【MT4】
オススメFX業者。
【XMの口座開設はこちらから⇒デモ口座を開設する】
【XMでリアルFX取引口座を開設する】
手厚い日本語サポートが魅力で人気の海外FX業者がXM。
こちらからXMサポートの詳細を確認できます。
スポンサーリンク