EAを作って配布する際、「一定期間だけ利用できるEAを作りたい」 「体験版として期限付きで配布したい」と考えたことはありませんか?
MT4(MQL4)では TimeCurrent() と datetime を利用することで、 EAの有効期限・利用期限を制限する仕組みを簡単に実装できます。
本記事では、EA開発者向けの技術解説として、 TimeCurrent() を使ったシンプルな有効期限チェック関数を サンプルコード付きで解説します。
実運用を保証するものではなく、 EA開発・配布時の仕組み理解を目的とした技術記事です。
TimeCurrentを使った利用期限チェック関数(MQL4)
以下サンプルソース(MQL4)の関数になります。そのままコピペでお使いください。
サンプルソース
bool CheckExpiration()
{
datetime limit = D'2025.12.31'; // ← 有効期限を設定
if (TimeCurrent() > limit)
{
Print("このEAの利用期間は終了しました。");
return false;
}
return true;
}3行目に有効期限をセットしています。この期限を過ぎるとEAが実行されない(使えない)ようになるといった感じですね。
関数の解説
とてもシンプルなつくりで、引数は今回はありません。
EAが使える場合はTrueで使えない場合はFalseが返ってきます。
EA内での使用方法(OnInitへの実装例)
具体的な使用例としては、EAが起動された際に呼び出されるOnInit()で問題ありません。
int OnInit(){
if (CheckExpiration()==false){ //有効期限チェック関数
// 自動売買を止める
return(INIT_FAILED);
}
// 他の初期化処理
return(INIT_SUCCEEDED);
}
void OnTick(){
~~~~
}
//有効期限チェック関数
bool CheckExpiration()
{
datetime limit = D'2024.12.31'; // ← 有効期限を設定
if (TimeCurrent() > limit)
{
Print("このEAの利用期間は終了しました。");
return false;
}
return true;
}これだけでOKです。

こんな感じでMT4の操作履歴に1文が表示されEAが使えないようになっています。
画面上に利用期限終了のメッセージを表示する方法
操作履歴だけだと、利用者が気づかず問い合わせが来る可能性があるのでもっとわかりやすくチャート上に表示する事も勿論可能です。
int OnInit(){
//ラベルオブジェクトの作成
ObjectCreate(0, "objKigen", OBJ_LABEL, 0, 0, 0);
// 座標のアンカー位置
ObjectSetInteger(0, "objKigen" ,OBJPROP_ANCHOR, ANCHOR_LEFT_LOWER);
// X位置
ObjectSetInteger(0, "objKigen", OBJPROP_XDISTANCE, 50);
// Y位置
ObjectSetInteger(0, "objKigen", OBJPROP_YDISTANCE, 50);
// 色
ObjectSetInteger(0, "objKigen", OBJPROP_COLOR, clrRed);
// 読み取り専用
ObjectSetInteger(0, "objKigen", OBJPROP_READONLY, true);
// 選択不可
ObjectSetInteger(0, "objKigen", OBJPROP_SELECTABLE, false);
// フォント名
ObjectSetString(0, "objKigen", OBJPROP_FONT, "MS ゴシック");
// フォントサイズ
ObjectSetInteger(0, "objKigen", OBJPROP_FONTSIZE, 18);
if (CheckExpiration()==false){ //有効期限チェック関数
ObjectSetString(0, "objKigen", OBJPROP_TEXT,"このEAの利用期間は終了しました。");
return(INIT_FAILED);
}
// 他の初期化処理
return(INIT_SUCCEEDED);
}
void OnTick(){
~~~~
}
//有効期限チェック関数
bool CheckExpiration()
{
datetime limit = D'2024.12.31'; // ← 有効期限を設定
if (TimeCurrent() > limit)
{
Print("このEAの利用期間は終了しました。");
return false;
}
return true;
}
これでEAが使えなくなった事が利用者にもわかりやすくなりますね!
注意事項とまとめ
以上、『TimeCurrentを使ったEAの有効期限・利用期限制限方法』でした。本関数をご使用の際は、動作確認等を行い自己責任でお使いください。
EAの利用期間を設定することで、不正な再配布や古いバージョンの使用を防げます。体験(デモ)版や限定公開用EAにも非常に有効です。特定日以降に機能を停止させたい場合は、今回紹介したような「利用期間制限関数」をぜひ活用してみてください。ユーザーにわかりやすいエラーメッセージをチャート上に表示することで、トラブル回避にもつながります。
✅ 今回のロジックをベースにしたEAサンプルも多数公開中
今回紹介したようなEAの売買ロジック・考え方をベースに、
当サイトではさまざまなFX自動売買EAのサンプルコードを公開しています。
ロジックの違いや設計の考え方を比較しながら、
自分に合ったEA構成を探したい方はぜひチェックしてみてください。
📊 EA運用・検証フェーズに進みたい方へ
今回のような仕組みを理解したうえで、
「実際にどのEAが安定しているのか」、「検証データではどんな差が出ているのか」
を確認したい方は、以下の記事も参考になります。
EA開発初心者向けに、今後も実践的に使えるMQL4関数や実装例を紹介していきます。
気になる機能やロジックがあれば、用途別に整理した関連記事もぜひあわせてご覧ください。









コメント