fc2ブログ

09 « 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 11

不労所得で生活できるのか?

主にMT4関連のツールやEAを作ってます。 夢の自動集金マシン(?)は存在するのか・・・。

たまにはEA作成講座でも・・・その3 

たまにはEA作成講座でも・・・その2の続きです。

メール送信関数SendOrderMail()を解説したいと思います。

またまたコードにバグがありました。m(__)m

void SendOrderMail(int ticket, bool bOpen)
{
.
.
.
body = body + "Price:" + DoubleToStr(OrderClosePrice(), MarketInfo(OrderSymbol(),MODE_DIGITS)) + "\r\n";
if(!bOpen){
body = body + "Swap:" + DoubleToStr(OrderSwap(), MarketInfo(OrderSymbol(),MODE_DIGITS)) + "\r\n";
body = body + "Profit:" + DoubleToStr(OrderProfit(), MarketInfo(OrderSymbol(),MODE_DIGITS)) + "\r\n";
}
.
.
.
}


の部分ですが、

void SendOrderMail(int ticket, bool bOpen)
{
.
.
.
if(bOpen){
body = body + "Price:" + DoubleToStr(OrderOpenPrice(), MarketInfo(OrderSymbol(),MODE_DIGITS)) + "\r\n";
}else{
body = body + "Price:" + DoubleToStr(OrderClosePrice(), MarketInfo(OrderSymbol(),MODE_DIGITS)) + "\r\n";
body = body + "Swap:" + DoubleToStr(OrderSwap(), MarketInfo(OrderSymbol(),MODE_DIGITS)) + "\r\n";
body = body + "Profit:" + DoubleToStr(OrderProfit(), MarketInfo(OrderSymbol(),MODE_DIGITS)) + "\r\n";
}
.
.
.
}


と、しないと建値が正しく取得できませんね。

---------------------------------------------------------------------

以下、SendOrderMail()の解説です。

まず関数の宣言、void SendOrderMail(int ticket, bool bOpen)ですが、

voidキーワードは、この関数が値を返さないという意味です。

例えばstart()関数にはintが付いているので整数型を返しますよという意味になります。

SendOrderMailは関数名でticket、bOpenは仮引数でそれぞれint(整数型)、

bool(論理型)です。

この関数を呼び出すとき、例えばSendOrderMail(123, false)と記述すれば、

SendOrderMail()関数内でticket、bOpenを参照したとき、それぞれの値は123、falseとなります。

メールを送信するときに、オーダーのチケット番号から、

オーダー時刻、建値、決済値、利益等の情報を取得する目的で、

呼び出し側からticketにチケット番号を渡しています。

bOpenにはオープン時のメール(true)なのかクローズ時のメール(false)なのかを

渡しています。

int modeについてですが、OrderSelect()関数の第3引数で、

現在ポジション(MODE_TRADES)からオーダーを取得するのか

決済キャンセル済み(MODE_HISTORY)からオーダーを取得するのか

を渡す必要がありますが、その値を格納する目的の整数型変数の宣言です。

string subjectは、メールの件名を格納する文字列型変数の宣言です。

if(bOpen){でオープン時のメールなのか、決済時のメールなのかを判断しています。

オープン時のメールの時は、bOpenはtrueで呼ばれるので、

mode = MODE_TRADESで現在ポジションからオーダーを取得、

subject =OrderOpenMailSubjectでメール件名は、OrderOpenMailSubjectプロパティ値を

使用するという事になります。

bOpenがfalseの場合は、mode = MODE_HISTORYでオーダー取得は履歴から、

subject =OrderCloseMailSubjectでメール件名は、OrderCloseMailSubjectプロパティ値を

採用することになります。

続く・・・・。

いつも応援ありがとうございます。m(__)m
スポンサーサイト



2011/10/17 Mon. 09:51 | trackback: -- | comment: -- | edit