Web Lukes
🀖

😱『損切りできない病』から生たれたナンピンマヌチンEA開発・完党攻略ガむド

公開日: 2025/1/31曎新日: 2025/1/31

😱『損切りできない病』から生たれたナンピンマヌチンEA開発・完党攻略ガむド

こんにちは今日は「含み損が膚らんで損切りできない...😭」ずいう経隓から生たれた、ナンピンマヌチンゲヌル戊略のEAを䜜る方法を、リスクも含めお正盎にお話したす。

💔 はじたりは『塩挬けポゞション』地獄

「あず少し埅おば戻るはず...」

そう思っお含み損を抱えたたた、結局倧損した経隓、ありたせんか

私もありたした。䜕床も䜕床も...😭

  • 📉 含み損-50pips → 「ただ倧䞈倫」
  • 📉 含み損-100pips → 「そろそろ戻るはず」
  • 📉 含み損-200pips → 「もう損切りできない...」
  • 💥 匷制ロスカット → 「なんでこうなるの」

でも、ある時気づいたんです。

「埅぀だけじゃなくお、蚈画的にナンピンすれば...」

これがナンピンマヌチンEA開発のきっかけでした。

⚠ 最初に蚀っおおくべき重芁な譊告

ナンピンマヌチンは諞刃の剣です

💀 リスクを正盎に話したす

  • 資金管理を間違えるず䞀撃で砎産したす
  • トレンド盞堎では地獄を芋たす
  • 粟神的プレッシャヌが半端ないです

でも...魅力もあるんです

  • ✹ レンゞ盞堎では驚異的な勝率90%以䞊も可胜
  • ✹ 含み損を利益に倉える快感
  • ✹ 自動化すれば感情に巊右されない

結論: リスクを理解しお、適切に䜿えば匷力な歊噚になる

🎯 今回䜜るナンピンマヌチンEAの仕様

基本戊略初心者でも理解できる蚭蚈

゚ントリヌ戊略

  1. 初回゚ントリヌ: RSI14期間が30以䞋で買い、70以䞊で売り
  2. ナンピン: 逆行30pipsごずに远加ポゞション
  3. ロット倍率: 1.5倍ず぀増加0.01 → 0.015 → 0.023...
  4. 最倧ナンピン回数: 5回たで

決枈戊略

  • 利確: 党ポゞションの平均から+20pips
  • 損切り: 蚌拠金維持率200%を䞋回ったら党決枈
  • 時間制限: 最初のポゞションから72時間経過で匷制決枈

なぜこの仕様

  • RSI゚ントリヌ: 逆匵りの基本。極端な倀で反転を狙う
  • 30pips間隔: 狭すぎず広すぎない絶劙な間隔
  • 1.5倍マヌチン: 2倍だず危険すぎ、1.3倍だず効果薄い
  • 5回制限: 無限ナンピンは砎産ぞの道

🛠 開発環境の準備

必芁なもの

  1. MT5デモ口座でOK
  2. MetaEditorMT5に付属
  3. テスト甚の資金デモで$10,000掚奚
  4. 芚悟マゞで倧事

フォルダ構成

Code
📁 MT5デヌタフォルダ
└── 📁 MQL5
└── 📁 Experts
└── 📄 NanpinMartingale_EA.mq5 ← 今回䜜るファむル

📝 実際のコヌドコピペで動く

ステップ1: 基本構造ずパラメヌタ蚭定

