DCA(ドルコスト平均法)システム - ユーザーガイド

  • Home
  • Documentation
  • DCA(ドルコスト平均法)システム - ユーザーガイド

目次

  1. 概要
  2. クイックスタート
  3. 設定リファレンス
  4. DCAの仕組み
  5. 実世界の例
  6. ベストプラクティス
  7. リスク管理
  8. トラブルシューティング
  9. FAQ

概要

DCAとは?

ドルコスト平均法(Dollar Cost Averaging、DCA)は、市場が初期ポジションに対して逆行したときに、あらかじめ決められた価格レベルで自動的に追加注文を入れるトレーディング戦略です。一度に全ポジションを入れるのではなく、DCAは以下を助けます:

  • 平均取得単価を下げる(ロングでディップ買い時)
  • 平均取得単価を改善する(ショートでラリー売り時)
  • 不利なエントリータイミングの影響を軽減
  • 価格が有利な方向に動いたときに戦略的にポジションサイズを増加

主なメリット

メリット 説明
より良い平均エントリー 異なる価格での複数エントリーにより全体のエントリーポイントが向上
リスク分散 一度に全額投入せず、複数の価格レベルに資本を分散
自動実行 ボットが事前定義したルールに基づいて注文を処理
ポジションスケーリング 設定可能な乗数でポジションサイズを段階的に増加
利益最適化 平均取得単価が低い → 価格反転時の利益ポテンシャル向上

重要な概念

  • 親注文 (Parent Order):初期のトレードエントリー
  • 子注文 (Child Orders):価格変動でトリガーされる追加DCA注文
  • 平均取得単価 (Average Entry Price):全注文(親+子)の加重平均価格
  • トリガ価格 (Trigger Price):次のDCA注文を活性化する価格レベル

クイックスタート

最小構成

DCASettings:
 enabled: true # DCAをオンにする
 max_orders: 4 # 親1 + DCA子3
 size_multiplier: 1.2 # 各注文が前回の20%大きい
 price_deviation_percent: 5 # 価格5%変動で次の注文をトリガー

この設定の動作

  1. 最初の注文 (親):現在の価格で初期トレードを配置
  2. 2番目の注文 (子1):価格が5%不利に動くとトリガー、サイズ = 親 × 1.2
  3. 3番目の注文 (子2):子1から5%下落でトリガー、サイズ = 親 × 1.44 (1.2²)
  4. 4番目の注文 (子3):子2から5%下落でトリガー、サイズ = 親 × 1.728 (1.2³)

例: ロングトレードの場合

初期エントリー: 100 units @ $10,000 = $1,000,000 投資
価格5%下落: 120 units @ $9,500 = $1,140,000 投資
価格5%下落: 144 units @ $9,025 = $1,299,600 投資
価格5%下落: 172.8 units @ $8,574 = $1,481,587 投資
総ポジション: 536.8 units
総投資額: $4,921,187
平均取得単価: $9,168 ✅ (DCAなしの場合 $10,000)
損益分岐点: $9,168 (1ユニットあたり $832 節約!)

設定リファレンス

完全な設定

#################################################
# 6. DCA設定
#################################################
DCASettings:
  enabled: true # DCA機能の有効/無効
  max_orders: 4 # DCA注文の最大数(初期を含む)
  size_multiplier: 1.2 # 注文サイズの乗数 (1.0 = 同じ, 1.2 = 20%増)
  price_deviation_percent: 5 # 前回エントリーからの価格偏差%で次の注文トリガー

パラメータ詳細

enabled

  • : ブーリアン (true/false)
  • デフォルト: false
  • 説明: DCA機能のマスタースイッチ
  • :
    enabled: true # DCA有効
    enabled: false # DCA無効(通常の単一エントリー)
    

max_orders

  • : 整数 (1-10推奨)
  • デフォルト: 1
  • 説明: 親トレードを含む総注文数
  • 重要: max_orders = 親1 + 子N
  • :
    max_orders: 1 # DCAなし(親注文のみ)
    max_orders: 3 # 親1 + 子2
    max_orders: 4 # 親1 + 子3(推奨)
    max_orders: 7 # 親1 + 子6(アグレッシブ)
    

size_multiplier

  • : 小数 (0.1-5.0推奨)
  • デフォルト: 1.0
  • 説明: 後続注文がどれだけ大きくなるか
  • : 注文Nサイズ = ベースサイズ × 乗数^(N-1)
  • :
    size_multiplier: 1.0   # すべて同じサイズ
    size_multiplier: 1.2   # 各注文+20%(推奨)
    size_multiplier: 1.5   # 各注文+50%(アグレッシブ)
    size_multiplier: 2.0   # 各注文2倍(非常にアグレッシブ)
    size_multiplier: 0.8   # 各注文-20%(ピラミッディングダウン)
    

