MT4でポジションを半分決済する関数【初心者向けEAサンプル解説】

半分クローズ①
EAサンプル・ノウハウ
記事内に商品プロモーションを含む場合があります
スポンサーリンク

今回は、MT4で自動売買(EA)を作る際に便利な「ポジションを半分決済する関数」を、プログラミング初心者の方でもわかりやすく解説します。

オンラインレッスンで受講者の方から質問をいただいた内容をもとにまとめています。

はじめに

FX自動売買EAを使っていると、「利益は確保したいけど、残りのポジションでさらに利益を伸ばしたい」という場面がありますよね。

そんなときに便利なのがポジションの半分決済です。
今回紹介する関数を使えば、簡単に半分だけクローズでき、残りのポジションはそのまま運用できます。

ソースコード(コピペOK)

以下の関数をEAに組み込むだけで、半分決済が可能です。

//+------------------------------------------------------------------+
//|【関数】ポジション半分決済
//| 
//|【引数】 買いポジション or 売りポジション(OP_BUY or OP_SELL)
//| 
//|【戻値】なし
//|【備考】既に半分のポジションの場合は全決済
//|
void PartialCloseHalf(int Type,double HullLots)
{
   bool result =false;
   
   for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         // 現在の通貨ペア・同タイプの注文だけを対象
         if (OrderSymbol() == Symbol() && OrderType() == Type)
         {
            double lots = OrderLots();
            
            if(lots == HullLots){
               //半分決済
               double halfLots = NormalizeDouble(lots / 2.0, 2);  // 小数第2位で丸める(通常は0.01単位)
   
               if (halfLots >= MarketInfo(Symbol(), MODE_MINLOT))  // 最小ロット以上かチェック
               {
                  result = OrderClose(OrderTicket(), halfLots, (OrderType() == OP_BUY ? Bid : Ask), 3, clrGreen);
   
                  if (result){
                     Print("半分利確成功:", halfLots, "ロット");
                  }else{
                     Print("利確失敗:", GetLastError());
                  }
               }
               else
               {
                  Print("半分利確できない:ロットが小さすぎる");
               }
            }else{
               //残り決済
               result = OrderClose(OrderTicket(), OrderLots(), (OrderType() == OP_BUY ? Bid : Ask), 3, clrGreen);

               if (result){
                  Print("残り利確成功:", OrderLots(), "ロット");
               }else{
                  Print("利確失敗:", GetLastError());               
               }
            }
         }
      }
   }
}

※マジックナンバーは考慮していません。必要に応じて追加してください。

スポンサーリンク

関数の使い方・解説

引数は以下の2つです:

  • Type:決済したいポジションの種類(買い:OP_BUY、売り:OP_SELL
  • HullLots:半分決済する前のロット数

呼び出し例:

PartialCloseHalf(OP_SELL,Lots); //売りポジション半分決済

ロット数はパラメータ設定の値をそのままセットすればOK。

MT4でポジションを半分決済する関数【初心者向けEAサンプル解説】

この関数を使えば、残りのポジションでさらに利益を伸ばす運用が簡単に行えます。

⚠️ 注意点

割り切れないロット数でも半分にするようにコーディングしていますが、0.01ロット等で動かすと0.01ロットが決済され半分ではなく全決済という形になります。

MT4でポジションを半分決済する関数【初心者向けEAサンプル解説】

・実運用の前には必ずデモ口座で動作確認してください。

・この関数を利用する際は、自己責任でお願いします。

まとめ

以上、『ポジションを半分決済する関数』でした。

今回は、MT4で使える「ポジションを半分決済する関数」を紹介しました。
できるだけわかりやすく作ったので、プログラミング初心者でも扱いやすいシンプルな構造です。



✅ 他にも多数のEAサンプルを公開中!

今回紹介した内容以外にも、当サイトではさまざまな
FX自動売買EAのサンプルコードを提供しています。

自分に合った戦略のEAを見つけたい方は、ぜひチェックしてみてください。


📊 【2025年最新】FX自動売買EAランキングも公開中!

当サイトの「どのEA(インジ)が実際に勝っているのか?」を知りたい方はこちら👇
PF(プロフィットファクター)や勝率で徹底比較した最新ランキングから、あなたに最適なEA(インジ)を見つけましょう。


EA開発初心者向けに、今後も実践的なMQL4関数を紹介していきます。
気になる機能やロジックがあれば、ぜひ他の記事もあわせてご覧ください!

コメント

タイトルとURLをコピーしました