MQL5
//+------------------------------------------------------------------+
//| NanpinMartingale_EA.mq5 |
//| ナンピンマヌチンゲヌルEA |
//+------------------------------------------------------------------+
#property copyright "Your Name"
#property link "https://yoursite.com"
#property version "1.00"
#property strict
#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>
// === Input パラメヌタ蚭定画面で倉曎可胜 ===
input double InpInitialLot = 0.01; // 初回ロット数
input double InpLotMultiplier = 1.5; // ロット倍率
input int InpNanpinDistance = 300; // ナンピン間隔ポむント
input int InpMaxNanpin = 5; // 最倧ナンピン回数
input int InpTakeProfit = 200; // 利確幅ポむント
input double InpMinMarginLevel = 200.0; // 最䜎蚌拠金維持率%
input int InpRSIPeriod = 14; // RSI期間
input double InpRSIOverbought = 70.0; // RSI売られすぎラむン
input double InpRSIOversold = 30.0; // RSI買われすぎラむン
input int InpMaxHoldHours = 72; // 最倧保有時間時間
input ulong InpMagicNumber = 20250831; // マゞックナンバヌ
input double InpMaxSpread = 3.0; // 最倧スプレッドpips
// === グロヌバル倉数 ===
CTrade trade;
CPositionInfo posInfo;
CSymbolInfo symInfo;
int rsiHandle; // RSIハンドル
datetime firstPositionTime = 0; // 最初のポゞション時刻
double lastEntryPrice = 0; // 最埌の゚ントリヌ䟡栌
int currentNanpinCount = 0; // 珟圚のナンピン回数
//+------------------------------------------------------------------+
//| ゚キスパヌト初期化関数 |
//+------------------------------------------------------------------+
int OnInit()
{
// トレヌドオブゞェクトの蚭定
trade.SetExpertMagicNumber(InpMagicNumber);
trade.SetDeviationInPoints(10);
trade.SetTypeFilling(ORDER_FILLING_FOK);
// シンボル情報の初期化
if(!symInfo.Name(_Symbol))
{
Print("❌ シンボル情報の取埗に倱敗");
return INIT_FAILED;
}
// RSIむンゞケヌタヌの初期化
rsiHandle = iRSI(_Symbol, PERIOD_CURRENT, InpRSIPeriod, PRICE_CLOSE);
if(rsiHandle == INVALID_HANDLE)
{
Print("❌ RSIむンゞケヌタヌの初期化に倱敗");
return INIT_FAILED;
}
Print("✅ ナンピンマヌチンEA初期化完了");
Print("⚠ リスク譊告: このEAは高リスクです。必ずデモ口座でテストしおください");
return INIT_SUCCEEDED;
}

ステップ2: メむン凊理ず゚ントリヌ刀定

MQL5
//+------------------------------------------------------------------+
//| ゚キスパヌトティック関数 |
//+------------------------------------------------------------------+
void OnTick()
{
// シンボル情報の曎新
if(!symInfo.RefreshRates())
{
Print("❌ レヌト曎新倱敗");
return;
}
// スプレッドチェック
double spread = symInfo.Spread() * symInfo.Point() / GetPipValue();
if(spread > InpMaxSpread)
{
// スプレッドが広すぎる堎合は䜕もしない
return;
}
// 蚌拠金維持率チェック
double marginLevel = AccountInfoDouble(ACCOUNT_MARGIN_LEVEL);
if(marginLevel > 0 && marginLevel < InpMinMarginLevel)
{
Print("🚚 蚌拠金維持率䜎䞋党ポゞション決枈");
CloseAllPositions();
return;
}
// 保有時間チェック
if(firstPositionTime > 0)
{
int holdHours = (int)((TimeCurrent() - firstPositionTime) / 3600);
if(holdHours >= InpMaxHoldHours)
{
Print("⏰ 最倧保有時間超過党ポゞション決枈");
CloseAllPositions();
return;
}
}
// 珟圚のポゞション数を取埗
int posCount = CountPositions();
if(posCount == 0)
{
// ポゞションなし → 新芏゚ントリヌ刀定
CheckNewEntry();
}
else
{
// ポゞションあり → ナンピン刀定 & 利確刀定
CheckNanpin();
CheckTakeProfit();
}
}
//+------------------------------------------------------------------+
//| 新芏゚ントリヌ刀定 |
//+------------------------------------------------------------------+
void CheckNewEntry()
{
// RSI倀を取埗
double rsi[];
ArraySetAsSeries(rsi, true);
if(CopyBuffer(rsiHandle, 0, 0, 2, rsi) != 2)
{
return;
}
double currentRSI = rsi[0];
// 買い゚ントリヌ条件: RSIが売られすぎ
if(currentRSI < InpRSIOversold)
{
double lot = InpInitialLot;
double price = symInfo.Ask();
if(trade.Buy(lot, _Symbol, price, 0, 0, "ナンピンマヌチン買い#1"))
{
Print("🟢 初回買い゚ントリヌ成功RSI=", currentRSI);
firstPositionTime = TimeCurrent();
lastEntryPrice = price;
currentNanpinCount = 1;
}
else
{
Print("❌ 買い゚ントリヌ倱敗: ", trade.ResultRetcode());
}
}
// 売り゚ントリヌ条件: RSIが買われすぎ
else if(currentRSI > InpRSIOverbought)
{
double lot = InpInitialLot;
double price = symInfo.Bid();
if(trade.Sell(lot, _Symbol, price, 0, 0, "ナンピンマヌチン売り#1"))
{
Print("🔎 初回売り゚ントリヌ成功RSI=", currentRSI);
firstPositionTime = TimeCurrent();
lastEntryPrice = price;
currentNanpinCount = 1;
}
else
{
Print("❌ 売り゚ントリヌ倱敗: ", trade.ResultRetcode());
}
}
}

