新しいEA(自動売買)を動かし始めると、どうしても、ポジションの取り方や決済のしかた、SLのトレールなどをタイムリーに知りたくなります。
EA自体に、メールお知らせ機能があれば、それをONにするだけなのですが、通常は、まわしっぱなしにすることが前提ですので、そのような機能はついていないことがほとんどです。
今回は、ひとつの口座でポジションが変化するたびにお知らせしてくれるインジケータを作成します!
2021年3月、インジケーターダウンロードできるようにしました。ただし、2019年上旬にFXの取引をやめてしまったので、その頃のmt4での動作確認しかできていません。それでもよろしければダウンロードしてみてください。また、正常動作するかどうかを含め、有益情報等ありましたら、コメントで残していただけると幸いです。
(目次)
汎用性の高い、お知らせインジケータをみつけてしまった
インジケータを作るとき、私は、まず無料のそれらしきインジケータがないか探します。
たいていの場合、そこそこ欲しい機能のものは、すでに世の中にあるのですが、どんぴしゃのものは、やはり自分で作らないとありません。
たまに、運がいいと、うまく改変できそうなmq4(ソース)を入手できることがあります。
今回は、ときどき私が参考にさせていただいているfaiさんのブログに、ソースがありました。
EAがポジションを操作したらアラートを出す。インジケータです。
ほんとうに、よくできていて、感謝感激です。
さらに!改変、再配布、商用利用すべてOKとコメント欄にありましたので、早速自分仕様に改変していきたいと思います。
※faiさんが提供してくれたのは2009年のようですから、MT4もそれからだいぶバージョンアップされていて、普通にコンパイルエラーが出る箇所があるので、記載しておきます。
- 保有ポジションをチェックする箇所ですが、
OrderSelectがif文で構成されていなかったので、このように修正しました。
————————————————
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) == false) break;
————————————————
初めてEAを作ったときに、変だ・・と感じましたが、どこかの誰かのHPかブログにも、このOrderSelectがif文で返り値チェックの形にしないとうまく稼動しなくなった、と記載されており、オマジナイ的なものだと捉えています。 - int init()の最後に、
—————————
return(INIT_SUCCEEDED);
—————————
を追記しました。 - エラーが出た関数の最後に、
—————————
return(0);
—————————
を追記しました。
これで、とりあえず、コンパイルOKになります。
メール送信可能にしてみる
ソースの変更
faiさんのインジケータは、アラートと、ターミナルウインドウにメッセージを残すものになっていましたので、ここを、メール送信に変更しました。
ご親切に、ソース内の変更箇所に
// メールを送りたいなら以下のかんじ
と、コメントが書いてあり、楽々クリア。
ちなみに、アラートやメールを出したいポイントで以下のように記述すればOK。
(msgには、表示させたい文字列を格納しておきます。)
アラートは
————————————–
Alert(msg);
————————————–
ターミナルウインドウのエキスパートタブにメッセージを残すのは
————————————–
Print(msg);
————————————–
メールは
————————————–
SendMail(“title”+msg,msg);
————————————–
MT4の各チャートウインドウ左上にコメントするには
————————————–
Comment(msg);
————————————–
などです。初歩的なことですが、一応。
yahoo!メールを介してのMT4設定方法
この後、MT4のメール送信設定をします。
EA搭載のMT4はVPSで稼動させていますし、今までVPSのMT4は回しっぱなし前提でしたから、今回、メール送信設定しなければなりませんでした。
私、恥ずかしながら通常携帯するのは、スマホではなくガラケーなので、いまだにメール送信でやっております。
(スマホやiPhoneの場合は、MetaQuotesサービスを利用して通知してもらうことができます。その場合は、MT4-[ツール]-[オプション]-[通知機能]のパネルを利用してください。あ、もちろん、メール送信も可能です。)
メール受信できるようにするための設定ですが、
yahooメールを利用する場合、Yahoo!メールの設定確認をします
Yahoo!メール画面の右上-[設定・その他]-[メールの設定]-[POP/IMAPアクセス]-[ブラウザーアクセスとPOP/IMAPアクセス]-[設定情報]
これで、POPアクセス設定情報が確認できます。
設定情報の内容を利用しますから、ブラウザはそのままにして、次はMT4側の設定です。
MT4-[ツール]-[オプション]-[E-メール]パネルで以下のように設定します。
————————————-
- 有効にする、にチェック
- SMTPサーバー:smtp.mail.yahoo.co.jp:586
- SMTPログインID:yahoo!のログインID
- SMTPパスワード:yahoo!のログインパスワード
- 発信元:yahoo!メールアドレス
- 送信先:自分の携帯メールアドレス
————————————-
テストボタンを押して、
携帯に”Test message This is a test message.”というメッセージが送信されたらメール設定完了です。
ためしに現在稼動しているEAに載せてみたところ、
エントリー、トレール、決済のたびにメールが届きました。誰もが通る初歩的な設定なのですが、躓くとなかなか抜け出せないことも多いので、一つ一つ、うまくいくとうれしいものです。
軽いインジケータにするために
エントリーと決済だけ知りたい
今回は、リアルタイムにエントリーと決済を知りたいのですが、
EAにインジケータを載せると、重くなりますし、VPSのメモリの消費もするようです。ですので、極力不要な動きは省きたいと思い、不要な機能や、そのためのソースは削除してみました。
これは、ソースを良く見て、OPENとCLOSEに関する箇所のみを残せばいいだけです。また、メールの文章の中にSymbol()を追加して、どの通貨ペアに入ったかわかるようにします。
ひとつの通貨ペアにインジケータをセットするだけで口座内の他通貨(すべて)のエントリーも知らせてほしい
現在、ひとつの口座内に複数通過ペアがあり、同時に稼動しているので、どの通貨ペアでもエントリと決済が行われたらメールで知りたいと思っています。
そこで、現状は
- インジケータをセットした通貨ペアのポジションについての変化をお知らせしてくれる
- マジックナンバーの指定もできるが、指定しなくてもできる
と、なっていますので、これを
- インジケータをセットするチャートは任意のひとつ通貨ペアのみでOK
- マジックナンバーの指定はなしに
に、変えました。
シンボルのチェックとマジックナンバーのチェックの箇所を削除すればOKです。
本当は、メッセージ内容を通貨ペア、売買、エントリー値、SL値、TP値にしたいのですが、今回の用途と外れて、少しめんどくさそうだったので、やめました。
オリジナルのままでは、メッセージ内容は、
- 現在の保有ポジション数
- 今回のアクションで何ポジションエントリーまたは決済したか
が分かるようになっています。それで十分です。
ちなみに、チャート上に、EAが行ったエントリー・決済を描画するインジケータもありますので、リアルタイムに知る必要がない場合は、そちらのインジケータのほうが使い勝手がよいでしょう。
コメント
このようなエントリーでメール配信されるインジケーターがあると便利だと思いました。
譲っていただけないでしょうか?
よろしくお願いいたします。
はじめまして
最近EAを使い出して、EAのポジションを持ったらメールするインジケータを探して
こちらに来ました。
オリジナル版をダウンロードして書き換えて試みましたが上手くいかず
可能であれば、「エントリーと決済だけ知りたいインジ」を配布して欲しいのですが
いかがでしょうか?
宜しくお願いします。
はじめまして。
本当に困っている部分だったので、素晴らしいインジカスタムのご紹介をありがとうございます。
なんとか自力でエラーがゼロになる所までいけました。
本当にありがとうございます!
しかし、管理人様の軽量化をどうしても実現できません。
もしもよろしければmq4の配布などを希望させて頂きたいのですが、可能でございますでしょうか?
返信遅くなってごめんなさい。コメントにまったく気づかず申し訳ありませんでした。配布の件ですが、もともとfaiさんのものですし、faiさんは配布・再配布OKとしていただいてありましたので。
[…] インジケータ […]