price_deviation_percent

  • : 小数 (0.1-20.0推奨)
  • デフォルト: 5.0
  • 説明: 前回エントリーからの価格変動%で次の注文をトリガー
  • 方向:
    • LONG: 価格がこの%下落するとトリガー
    • SHORT: 価格がこの%上昇するとトリガー
  • :
    price_deviation_percent: 2 # 狭い間隔(スキャルピング、高ボラティリティ)
    price_deviation_percent: 5 # 中間間隔(推奨)
    price_deviation_percent: 10 # 広い間隔(スイングトレード、低ボラティリティ)
    price_deviation_percent: 15 # 非常に広い間隔(ポジショントレード)
    

DCAの仕組み

注文配置フロー

┌─────────────────────────────────────────────────────────────┐
│ 1. 親注文 配置済み                                          │
│ エントリー: $10,000 | サイズ: 100 units | 投資: $1M          │
│ トリガー計算: $10,000 × (1 - 0.05) = $9,500                 │
└─────────────────────────────────────────────────────────────┘
                            ↓
                     価格が $9,400 まで下落
                            ↓
┌─────────────────────────────────────────────────────────────┐
│ 2. 子注文 1 トリガー                                        │
│ エントリー: $9,400 | サイズ: 120 units | 投資: $1.128M      │
│ 新平均エントリー: $9,686                                    │
│ 次トリガー: $9,400 × 0.95 = $8,930                          │
└─────────────────────────────────────────────────────────────┘
                            ↓
                     価格が $8,900 まで下落
                            ↓
┌─────────────────────────────────────────────────────────────┐
│ 3. 子注文 2 トリガー                                        │
│ エントリー: $8,900 | サイズ: 144 units | 投資: $1.282M      │
│ 新平均エントリー: $9,367                                    │
│ 次トリガー: $8,900 × 0.95 = $8,455                          │
└─────────────────────────────────────────────────────────────┘
                            ↓
                     価格が $8,400 まで下落
                            ↓
┌─────────────────────────────────────────────────────────────┐
│ 4. 子注文 3 トリガー                                        │
│ エントリー: $8,400 | サイズ: 172.8 units | 投資: $1.45M     │
│ 新平均エントリー: $9,168                                    │
│ 最大注文到達 - これ以上のDCA注文なし                        │
└─────────────────────────────────────────────────────────────┘

平均エントリー価格計算

ボットが自動的に平均取得単価を計算します:

平均取得単価 = 総投資額 ÷ 総数量
例:
注文1: 100 × $10,000 = $1,000,000
注文2: 120 × $9,400 = $1,128,000
注文3: 144 × $8,900 = $1,281,600
注文4: 172.8 × $8,400 = $1,451,520
─────────────────────────────────────
合計: 536.8 units = $4,861,120
平均単価 = $4,861,120 ÷ 536.8 = $9,056

損益計算

すべての損益計算は平均取得単価を使用(初期エントリーではない):

DCAなし:
エントリー: $10,000
現在: $9,500
損益: -5.0% ❌
DCAあり (4注文):
平均エントリー: $9,056
現在: $9,500
損益: +4.9% ✅

実世界の例

例1: 保守的なスイングトレード

設定:

DCASettings:
 enabled: true
 max_orders: 3 # 小規模ポジション
 size_multiplier: 1.0 # 等サイズ
 price_deviation_percent: 10 # 広い間隔

トレード実行 (LONG BTC):

エントリー1: 0.1 BTC @ $40,000 = $4,000
価格 $36,000へ下落 (10%)
エントリー2: 0.1 BTC @ $36,000 = $3,600
価格 $32,400へ下落 (10%)
エントリー3: 0.1 BTC @ $32,400 = $3,240
合計: 0.3 BTC / $10,840
平均取得単価: $36,133
損益分岐点: $36,133 (DCAなし $40,000)

最適: 低ボラティリティ資産、長期間フレーム

例2: アグレッシブスキャルピング

設定:

DCASettings:
 enabled: true
 max_orders: 5 # より多くの注文
 size_multiplier: 1.5 # アグレッシブ拡大
 price_deviation_percent: 2 # 狭い間隔

トレード実行 (SHORT ETH):