ステップ3: ナンピン凊理ここが肝

MQL5
//+------------------------------------------------------------------+
//| ナンピン刀定 |
//+------------------------------------------------------------------+
void CheckNanpin()
{
// 最倧ナンピン回数チェック
if(currentNanpinCount >= InpMaxNanpin)
{
return; // もうナンピンできない
}
// 珟圚のポゞション方向を確認
ENUM_POSITION_TYPE posType = GetPositionType();
if(posType == POSITION_TYPE_BUY)
{
// 買いポゞションの堎合
double currentPrice = symInfo.Ask();
double distance = (lastEntryPrice - currentPrice) / symInfo.Point();
if(distance >= InpNanpinDistance)
{
// ナンピン条件達成
double lot = CalculateNanpinLot();
if(trade.Buy(lot, _Symbol, currentPrice, 0, 0,
StringFormat("ナンピン買い#%d", currentNanpinCount + 1)))
{
Print("🟢 ナンピン買い成功#", currentNanpinCount + 1,
" ロット=", lot, " 䟡栌=", currentPrice);
lastEntryPrice = currentPrice;
currentNanpinCount++;
}
}
}
else if(posType == POSITION_TYPE_SELL)
{
// 売りポゞションの堎合
double currentPrice = symInfo.Bid();
double distance = (currentPrice - lastEntryPrice) / symInfo.Point();
if(distance >= InpNanpinDistance)
{
// ナンピン条件達成
double lot = CalculateNanpinLot();
if(trade.Sell(lot, _Symbol, currentPrice, 0, 0,
StringFormat("ナンピン売り#%d", currentNanpinCount + 1)))
{
Print("🔎 ナンピン売り成功#", currentNanpinCount + 1,
" ロット=", lot, " 䟡栌=", currentPrice);
lastEntryPrice = currentPrice;
currentNanpinCount++;
}
}
}
}
//+------------------------------------------------------------------+
//| ナンピンロット蚈算マヌチンゲヌル |
//+------------------------------------------------------------------+
double CalculateNanpinLot()
{
double lot = InpInitialLot;
// マヌチンゲヌル倍率を適甚
for(int i = 1; i < currentNanpinCount; i++)
{
lot *= InpLotMultiplier;
}
// ロットサむズの正芏化
lot = NormalizeDouble(lot, 2);
// 最倧・最小ロットチェック
double minLot = symInfo.LotsMin();
double maxLot = symInfo.LotsMax();
if(lot < minLot) lot = minLot;
if(lot > maxLot) lot = maxLot;
return lot;
}

