ここでは、MetaTrader4のEAやインジケーターにメール発信機能を搭載する方法を解説します。
MT4でメール送信設定がまだの方は、記事【[MT4設定]メール機能の設定方法】を参考に設定してください。
SendMail()関数を利用する
Dr.EA
今回解説するコードがこちらじゃぞい
static int last_send_bar = 0; // 前回メール送信時のローソク足の数 if (last_send_bar != Bars) // ローソク足の数が更新した場合 { // メールタイトル string subject = "SendMail Test"; // メール本文 string body = "【" + Symbol() + (string)Period() + "】\n"; body += "ローソク足合計: " + (string)Bars + "本"; SendMail(subject, body); // メール送信 last_send_bar = Bars; // メール送信時のローソク足の数を代入 }
上記のコードをEAのOnTick()関数内や、インジケーターのOnCalcutate()関数内に追加することで、例えばUSDJPYの1分足で実行するとローソク足が更新するたびに次のようなメールが送信されます。
件名:SendMail Test 本文: 【USDJPY1】 ローソク足合計: 201912本
SendMail()関数について
SendMail()関数について
SendMail()関数の()括弧内は次のように指定します。
SendMail(件名, メール本文)
件名
件名を文字列で指定します。日本語文字を使用すると文字化けする場合があるのでアルファベットを使用することをおすすめします。
メール本文
メール本文を文字列で指定します。改行には「\n」を使用します。
ストラテジーテスターでは、SendMail()関数は実行されません。
あとがき
ティック毎にSendMail()関数が実行されるような場合、メール送信キューがいっぱいになってエラーが発生するので、注意しましょう。
では、今回はこのへんで^^
はじめまして。
まだEAをかじって間もない初心者です。
慶次さんのブログ本当に助かります。
勉強になります。
そこで、質問?といえば厚かましいのですが、
「エントリーして足が何本経てば決済する」
というような決済方法はどのような考えをすればよいのでしょうか。
いろいろ調べてみたりするのですがわかりません。
よろしくお願いします。
META4″さん
こんにちわ!
今回の記事のように、エントリしたときにバーの番号を記憶させ、
バーの番号が、その記憶したバー+何本以上となったら、
決済するという文でできると思いますよ^^
慶次さん、こんにちは。
アドバイスありがとうございます。
何とか解決できそうです。
それにしても、プログラムにはわからない単語ばかりで初心者には大変です。
これからも、いろんな記事
よろしくお願いします。
META4″さん
こんにちわ!
解決できそうでよかったです^^
最初はわからない単語がたくさんですが、
慣れてくると楽になりますので、がんばりましょうね!
お世話になっております。
return(0);
の使い方が良くわからないので質問させていただきます。
メタトレーダー入門という本の説明ではstart関数を終了する時に書くとの事ですが
start関数を終了するとはどういう事なのでしょうか、
今私が想像しているのは、価格が動くたびにstart関数を読み込んで、start関数の中身が司令塔になり、start関数外のプログラムを呼び出すという事でしょうか、
たとえば
if ( Volume[0] > 1 || IsTradeAllowed() == false )
{
return( 0 );
}
という文がstart関数内にあったら、適用している時間足出来高が0か1のときだけこの文の下にある文を実行する。出来高が2以上の時はstart関数を終了して、次の価格が動くとまたstart関数が読み込まれるという事でしょうか、
また、プログラムとは上から順に読まれていく物なのでしょうか?
kakakaさん
こんにちわ!
kakakaさんの解釈はあってると思いますよ^^
本に書かれている内容につきましては、著者さんに聞くのが一番いいかと思います^^;
sendmail()関数が面白そうで実験してみました。
設定をいろいろ変化させて試みましたが
操作履歴に mail: not enough space for “Test”
と表示されてうまく動きません。
121証券に聞いても設定に誤りはないので信号は通りますと回答される
だけで前に進みません。
ちなみに以下のような設定です。
EAを有効にして Allow live Tradingにチェックを入れて
ニコちゃんマークがスマイルに変化するのを確かめました。
ツール -> オプション -> E-メール で
「有効にする」にチェックを入れました。
SMTPサーバー: pop.mail.yahoo.co.jp
この後ろに:587と入れると全く受け付けてもらえないので消しました。
SMTPログインID: 私のID
SMTPパスワード: POPのパスワードと同じものを入力
発信元: 私のPCのアドレス
送信先: ケータイのアドレス 駄目でした
私のPCのアドレスに変えても 駄目でした
「TEST」をチェック
まだ駆け出しなので理由が分からないので解決方法にたどり着けません。
どうしたらよいのでしょうか?
少し道案内をお願いできますでしょうか。
タカちゃんさん
こんにちわ!
TESTのメールは送られてきますでしょうか?
また、その他のメール機能つきEAやインディケータでも同様の状況でしょうか?
おはようございます。
TESTメールは送られてこないで
操作履歴に mail: not enough space for “Test”
となります。
Indicator や EA でも同様の現象です。
そこで、メールアドレスを変えて、gmailを使ってみましたが
同じでした。
送信先をPCに変えても同じでした。
121証券から FXCM にデモ口座を変更しても変わりません。
このことから推察すると何か書き間違いが有ると思うのですが
理解できない状態です。
よろしくお願いします。
タカちゃんさん
こんにちわ!
MT4を再インストールしてみてはどうでしょうか?
>操作履歴に mail: not enough space for “Test”
ということから、どこかメモリ一杯になっている感じですね^^;
こんにちは
MT4を全部アンインストールして、 ブローカーをFXDDに変えて
デモ口座を開いてみました。
メールの設定は以前と同様にしました。
TESTメールを送りました。
結果は何の応答もありません。
操作履歴にも何も書き込まれません。
とても楽しみにして実験を開始したのですが 駄目なようです。
12:15にTESTを送って 13:10まで何も動きが見られないのは
駄目だったのでしょう。
どうも お手数掛けました。
ありがとうございました。
タカちゃんさん
受け取り側の受信フォルダのデータを何件か削除して、
再度MT4を立ち上げテストしてみてください^^;
私も同様のエラーになりましたが、
インストールしたフォルダ直下のmailboxというフォルダの
内容を消したら送信されるようになりました。
その他色々触っていたので、これが当たりかは分かりません。