エントリー1: 1 ETH @ $3,000 = $3,000
価格 $3,060へ上昇 (2%)
エントリー2: 1.5 ETH @ $3,060 = $4,590
価格 $3,121へ上昇 (2%)
エントリー3: 2.25 ETH @ $3,121 = $7,022
価格 $3,183へ上昇 (2%)
エントリー4: 3.375 ETH @ $3,183 = $10,742
価格 $3,247へ上昇 (2%)
エントリー5: 5.063 ETH @ $3,247 = $16,440
合計: 13.188 ETH / $41,794
平均取得単価: $3,169
損益分岐点: $3,169 (最大注文到達時の最大損失)

最適: 高ボラティリティ資産、短期間フレーム
⚠️ 警告: 非常に高い資本要件!

設定:

DCASettings:
 enabled: true
 max_orders: 4 # 中程度の深さ
 size_multiplier: 1.2 # 段階的拡大
 price_deviation_percent: 5 # 中間間隔

トレード実行 (LONG SOL):

エントリー1: 100 SOL @ $100 = $10,000
価格 $95へ下落 (5%)
エントリー2: 120 SOL @ $95 = $11,400
価格 $90.25へ下落 (5%)
エントリー3: 144 SOL @ $90.25 = $12,996
価格 $85.74へ下落 (5%)
エントリー4: 172.8 SOL @ $85.74 = $14,816
合計: 536.8 SOL / $49,212
平均取得単価: $91.68
損益分岐点: $91.68 (初期比8.3%改善)
価格 $95へ反発:
利益: 536.8 × ($95 - $91.68) = $1,782 (+3.6%)
DCAなし: 100 × ($95 - $100) = -$500 (-5%損失)

最適: ほとんどのトレードシナリオ、バランスの取れたリスク/リワード


ベストプラクティス

1. 資本管理

十分な資本を確保

最大必要資本の計算:
ベース注文: $10,000
乗数: 1.2
最大注文: 4
注文1: $10,000
注文2: $12,000 (1.2×)
注文3: $14,400 (1.2²×)
注文4: $17,280 (1.2³×)
─────────────────
合計: $53,680 ⚠️ 初期注文サイズの約5.4倍必要!

目安:

  • 等サイズ (1.0): max_orders × 初期サイズ必要
  • 1.2倍: 4注文で初期の約5倍
  • 1.5倍: 4注文で初期の約10倍
  • 2.0倍: 4注文で初期の約15倍

アカウント残高の安全性

# 予期せぬ機会のために20-30%のバッファを確保
利用可能残高: $100,000
DCA予約: $70,000
安全バッファ: $30,000

2. 正しい設定の選択

市場状況別

高ボラティリティ (BTC, ETHニュース時):

max_orders: 5
size_multiplier: 1.3
price_deviation_percent: 3

中ボラティリティ (主要アルトコイン):

max_orders: 4
size_multiplier: 1.2
price_deviation_percent: 5

低ボラティリティ (ステーブルコイン、成熟市場):

max_orders: 3
size_multiplier: 1.1
price_deviation_percent: 2

タイムフレーム別

スキャルピング (分単位):

price_deviation_percent: 1-2
max_orders: 3-4
size_multiplier: 1.3-1.5

デイトレード (時間単位):

price_deviation_percent: 3-5
max_orders: 3-5
size_multiplier: 1.2-1.3

スイングトレード (日単位):

price_deviation_percent: 5-10
max_orders: 3-4
size_multiplier: 1.0-1.2

ポジショントレード (週単位):

price_deviation_percent: 10-15
max_orders: 2-3
size_multiplier: 1.0-1.1

根据账户规模

小账户(< $10,000):

max_orders: 3 # 资金有限
size_multiplier: 1.0 # 无法激进加码
price_deviation_percent: 7

中等账户($10,000–$100,000):

max_orders: 4
size_multiplier: 1.2
price_deviation_percent: 5

大账户(> $100,000):

max_orders: 5-7
size_multiplier: 1.3-1.5
price_deviation_percent: 3-5

3. 退出策略

止盈目标

利用 DCA 改善平均入场价:
- 将止盈设置在 平均入场价 +5%(而不是初始入场价!)
- 可考虑在心理价位分批止盈
- 随着盈利增加,采用追踪止损

止损管理

可选方案:
1. 不设止损 - 让 DCA 自由发挥(风险较高!)
2. 基于平均入场价设置 -X% 止损
3. 基于最后一次 DCA 订单设置 -X% 止损
4. 最大回撤限制(例如总账户 -20%)

4. 监控

定期检查以下内容:

  • ✅ 当前活跃的 DCA 订单数量
  • ✅ 平均入场价 vs 当前价格
  • ✅ 已投入的总资金
  • ✅ 距离下一次 DCA 触发还有多远
  • ✅ 剩余可用资金