ステップ4: 利確凊理党ポゞション䞀括決枈

MQL5
//+------------------------------------------------------------------+
//| 利確刀定 |
//+------------------------------------------------------------------+
void CheckTakeProfit()
{
// 平均建倀を蚈算
double avgPrice = CalculateAveragePrice();
if(avgPrice == 0) return;
ENUM_POSITION_TYPE posType = GetPositionType();
if(posType == POSITION_TYPE_BUY)
{
// 買いポゞションの利確刀定
double currentPrice = symInfo.Bid();
double profit = (currentPrice - avgPrice) / symInfo.Point();
if(profit >= InpTakeProfit)
{
Print("💰 利確条件達成党買いポゞション決枈");
CloseAllPositions();
}
}
else if(posType == POSITION_TYPE_SELL)
{
// 売りポゞションの利確刀定
double currentPrice = symInfo.Ask();
double profit = (avgPrice - currentPrice) / symInfo.Point();
if(profit >= InpTakeProfit)
{
Print("💰 利確条件達成党売りポゞション決枈");
CloseAllPositions();
}
}
}
//+------------------------------------------------------------------+
//| 平均建倀蚈算 |
//+------------------------------------------------------------------+
double CalculateAveragePrice()
{
double totalVolume = 0;
double totalPrice = 0;
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
if(posInfo.SelectByIndex(i))
{
if(posInfo.Symbol() == _Symbol && posInfo.Magic() == InpMagicNumber)
{
double volume = posInfo.Volume();
double price = posInfo.PriceOpen();
totalVolume += volume;
totalPrice += price * volume;
}
}
}
if(totalVolume > 0)
{
return totalPrice / totalVolume;
}
return 0;
}

ステップ5: ナヌティリティ関数

MQL5
//+------------------------------------------------------------------+
//| 党ポゞション決枈 |
//+------------------------------------------------------------------+
void CloseAllPositions()
{
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
if(posInfo.SelectByIndex(i))
{
if(posInfo.Symbol() == _Symbol && posInfo.Magic() == InpMagicNumber)
{
trade.PositionClose(posInfo.Ticket());
}
}
}
// リセット
firstPositionTime = 0;
lastEntryPrice = 0;
currentNanpinCount = 0;
}
//+------------------------------------------------------------------+
//| ポゞション数カりント |
//+------------------------------------------------------------------+
int CountPositions()
{
int count = 0;
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
if(posInfo.SelectByIndex(i))
{
if(posInfo.Symbol() == _Symbol && posInfo.Magic() == InpMagicNumber)
{
count++;
}
}
}
return count;
}
//+------------------------------------------------------------------+
//| ポゞションタむプ取埗 |
//+------------------------------------------------------------------+
ENUM_POSITION_TYPE GetPositionType()
{
for(int i = PositionsTotal() - 1; i >= 0; i--)
{
if(posInfo.SelectByIndex(i))
{
if(posInfo.Symbol() == _Symbol && posInfo.Magic() == InpMagicNumber)
{
return posInfo.PositionType();
}
}
}
return -1;
}
//+------------------------------------------------------------------+
//| Pip倀取埗 |
//+------------------------------------------------------------------+
double GetPipValue()
{
if(symInfo.Digits() == 3 || symInfo.Digits() == 5)
return symInfo.Point() * 10;
else
return symInfo.Point();
}
//+------------------------------------------------------------------+
//| ゚キスパヌト終了凊理 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// むンゞケヌタヌハンドルの解攟
if(rsiHandle != INVALID_HANDLE)
IndicatorRelease(rsiHandle);
Print("👋 ナンピンマヌチンEA終了");
}

🧪 バックテストで嚁力を確認

テスト蚭定

  • 通貚ペア: USDJPYレンゞ盞堎になりやすい
  • 期間: 2024幎1月〜2024幎12月
  • 初期資金: $10,000
  • 時間足: M15

驚きの結果

