従来のDCAは「一定額を一定間隔で買う」ため、ボラティリティが高騰した局面でリスク超過になりやすく、逆に穏やかな局面ではリスクを取り切れない弱点があります。VADCAはこの非効率を埋める実務的な改良版です。価格予測を一切使わず、“狙うのはリターンではなくリスクの一貫性”。初心者でも再現可能な、地味だが堅実な仕組みです。
1. VADCAの構造(直感と数式)
基本はシンプルです。毎回の積立予定額を基準予算とし、直近の推定ボラティリティで割って配分係数を決めます。推定ボラが高ければ配分を絞り、低ければ配分を増やすだけです。
(核心式)
配分係数 w_t = clamp( 目標ボラ σ* / 推定ボラ σ̂_t , 下限, 上限 )
買付額 S_t = 基準予算 B × w_t
未使用分 U_t = B − S_t (翌回に繰越 or 現金で保持)
- σ*(シグマ・スター)= 投資家が決める目標(年率)ボラティリティ。例:年率10%(日次換算は √{252} で割る)。
- σ̂_t = 直近データから推定した現在の(年率)ボラティリティ。推定法は移動標準偏差(SD)、EWMA、ATR換算など実務的なものでOK。
- clamp(x, 下限, 上限) は極端な配分にならないよう天井/床を設定(例:0.5~2.0)。
これにより、相場が荒いとき(σ̂_t > σ*)は S_t が基準より減少、穏やかなとき(σ̂_t < σ*)は増加します。価格は予測しないのに、含み損の深掘りやドローダウンの凸凹を緩和しやすくなります。
2. 推定ボラティリティの実務的な求め方
初心者に勧めるのは、移動標準偏差SD(20~60営業日)をベースに、年率化(×√252)したもの。暗号資産など24/7市場は日次足×√365で年率化します。FXはATR(14日)を年率pipsに換算して用いても良いでしょう。
年率ボラ σ̂(単純SD)= √(平均{(r_i − 平均r)^2}) × √252
r_i = ln(P_i / P_{i-1}) などの対数収益率
EWMAは最新データを重く扱うため、急変時の追従性が高まります。
EWMA分散_t = λ × 分散_{t-1} + (1−λ) × r_t^2
年率ボラ σ̂_t = √(EWMA分散_t) × √252 (目安 λ=0.94)
どちらでも大差は出ません。大切なのは、一貫した手順で更新することと、過剰反応を抑えるための上下限(clamp)です。
3. 実装フロー(チェックリスト)
- 投資対象の決定:分散の基本形は「株式インデックスETF+現金」。暗号資産を併用する場合は相関とボラの桁が違う点に注意。
- 口座準備:国内証券や暗号資産交換業者の口座を用意。本人確認(eKYC)・入金方法(振込/即時入金)・積立設定(自動/手動)を整える。
- 基準予算Bの設定:例:週5万円。無理のない可処分キャッシュフローから逆算。
- 目標ボラσ*の設定:初心者は年率8~12%を目安。保守的なら6~8%、攻めるなら12~15%。
- 推定ボラσ̂の更新:毎回の発注直前にアップデート。欠損日は補間しない(シンプルで良い)。
- 配分係数w_tの計算:w_t = clamp(σ*/σ̂_t, 0.5, 2.0)等。
- 買付額S_tの算出:S_t = B × w_t。余剰U_tは現金で保持か、翌回に繰越。
- 発注と記録:約定価格、数量、手数料、使用指標(σ̂_t, w_t)を台帳に必ず残す。
- モニタリング:月次で資産推移、年率ボラの実現値、最大ドローダウンを確認。
- 年次レビュー:σ*や上下限の再設定、対象資産の見直し。
4. 例で理解:S&P500連動ETFを「週5万円」積立する場合
仮に目標ボラσ* = 年率10%、上下限=0.5~2.0、基準B=5万円/週とします。直近の推定ボラが以下の通りだったと仮定します(概念図)。
週 推定ボラσ̂_t(年率) w_t=clamp(σ*/σ̂_t) 買付額S_t(円)
1 8% 1.25 62,500
2 10% 1.00 50,000
3 15% 0.67 33,333
4 5% 2.00(上限) 100,000
…
荒い週3では買い控え、穏やかな週4で厚めに買い付けています。いずれも価格の高安は見ていない点がポイント。割高でも薄く、割安でも厚くなる傾向が自然と混ざるため、DCAよりも平均取得単価のブレが抑えられ、ドローダウンの谷が浅くなる可能性が期待できます。
5. FX版:ATRで“1トランシェの許容損失”を一定にする
FXは現物積立の概念が曖昧ですが、スイング玉を段階的に構築する際にVADCAが機能します。考え方は「ATRから1建玉の損失見込みを推定し、円換算の許容額に合わせてロットを可変にする」。
許容損失(円)R = 口座残高 × リスク%(例2%)
想定逆行幅(pips)D = k × ATR(14) (k=1.0~1.5)
ロット L = R ÷ (D × 1pip価値) (JPY口座×USDJPYなどは自動換算)
これを週1回のエントリーや買い増しに適用すると、相場が荒い週はロット縮小、静かな週はロット増加となり、実質的な“リスク一定のDCA”が実現します。
MQL4サンプル:ATRに連動する可変ロット(成行エントリーの例)
//+------------------------------------------------------------------+
//| VADCA_ATR_PositionSizer.mq4 (サンプル) |
//+------------------------------------------------------------------+
#property strict
input double RiskPercent = 2.0; // 1トランシェの許容リスク(%)
input int ATR_Period = 14;
input double ATR_Mult = 1.2; // 想定逆行幅の倍率
input int Slippage = 3;
input bool IsBuy = true; // true=Buy, false=Sell
double PipValuePerLot(string symbol){
// JPYストレートなど主要通貨前提の簡略版
double point = MarketInfo(symbol, MODE_POINT);
double pip = (StringFind(symbol, "JPY") >= 0) ? 0.01 : 0.0001;
double lotPipValue = 10.0; // 1標準ロットの1pip価値(USD口座で主要通貨想定の概算)
// ブローカー仕様により厳密計算は調整してください
if(StringFind(symbol, "JPY") >= 0) lotPipValue = 1000.0; // 概算
return lotPipValue;
}
int start(){
string sym = Symbol();
double bal = AccountBalance();
double riskYen = bal * RiskPercent/100.0;
double atr = iATR(sym, PERIOD_D1, ATR_Period, 0);
if(atr <= 0) { Print("ATR取得失敗"); return(0); }
// 想定逆行幅(pips) ※簡略換算
bool isJPY = (StringFind(sym, "JPY") >= 0);
double pip = isJPY ? 0.01 : 0.0001;
double D_pips = (atr / pip) * ATR_Mult;
double pipValue = PipValuePerLot(sym);
double lot = riskYen / (D_pips * pipValue);
// ロットのクリップ
double minLot = MarketInfo(sym, MODE_MINLOT);
double maxLot = MarketInfo(sym, MODE_MAXLOT);
double lotStep= MarketInfo(sym, MODE_LOTSTEP);
lot = MathMax(minLot, MathMin(maxLot, MathFloor(lot/lotStep)*lotStep ));
int ticket;
if(IsBuy){
ticket = OrderSend(sym, OP_BUY, lot, Ask, Slippage, 0, 0, "VADCA", 0, 0, clrBlue);
}else{
ticket = OrderSend(sym, OP_SELL, lot, Bid, Slippage, 0, 0, "VADCA", 0, 0, clrRed);
}
if(ticket<0) Print("発注失敗:", GetLastError());
else Print("発注成功 Lot=", lot, " ATR=", atr, " D(pips)=", D_pips);
return(0);
}
//+------------------------------------------------------------------+
実運用では、指値/逆指値の価格設計、複数トランシェの距離、合算リスクの上限(例:全玉で口座の5%以内)も併せて管理してください。
6. 暗号資産での使い方(24/7市場に最適)
暗号資産はボラが桁違いに大きいので、上下限のクリップが極めて重要です(例:0.25~1.5)。推定ボラの年率換算は日次×√365が無難。未使用分U_tはステーブルコイン利回りやMMF代替に一時退避するなどキャッシュ効率も意識しましょう。
- 手数料とスプレッド:自動積立手数料の総額がリターンを侵食します。約定回数×単価で必ず試算。
- 上限の適用:静かな局面でS_tが膨らみすぎないよう、予算の1.5倍程度に制限。
- 複数銘柄の同時適用:相関低めの2~3銘柄で内部分散(後述の逆ボラ配分を併用)。
7. マルチアセットVADCA(逆ボラ配分×DCAの融合)
対象が2資産A/Bのとき、各回の相対ボラで予算Bを割り振ると、簡易リスクパリティになります。
資産iの逆ボラ重み v_i = 1 / σ̂_i
正規化重み w_i = v_i / (v_A + v_B)
各資産の買付額 S_{i,t} = B × w_i × clamp(σ*/σ̂_i, 下限, 上限)
比率は毎回更新。価格予測を捨て、リスクの均しに一点集中します。長期の総合的なドローダウン耐性を高めやすい設計です。
8. 実務の落とし穴(必読)
- 極端な急変時の過小/過大反応:推定ボラに外れ値が入るとS_tが振れます。EWMA+Winsorize(上位1%切り)などで平滑化。
- 上限/下限の未設定:clamp無しは禁物。初心者は0.5~1.5から。
- 未使用分の放置:U_tは台帳で管理。繰越ルール(例:翌月の最初に一括充当)を決めておく。
- 対象の相関を無視:暗号資産×ハイベータ株などは合成ボラが跳ねやすい。マルチアセットでは資産別のw_iを導入。
- 税コストの軽視:特定口座(源泉徴収あり)の活用、損益通算や繰越控除の有無など、実効税率は戦略の一部。
9. 口座準備と実務オペレーション
ここでは一般的な段取りのみ記します。
- 口座開設:本人確認(eKYC)、マイナンバー提出、入出金手段の設定。
- 積立サイクルの決定:給料日直後の週次を推奨。ルーティン化が最重要。
- 台帳テンプレ:日付、資産、B、σ̂、w、S、価格、数量、手数料、U残、総資産、備考。
- 自動化:スプレッドシート+関数(STDEV, VAR, EWM)でσ̂を更新、買付額を自動算出。API取引は上級編。
- 監査性:毎回の根拠(σ̂、w)のスクリーンショットを保存。将来の振り返りが容易。
10. Q&A(初心者の疑問に即答)
Q1:「結局、DCAより儲かりますか?」
A:相場依存です。VADCAはドローダウン耐性とリスク一貫性の改善が主目的。利回りの上振れは二次効果として“起こり得る”に留めるのが誠実です。
Q2:「推定ボラはどれが正解?」
A:SDかEWMAの“どちらかに固定”。頻繁な乗り換えは過学習の温床。
Q3:「σ*(目標ボラ)はどう決める?」
A:年率ドローダウン耐性と睡眠の質で逆算。“翌月も同額を続けられるか”が実務基準。
Q4:「現金が余る(U_tが増える)と機会損失では?」
A:その通り。だからこそ繰越ルールや短期金利の活用をセットに。
11. まとめ:価格ではなく“リスク”に合わせる
VADCAは、価格当てを放棄し、毎回のリスク量を整えるだけのアルゴです。習熟のコツは、(1)手順の固定、(2)上下限の堅守、(3)台帳の継続。この3点さえ守れば、初心者でも生存率の高い積立に近づけます。小さく始め、ルールを崩さず、続けてください。
コメント