需要关注的机器人日志:

✅ "DCA trigger hit" - 已下新订单
✅ "Parent trade updated with DCA data" - 已重新计算平均价
✅ "Max orders reached" - 已达最大订单数,无法再加仓
⚠️ "Insufficient balance" - 余额不足,需要补充资金!

风险管理

最大回撤场景分析

场景:4 个订单、1.2× 乘数、5% 间隔

已执行订单 价格下跌 使用资金 最大回撤
1(母单) 0% $10,000 0%
2 -5% $22,000 -2.5%
3 -9.75% $36,400 -5.1%
4(最大) -14.26% $53,680 -7.8%

解读

  • 即使触发全部 4 个 DCA 订单,最大回撤仅 7.8%
  • 不使用 DCA:在同一价格水平亏损 14.26%
  • DCA 将最大回撤降低了约 50%

不同配置的资金需求

配置 初始 最大资金需求 乘数效应
3 订单,1.0× $10k $30k 3.0×
3 订单,1.2× $10k $34.4k 3.4×
4 订单,1.0× $10k $40k 4.0×
4 订单,1.2× $10k $53.7k 5.4×
5 订单,1.2× $10k $71.1k 7.1×
4 订单,1.5× $10k $88.1k 8.8×
5 订单,1.5× $10k $181.9k 18.2×

⚠️ 关键提醒:始终保留 1.5–2 倍的最大资金需求作为安全缓冲!

风险缓解策略

1. 仓位规模限制

# 从小开始!
InitialTradeAmount: 100 # 不要直接 1000
DCASettings:
 max_orders: 3 # 不要 7
 size_multiplier: 1.1 # 不要 2.0

2. 单品种限制

不要对每个交易都用 DCA:
- 仅对高置信度机会启用 DCA
- 对不确定交易使用单次入场
- 同时活跃的 DCA 仓位限制在 2-3 个

3. 时间限制

防止闪崩时快速触发 DCA:
- 订单间最小时间间隔:5-15 分钟
- 每日 DCA 激活上限:每天最多 10 次
- 同一天触发多条 DCA 链时需人工复盘

4. 基于波动率的调整

检测到高波动时:
- 放宽 price_deviation_percent(5% → 7%)
- 减少 max_orders(4 → 3)
- 降低 size_multiplier(1.2 → 1.1)

故障排除

DCA 订单未触发

症状:价格已波动但未出现 DCA 订单

可能原因

  1. DCA 未启用
    # 检查:
    DCASettings:
     enabled: true # ← 必须为 true!
    
  2. 已达到最大订单数
    # 查看日志:
    "Max orders reached""dca_total_orders >= dca_max_orders"
    # 解决:交易已完成,等待退出或新入场
    
  3. 未达到触发价
    # 查看日志:
    "DCA trigger check: current_price=X trigger_price=Y"
    # LONG:current_price <= trigger_price 才触发
    # SHORT:current_price >= trigger_price 才触发
    # 解决:等待价格进一步移动
    
  4. 余额不足
    # 查看日志:
    "Failed to place order""Insufficient balance"
    # 解决:补充资金或降低 DCA 设置
    

DCA 订单触发过于频繁

症状:几秒/几分钟内连续触发多个 DCA 订单

可能原因

  1. price_deviation_percent 设置过小
    # 当前:
    price_deviation_percent: 0.5 # ❌ 太窄!
    # 修正:
    price_deviation_percent: 5 # ✅ 更合理
    
  2. 闪崩 / 极端波动
    # 价格瞬间跳空 >15% 会一次性触发所有订单 - 正常现象!
    # 预防:在高波动市场使用更宽的间隔
    

平均入场价计算错误

症状:平均入场价与预期不符

检查

日志应显示:
"Parent trade updated with DCA data"
avg_entry=X total_quantity=Y total_invested=Z
手动验证:
平均价 = total_invested ÷ total_quantity
如有差异,检查:
1. 所有子单是否正确保存到数据库?
2. 每次子单后是否更新了母单?
3. 是否有订单下单失败?

DCA 未改善平均入场价

症状:DCA 后的平均价反而比单次入场更差

原因:价格在第一次 DCA 后立即反转

示例:
入场 1:$100(100 单位)
入场 2:$95(120 单位) ← DCA 触发
当前价:$98
不使用 DCA:-2% ($100 → $98)
使用 DCA:-1.4% ($96.36 平均 → $98) ✅ 仍然更优!
但如果价格回到 $100:
不使用 DCA:0%(盈亏平衡)
使用 DCA:+3.8% ($96.36 → $100) ✅ 盈利!