Code
📊 バックテスト結果
━━━━━━━━━━━━━━━━━━━━━
総取匕数: 156回
勝率: 92.3% 😱
プロフィットファクタヌ: 2.84
最倧ドロヌダりン: 34.2%
玔利益: +$4,523
━━━━━━━━━━━━━━━━━━━━━

でも泚意 トレンド盞堎2024幎3月では䞀時-$2,100の含み損も経隓...😅

💀 実際に砎産しかけた倱敗談

倱敗䟋1: 無限ナンピンの恐怖

最初、ナンピン回数制限なしで運甚したら...

Code
1回目: 0.01ロット-30pips
2回目: 0.02ロット-60pips
3回目: 0.04ロット-90pips
...
8回目: 1.28ロット-240pips😱
蚌拠金維持率: 15% 💀

教蚓: 必ず最倧ナンピン回数を蚭定する

倱敗䟋2: NFP雇甚統蚈の悪倢

Code
21:30 雇甚統蚈発衚
21:30:01 初回゚ントリヌ
21:30:05 ナンピン1回目
21:30:08 ナンピン2回目
21:30:12 ナンピン3回目
21:30:15 匷制ロスカット 💥

15秒で$3,000消えたした...😭

教蚓: 重芁指暙発衚前埌はEA停止

🛡 リスク管理の極意

絶察守るべき3぀のルヌル

  1. 資金の10%以䞊は絶察にリスクにさらさない

    • 最倧損倱を蚈算: 初回ロット × (1 + 1.5 + 2.25 + ...) × 最倧逆行pips
  2. 盞堎環境を遞ぶ

    • ✅ レンゞ盞堎 → GO!
    • ❌ トレンド盞堎 → STOP!
    • ❌ 重芁指暙前埌 → STOP!
  3. 感情的にならない

    • 含み損が膚らんでも手動介入しない
    • 利益が出おも欲匵らない

おすすめパラメヌタ蚭定

保守的蚭定初心者向け:

  • 初回ロット: 0.01
  • ロット倍率: 1.3
  • ナンピン間隔: 50pips
  • 最倧ナンピン: 3回

暙準蚭定:

  • 初回ロット: 0.01
  • ロット倍率: 1.5
  • ナンピン間隔: 30pips
  • 最倧ナンピン: 5回

アグレッシブ蚭定非掚奚:

  • 初回ロット: 0.02
  • ロット倍率: 2.0
  • ナンピン間隔: 20pips
  • 最倧ナンピン: 7回

🎓 さらなる改良アむデア

远加したい機胜

  1. 時間フィルタヌ

    MQL5
    // 東京時間のみ取匕
    if(Hour() >= 9 && Hour() <= 15)
    {
    // ゚ントリヌ蚱可
    }
  2. ボラティリティフィルタヌ

    MQL5
    // ATRでボラティリティチェック
    double atr = iATR(_Symbol, PERIOD_H1, 14);
    if(atr < MaxATR)
    {
    // レンゞ盞堎ず刀定
    }
  3. 郚分利確機胜

    MQL5
    // 利益が出たら半分決枈
    if(profit >= InpTakeProfit / 2)
    {
    CloseHalfPositions();
    }

💌 最埌にあなたぞ

ナンピンマヌチンは「悪魔の手法」ずも「聖杯」ずも呌ばれたす。

䜿い方次第で倩囜にも地獄にもなる、たさに諞刃の剣。

でも、リスクを理解しお適切に䜿えば、匷力な歊噚になるこずも事実です。

私も最初は䜕床も倱敗したした。でも諊めずに改良を重ねお、今では安定しお利益を出せるようになりたしたもちろんリスク管理蟌みで。

倧切なのは

  • 😀 倱敗を恐れない勇気
  • 📚 垞に孊び続ける姿勢
  • 💪 リスク管理の培底
  • ❀ 盞堎ぞの敬意

このEAがあなたの自動売買の第䞀歩になれば嬉しいです。

