この戦略は一言でいえば「資金の大半を短期国債(T-Bills)に置きつつ、株指数を“上乗せ”して、相場が崩れたら自動的に守りに切り替える」設計です。
株だけを買って祈る運用でも、現金100%で機会損失を抱える運用でもありません。“安全運用+攻め”のハイブリッドを、ルールベースで再現します。
なぜ短期国債(T-Bills)を土台にするのか
投資で一番キツいのは「含み損のストレス」と「戻るまでの時間」です。株の長期投資は期待値は高い一方、暴落局面でのドローダウン(最大下落)と回復期間が長くなりがちです。
ここで短期国債(T-Bills)を土台にすると、次の3つが一気に改善します。
1)価格変動が小さい(“値動きの薄い”資産)
T-Billsは満期が短い国債です。価格は金利で動きますが、短期ほどデュレーションが短く、金利変動の影響が小さいため、長期債より価格ブレが小さくなります。
「資産が減らない」というより、正確には「減りにくい」土台ができます。
2)“待機資金”に利回りが付く
現金で寝かせるのではなく、短期国債で運用することで利回りが得られます。相場が荒れている時ほど、現金同等物を持っているだけで精神的に強くなります。
3)攻めるタイミングで弾薬になる
暴落時に一番強いのは、実は「余力が残っている人」です。短期国債は“弾薬庫”になり、株指数の買い増しやヘッジの入れ替えを機械的に行えます。
この戦略のコア構造(結論:レジーム切替)
やることはシンプルです。
- 平常時(リスクオン):T-Billsを土台にしつつ、株指数を一定比率で保有して上昇を取りに行く
- 警戒時(移行局面):株指数の比率を落とし、ヘッジ(ショート or プット相当)を部分的に入れる
- 危機時(リスクオフ):株指数をさらに軽くし、ヘッジ比率を上げてドローダウンを抑える
要するに、「株を持つか/持たないか」ではなく「株の“リスク量”を調整する」戦略です。ここがオリジナリティの中核です。
初心者がつまずくポイント:商品選び(具体例つき)
実装方法は大きく2通りあります。あなたの口座(日本株/米国株/FX/CFD)に合わせて選びます。
パターンA:証券口座(ETFで再現)
イメージしやすいのはETFです。
- T-Bills側:米国短期国債ETF(例:満期が短いタイプ)
- 株指数側:S&P500やNASDAQなどの指数ETF
- ヘッジ:インバースETF、または“株指数の比率を落とす”だけでも一定の効果
初心者が一番やりやすいのは、まず「ヘッジ商品を使わず、株比率を落とすだけ」で始めることです。ヘッジは慣れてからでいいです。
パターンB:CFD/先物/FX口座(指数を売買して再現)
より機械化しやすいのはCFDです。株指数をロング/ショートできるので、ヘッジが設計しやすい。
ただし、レバレッジが効く分だけ破壊力も増えるので、後述する「レバを小さく固定する」設計が必須です。
レジーム判定の考え方:チャートだけで作る(ここが実用)
本来は金利指標、クレジットスプレッド、VIXなどを組み合わせるのが理想です。ですが、データ取得が面倒で初心者にはハードルが高い。
そこでこの記事では、MT4/TradingViewでも再現しやすい“価格情報だけ”でレジームを推定します。
指標セット(最低限)
- トレンド:移動平均(例:短期MAと長期MA)
- 荒れ具合:ATR(平均真の値幅)
- 急落検知:直近高値からの下落率(ドローダウントリガー)
レジーム定義(例)
ここでは「株指数(例:S&P500相当)」の足だけで決めます。
- リスクオン:価格が長期MAの上、かつ短期MA>長期MA、かつATRが平常
- 移行:短期MAが長期MAを割り込み、ATRが上向き
- リスクオフ:価格が長期MAの下、かつドローダウンが一定以上(例:-6%)
重要なのは“当てにいく”ことではなく、損失局面でリスクを減らすことです。レジーム判定は100%当たらなくていい。外しても致命傷にならないように設計します。
戦略の具体ルール(テンプレとして使える)
以下は、初心者でも運用できるように「数字」を固定したルール例です。あなたの資金規模に合わせて比率だけ変えれば機能します。
資産配分の基本形(現物ETF想定)
- 平常時:T-Bills 80% / 株指数 20%
- 移行時:T-Bills 90% / 株指数 10%
- 危機時:T-Bills 95% / 株指数 5%(または0%)
ポイントは「株比率を20%までに抑える」ことです。これだけで暴落の痛みは激減します。
そして、上昇相場では20%でもそれなりに利益に寄与します。リターンを最大化する戦略ではなく、“生き残りながら増やす”戦略です。
ヘッジを入れる場合(CFD/指数先物想定)
ヘッジは“株をゼロにする”のではなく、株の下落分を相殺する方向で設計します。
- 平常時:株指数ロング(小さめ)/ヘッジなし
- 移行時:株指数ロングを半分にし、同時に小さくショートを建ててネットを軽くする(部分ヘッジ)
- 危機時:ロングを極小、ショートを増やしてネットをマイナス(守り優先)
ここで大事なのが「レバレッジの固定」です。最大でも口座資金の0.2〜0.5倍程度の指数エクスポージャーに抑えると、誤判定でも破綻しにくくなります。
数値で腹落ちさせる:3つのシナリオ例
シナリオ1:ゆるやかな上昇相場(リスクオンが続く)
資金100万円。平常時配分:T-Bills 80万円、株指数20万円。
株指数が1年で+20%だと、株部分は+4万円。T-Bills部分は利回りが仮に年+4%なら+3.2万円。合計+7.2万円。
株100%の+20万円には負けますが、“下げに強い設計”でこのリターンなら実用的です。
シナリオ2:急落(-25%)→回復
株100%なら一時的に-25万円の含み損です。メンタルが折れて売ったら終わり。
この戦略なら株20万円が-25%で-5万円。T-Billsは値動きが小さく、利回りで耐える。合計の落ち込みは限定的です。
しかも危機判定に入れば株比率を落とすので、“途中からさらに下げにくくなる”のが強みです。
シナリオ3:レンジ相場(上下に振れる)
レンジはこの戦略の苦手局面になりやすいです。トレンド判定が往復ビンタを食らい、細かく切り替えて損が出る。
対策はシンプルで、「切替にクールダウン期間を入れる」こと。例えば、移行/危機に入ったら最低でも5営業日は同じレジームを維持する。これだけでノイズが減ります。
運用で勝敗を分ける“3つの設計”
設計1:切替頻度を抑える(週1チェックで十分)
初心者ほど毎日触って壊します。レジーム判定は日足や4時間足で行い、週1回(例:金曜引け後)に見直すだけでも成立します。
頻繁な売買は手数料・スリッページ・判断ミスを増やします。
設計2:最大ドローダウンに上限を作る(損失の天井)
最初に決めるべきは利益目標ではなく「ここまで落ちたら守りに入る」という上限です。
例:口座全体で-8%になったら、株指数のネットエクスポージャーを0にする(=株を売る、またはロングとショートで相殺)。
こういう“天井”を作ると、一発退場の確率が激減します。
設計3:資金の一部だけを“攻め口座”にする
どうしてもリターンを上げたいなら、全額でレバをかけない。
資金100万円のうち、90万円はT-Bills土台(守り)として運用し、10万円だけを指数の短期売買に回す。
この分離は強力です。リスクの上限が物理的に限定されます。
よくある失敗パターンと回避策
失敗1:危機時にヘッジを外す(怖くて反射で外す)
危機時は値動きが大きいので、ショートが利益になっても怖くて手仕舞いしがちです。
回避策は「ヘッジの出口条件を先に決める」。例:価格が長期MAを回復し、ATRが平常化するまでヘッジを維持。
失敗2:レバレッジを上げてしまう(退場最短ルート)
この戦略は“低レバ前提”です。上昇局面で物足りなくなり、レバを上げると、危機判定が遅れた瞬間に終わります。
回避策は「最大ロットを固定」すること。口座資金が増えても、ロットを増やさない期間を作ると事故が減ります。
失敗3:T-Billsを“安全”と誤解して集中する
短期国債でもリスクはゼロではありません(流動性、制度、通貨、金利環境など)。
ただし、株と比べれば値動きは小さい。だからこそ「土台」として機能します。過信せず、分散の一部として使うのが現実的です。
検証のやり方:初心者でもできるバックテスト手順
高度な統計は不要です。次の手順で“機械的に”確かめられます。
- 株指数(例:S&P500相当)のチャートを日足で用意する
- 長期MA(例:200日)と短期MA(例:50日)を表示する
- ATR(例:14)を表示する
- 過去の大きな下落局面(例:急落があった年)を3つ選ぶ
- ルール通りに「平常→移行→危機」の切替が起きたか目視で確認する
- 危機局面で株比率を落とした場合、最大下落がどれくらい減ったかを計算する
この戦略の合格基準は「利益が最大」ではなく、最大下落と回復期間が短くなるかです。ここが改善するなら採用価値があります。
実装例:MT4で指数を使って“部分ヘッジ”するMQL4 EA
以下は、CFDなどで指数を売買できる人向けのサンプルEAです。
やることは「レジーム判定(MA+ATR+ドローダウン)に応じて、ロング/ショートのネット比率を切り替える」です。
※シンボル名はブローカーで異なるため入力で変更してください。
//+------------------------------------------------------------------+
//| Regime Hedge EA (T-Bills + Equity Index concept) |
//| - Trades equity index symbol with regime-based net exposure |
//| - Designed for low leverage, partial hedge |
//| - Author: ChatGPT |
//+------------------------------------------------------------------+
#property strict
input string InpIndexSymbol = "US500"; // Equity index CFD symbol
input int InpFastMAPeriod = 50;
input int InpSlowMAPeriod = 200;
input int InpATRPeriod = 14;
input double InpATRHighMult = 1.35; // ATR spike threshold vs ATR MA
input int InpATRMAPeriod = 50; // ATR moving average period
input double InpDDTriggerPct = 6.0; // Drawdown trigger (%) from recent high
input int InpDDLookback = 60; // Lookback bars to find recent high
input int InpCooldownBars = 5; // Minimum bars to keep regime
input double InpBaseLots = 0.10; // Base lots (fixed)
input double InpHedgeLots = 0.10; // Hedge lots (fixed)
input int InpSlippage = 5;
input int InpMagic = 225001;
enum Regime { RISK_ON=0, TRANSITION=1, RISK_OFF=2 };
datetime g_lastRegimeChange = 0;
Regime g_regime = RISK_ON;
//--- helpers
double iMA_S(string sym, int tf, int per, int shift){
return iMA(sym, tf, per, 0, MODE_SMA, PRICE_CLOSE, shift);
}
double iATR_S(string sym, int tf, int per, int shift){
return iATR(sym, tf, per, shift);
}
double ATR_MA(string sym, int tf, int atrPer, int maPer, int shift){
// simple MA of ATR values
double sum = 0;
for(int i=shift; i high) high = h;
}
return high;
}
int CountPositions(string sym){
int c=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if(OrderMagicNumber()==InpMagic && OrderSymbol()==sym) c++;
}
}
return c;
}
double NetLots(string sym){
double net=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if(OrderMagicNumber()==InpMagic && OrderSymbol()==sym){
if(OrderType()==OP_BUY) net += OrderLots();
if(OrderType()==OP_SELL) net -= OrderLots();
}
}
}
return net;
}
void CloseAll(string sym){
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if(OrderMagicNumber()==InpMagic && OrderSymbol()==sym){
bool ok=false;
if(OrderType()==OP_BUY){
ok = OrderClose(OrderTicket(), OrderLots(), Bid, InpSlippage, clrNONE);
}else if(OrderType()==OP_SELL){
ok = OrderClose(OrderTicket(), OrderLots(), Ask, InpSlippage, clrNONE);
}
}
}
}
}
bool OpenBuy(string sym, double lots){
RefreshRates();
double price = MarketInfo(sym, MODE_ASK);
return OrderSend(sym, OP_BUY, lots, price, InpSlippage, 0, 0, "RegimeBuy", InpMagic, 0, clrNONE) > 0;
}
bool OpenSell(string sym, double lots){
RefreshRates();
double price = MarketInfo(sym, MODE_BID);
return OrderSend(sym, OP_SELL, lots, price, InpSlippage, 0, 0, "RegimeSell", InpMagic, 0, clrNONE) > 0;
}
Regime CalcRegime(){
string s = InpIndexSymbol;
int tf = PERIOD_D1;
double fast0 = iMA_S(s, tf, InpFastMAPeriod, 0);
double slow0 = iMA_S(s, tf, InpSlowMAPeriod, 0);
double fast1 = iMA_S(s, tf, InpFastMAPeriod, 1);
double slow1 = iMA_S(s, tf, InpSlowMAPeriod, 1);
double atr0 = iATR_S(s, tf, InpATRPeriod, 0);
double atrMA = ATR_MA(s, tf, InpATRPeriod, InpATRMAPeriod, 0);
double recentHigh = RecentHigh(s, tf, InpDDLookback, 0);
double close0 = iClose(s, tf, 0);
double ddPct = 0;
if(recentHigh > 0) ddPct = (recentHigh - close0) / recentHigh * 100.0;
bool trendUp = (close0 > slow0) && (fast0 > slow0);
bool trendDown = (close0 < slow0) && (fast0 < slow0);
bool atrSpike = (atrMA > 0 && atr0 > atrMA * InpATRHighMult);
if(trendDown && (ddPct >= InpDDTriggerPct)) return RISK_OFF;
if(!trendUp && (fast1>=slow1 && fast0 0) OpenBuy(s, targetNet);
if(targetNet < 0) OpenSell(s, MathAbs(targetNet));
}
int OnInit(){
g_lastRegimeChange = 0;
g_regime = RISK_ON;
return(INIT_SUCCEEDED);
}
void OnTick(){
string s = InpIndexSymbol;
if(MarketInfo(s, MODE_TRADEALLOWED)==false) return;
// Run only once per new D1 bar
static datetime lastBarTime = 0;
datetime bt = iTime(s, PERIOD_D1, 0);
if(bt == lastBarTime) return;
lastBarTime = bt;
Regime newR = CalcRegime();
// cooldown
if(g_lastRegimeChange != 0){
int barsSince = iBarShift(s, PERIOD_D1, g_lastRegimeChange, true);
if(barsSince >= 0 && barsSince < InpCooldownBars){
newR = g_regime;
}
}
if(newR != g_regime){
g_regime = newR;
g_lastRegimeChange = bt;
}
AdjustPositions(g_regime);
}
//+------------------------------------------------------------------+
使い方の要点:このEAは「資金の大半はT-Bills相当(口座外でも可)」で置き、指数側だけを小ロットで回す前提です。
ロット(InpBaseLots / InpHedgeLots)を小さく固定し、判定が外れても致命傷にならないようにしてください。
最後に:この戦略が向いている人・向かない人
向いている人
・暴落のストレスを減らしながら、株の上昇もある程度取りたい人
・手動の裁量判断が苦手で、ルールを固定したい人
・“退場しない設計”を最優先したい人
向かない人
・短期で爆益を狙いたい人(この戦略はそれを目的にしていません)
・レバレッジを上げてリターンを最大化したい人(破綻確率が上がります)
勝ちやすい運用は、派手な戦略ではなく「大負けしない設計」です。
短期国債を土台に置き、株指数のリスク量をレジームで切り替えるだけで、運用の“形”が変わります。まずは小さく、ルール通りに回して検証してください。
投資には価格変動リスクがあります。最終判断はご自身の責任で行ってください。


コメント