MQL4MQL5 EA(エキスパートアドバイザー) 資金管理・リスク
今日の確定損益を計算したい
結論:今日(サーバー時刻)の 0 時以降に決済した取引の損益を、履歴から合計します。
考え方
1日の損失が一定を超えたらその日は取引をやめる、といったルールでは、今日の確定損益が必要です。今日の 0 時(サーバー時刻)は iTime(_Symbol, PERIOD_D1, 0) で取得できます。MQL4 は決済時刻が今日以降の決済済み注文を、MQL5 は今日の決済ディールを合計します。
- 今日の 0 時(サーバー時刻)を求める
- その時刻以降に決済した、この EA の取引を履歴から探す
- 損益+スワップ+手数料を合計する
そのまま使えるコード
MetaEditor の「新規作成」で「エキスパートアドバイザ(テンプレート)」を選び、できたファイルの中身をすべてこのコードに置き換えてコンパイル(F7)します。ファイルは Experts フォルダに保存され、ナビゲーターからチャートにドラッグして使います。
MQL4(MT4)
#property strict
// 今日の確定損益を表示する EA(MT4)
input int InpMagic = -1; // マジックナンバー(-1 ならすべて)
double TodayProfit()
{
datetime today = iTime(_Symbol, PERIOD_D1, 0);
double sum = 0;
for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
{
if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if(OrderType() > OP_SELL || OrderCloseTime() < today) continue;
if(InpMagic >= 0 && OrderMagicNumber() != InpMagic) continue;
sum += OrderProfit() + OrderSwap() + OrderCommission();
}
return sum;
}
int OnInit()
{
return INIT_SUCCEEDED;
}
void OnDeinit(const int reason)
{
Comment("");
}
void OnTick()
{
Comment("今日の確定損益:", DoubleToString(TodayProfit(), 0), " ", AccountCurrency());
}MQL5(MT5)
// 今日の確定損益を表示する EA(MT5)
input long InpMagic = -1; // マジックナンバー(-1 ならすべて)
double TodayProfit()
{
datetime today = iTime(_Symbol, PERIOD_D1, 0);
double sum = 0;
if(!HistorySelect(today, TimeCurrent() + 60)) return 0;
for(int i = HistoryDealsTotal() - 1; i >= 0; i--)
{
ulong d = HistoryDealGetTicket(i);
if(d == 0) continue;
long entry = HistoryDealGetInteger(d, DEAL_ENTRY);
if(entry != DEAL_ENTRY_OUT && entry != DEAL_ENTRY_INOUT && entry != DEAL_ENTRY_OUT_BY) continue;
if(InpMagic >= 0 && HistoryDealGetInteger(d, DEAL_MAGIC) != InpMagic) continue;
sum += HistoryDealGetDouble(d, DEAL_PROFIT) + HistoryDealGetDouble(d, DEAL_SWAP) + HistoryDealGetDouble(d, DEAL_COMMISSION);
}
return sum;
}
int OnInit()
{
return INIT_SUCCEEDED;
}
void OnDeinit(const int reason)
{
Comment("");
}
void OnTick()
{
Comment("今日の確定損益:", DoubleToString(TodayProfit(), 0), " ", AccountInfoString(ACCOUNT_CURRENCY));
}MT4 版・MT5 版とも MetaEditor でコンパイル(エラー・警告なし)を確認済みです。実際の口座で使う前に、デモ口座やストラテジーテスターで動作を確かめてください。
カスタマイズのポイント
- 「今日の損失が◯円を超えたら新規注文しない」にするなら、売買の条件に TodayProfit() > -上限 を足します。
注意点
- 日付の区切りはサーバー時刻です。日本時間の 0 時ではありません。
- MT4 で集計できるのは「口座履歴」タブに読み込まれている期間だけです。
- MT5 の手数料はエントリー時のディールにも付くため、ここでは決済側の分だけを足しています。