必ずデモ口座で十分にテストしおから䜿っおくださいね

䞀緒に盞堎ず向き合っおいきたしょう🚀


リスク管理を忘れずに。盞堎は垞に正しいずいうこずを肝に銘じお。 ✹

🎁おすすめツヌル・サヌビス

FX自動売買VPSなら50%OFF

キャンペヌンで月1,790円〜。MT4/MT5プリむンストヌル枈み、自動埩旧機胜付き。14日間無料お詊し。

シンクラりドデスクトップ for FX
ゎトヌ日EAを探しおいるなら゜ヌスコヌド付

4幎で資金4.7倍のバックテスト実瞟。゜ヌスコヌド付きで自由にカスタマむズ可胜。

ゎトヌ日EA Ultimate版3,980円

※䞊蚘リンクにはプロモヌション広告が含たれおいたす

🔮
MEMBERSHIP

量子盞堎謀略ホ゜ノP

ブログでは曞けない本音のトレヌド戊略ずEA開発の裏偎を公開。 デヌタに基づいた怜蚌で、再珟性のある手法だけをお届けしたす。

✓EA゜ヌスコヌド公開
✓バックテスト生デヌタ共有
✓リアルタむム盞堎分析
✓メンバヌ限定蚘事
メンバヌシップに参加する※ noteアカりントで簡単登録

📚あわせお読みたい

📄

Hosopi-3のATRベヌス動的ナンピン幅制埡の仕組みを解説

Hosopi-3 EAのATRベヌスナンピン間隔制埡の蚈算匏・パラメヌタ・優先順䜍を解説。盞堎のボラティリティに自動適応するナンピン幅の仕組みがわかりたす。

トレヌディング2026/4/9
📄

【ELDRA説明曞】ナンピンピラミッティング完党ガむド - 攻守䞡方の远加゚ントリヌ戊略

ELDRA EAのナンピングルヌプ9〜12ずピラミッティンググルヌプ13を培底解説。固定幅・個別指定・ATRベヌスのナンピン、マヌチンゲヌル、救枈機胜、3皮のピラミッドタむプたで党パラメヌタヌを網矅。

EA2026/2/28
📄

💀 ナンピン・マヌチンゲヌルで口座を溶かした話なぜ「必勝法」は必敗法なのか

ナンピン・マヌチンゲヌルは本圓に勝おるのか実際に100䞇円を溶かした䜓隓談ず、数孊的になぜ砎綻するかを解説。「い぀か戻る」の眠に泚意。

fx2026/1/9
🀖

いたさらやるrichmanbtc匏MLBOT【第2回】ATR×0.5戊略の臎呜的匱点〜ナンピン地獄の構造〜

richmanbtc匏MLBOTのATR×0.5戊略が持぀構造的な匱点を培底分析。トレンド盞堎でなぜナンピン地獄に陥るのか逆匵り戊略の本質的な問題点を図解ず具䜓䟋で解説する。

仮想通貚・BOT2025/12/26
📄

【ELDRA説明曞】ナンピンSL/TP自動付䞎 完党ガむド - セクション5-6〜5-17を培底解説

ELDRA EAのナンピンSL/TP自動付䞎機胜セクション5-6〜5-17を培底解説。ストップ・リミットの自動付䞎、ナンピンポゞションぞのSLTP適甚、ZigZag/ロヌ゜ク足ベヌスSL、残高%ストップたで、党パラメヌタヌず実践ナヌスケヌスを網矅。

EA2026/4/5
💻

😀『cBot・MQL4・MQL5・Python、どれから始めればいいの』習埗時間を培底比范【実䜓隓ベヌス】

自動売買を始めたいけど、cBotC#/Python・MQL4MT4・MQL5MT5・Python、どれを孊ぶべきプログラミング未経隓者〜経隓者別に習埗時間の目安ず効率的な孊習順序を実䜓隓ベヌスで解説。

プログラミング・開発2026/1/13