结论:这是正常现象 - DCA 在价格反转时才真正发挥威力!


常见问题(FAQ)

Q1:DCA 可以与资金管理策略一起使用吗?

A:可以!DCA 与资金管理完全兼容:

资金管理计算出的基础规模:$10,000
DCA 乘数:1.2
结果:
- 订单 1:$10,000(来自资金管理)
- 订单 2:$12,000(DCA 乘数)
- 订单 3:$14,400

Q2:DCA 对止盈/止损有何影响?

A

  • 止盈/止损初始基于原始入场价
  • 实际盈亏计算使用平均入场价
  • 这意味着你可能比预期更早达到止盈!✅
原始止盈:$100 +5% = $105
DCA 后平均价:$95
当前价:$102
不使用 DCA:+2%(尚未达止盈)
使用 DCA:+7.4%(止盈已触发!)✅

Q3:每个交易都应该使用 DCA 吗?

A:不!应选择性使用 DCA:

适合 DCA 的场景

  • ✅ 高置信度机会
  • ✅ 强支撑/阻力位
  • ✅ 顺势交易
  • ✅ 高流动性交易对

不适合 DCA 的场景

  • ❌ 置信度低的交易
  • ❌ 新闻驱动的极端波动
  • ❌ 突破型交易(可能继续单边运行)
  • ❌ 低流动性交易对
  • ❌ 超短线剥头皮

Q4:可以手动平掉 DCA 仓位吗?

A:可以。平掉母单会自动平掉整个 DCA 序列。

Q5:DCA 过程中资金不足怎么办?

A:机器人会记录错误并停止挂新 DCA 订单。已有订单继续有效。预防方法:

1. 提前计算最大资金需求
2. 设置 TradeAmountPer 留出缓冲:
   TradeAmountPer: 15% # 只使用账户 15% 资金
   # 账户 $100k → 单次 $15k
   # 4 次 DCA ≈ $80k 最大需求
   # 仍留 $20k 缓冲 ✅

Q6:如何在不冒资金风险的情况下测试 DCA?

A

# 使用模拟模式:
general:
 demo_mode: true
DCASettings:
 enabled: true
 max_orders: 4
 size_multiplier: 1.2
 price_deviation_percent: 5

或运行模拟器:cargo run --bin dca_simulator

Q7:仓位开启后可以修改 DCA 设置吗?

A:修改配置仅对新交易生效。已开启的 DCA 序列会继续使用原有设置。

Q8:最优 size_multiplier 是多少?

A:取决于你的目标:

乘数 风格 风险 资金需求 最适合
1.0 保守 3-4× 新手、不确定市场
1.1-1.2 平衡 中等 4-6× 大多数交易者(推荐)
1.3-1.5 激进 7-12× 经验丰富、高置信度
1.5-2.0 极激进 极高 12-20× 专业玩家、极强机会

Q9:为什么 DCA 订单实际成交价与触发价不同?

A:市价单按当前市场价成交。在波动市场中:

触发价:$9,500
实际成交:$9,502(市场微涨)
这是正常现象!DCA 使用触发价作为“大约此水平”
如需精确入场,可改用限价单(但可能错过成交)

Q10:可以为不同交易对设置不同的 DCA 参数吗?

A:当前 DCA 设置为全局。解决办法:

1. 运行多个机器人实例
2. 每个实例使用不同配置文件
3. 为每个机器人分配特定交易对

总结

快速决策矩阵

你的场景 推荐配置
DCA 新手 max_orders: 3, 乘数: 1.0, 偏差: 5%
有经验交易者 max_orders: 4, 乘数: 1.2, 偏差: 5%
高波动市场 max_orders: 5, 乘数: 1.3, 偏差: 3%
低波动市场 max_orders: 3, 乘数: 1.1, 偏差: 2%
小账户 max_orders: 3, 乘数: 1.0, 偏差: 7%
大账户 max_orders: 5, 乘数: 1.5, 偏差: 3%
剥头皮 max_orders: 3, 乘数: 1.5, 偏差: 1-2%
波段交易 max_orders: 4, 乘数: 1.2, 偏差: 5-10%

最终检查清单

启用 DCA 前,请确保:

  • [ ] 已了解总资金需求
  • [ ] 账户余额能覆盖 max_orders × size_multiplier
  • [ ] 参数适合当前市场波动
  • [ ] 先在模拟模式测试
  • [ ] 已定义止盈/止损策略
  • [ ] 会定期监控 DCA 仓位
  • [ ] 有应对最大回撤的预案

📎 Related Topics