ドルコスト平均法(積立)ボットの作り方|BTCで自動買い増しを実装する
※本記事にはアフィリエイト広告(プロモーション)が含まれています。
自動売買ボットの基本を解説した記事で軽く触れた「ドルコスト平均法(積立)」戦略について、今回は実装レベルまで深掘りします。グリッドトレードやトレンドフォローに比べると地味な戦略ですが、実装がシンプルで壊れにくく、放置運用との相性がとても良い戦略です。
ドルコスト平均法(積立)ボットとは
ドルコスト平均法(DCA: Dollar Cost Averaging)は、価格を予測せず「一定間隔で・一定額を」買い続ける手法です。相場が高いときは少なく、安いときは多くBTCを買うことになるため、結果的に平均取得単価がならされます。
厳密には売買判断を行わないため「トレード戦略」とは呼びにくい面もありますが、ボット化することで次のメリットが得られます。
- 感情を挟まず、決めたルール通りに淡々と買い続けられる
- ロジックが単純なので、バグや想定外の挙動が起きにくい
- 完全放置でも「握力」を試されずに積立を継続できる
なぜBTCの積立と相性がいいのか
BTCは短期的な値動きが大きい一方、数年単位で見ると「高値づかみのタイミングを気にしすぎるより、淡々と買い続けたほうが精神的に楽」という声をよく聞きます。筆者自身、グリッドボットとは別枠で積立ボットを小さく回していますが、値動きを気にする頻度が圧倒的に減ったのは実感としてあります。
ただし「積立すれば必ず儲かる」わけではない点は誤解のないように強調しておきます。あくまで平均取得単価を平準化する手法であり、相場全体が下落し続ければ含み損は当然発生します。
積立ボットの設計:買い増しロジック
基本ロジック:一定間隔・一定額
最もシンプルな設計は次の3行で説明できます。
- 決めた間隔(例:毎日/毎週)ごとに
- 決めた金額分だけ
- 成行または指値でBTCを買う
これだけでも十分に機能します。まずはここから始めて、慣れてきたら応用ロジックを足していくのがおすすめです。
タイミング設計:曜日・時刻をどう決めるか
「いつ買うか」に唯一の正解はありませんが、設計時に考えておきたいポイントは以下の通りです。
- 間隔: 毎日だと1回あたりの金額が小さくなり手数料負けしやすく、毎月1回だとタイミング依存が強くなります。筆者は「毎週固定曜日」で運用しています
- 時刻: BTCは24時間動いていますが、取引所のメンテナンス時間や、自分がログを確認しやすい時間帯を避けて設定すると運用が楽です
- 月内分散: 「毎月1日にまとめて買う」より「毎週買う」ほうが、月内の価格変動もならされます
価格下落時に買い増し量を増やす応用ロジック
慣れてきたら、次のような応用も検討できます。
- 直近の移動平均から一定%以上下落していたら、購入額を増額する
- 逆に一定%以上上昇していたら、購入額を減額(またはスキップ)する
これは「バリュー平均法」に近い考え方です。ロジックが複雑になるほどバグの温床にもなるため、まずは基本のDCAで運用実績を積んでから、段階的に足していくことをおすすめします。
Pythonでの実装例
ここからは実装の話です。取引所とのやり取りには ccxt を使います。ccxtの基本的な使い方はccxtでのボット開発入門で解説しているので、初めての方は先にそちらをご覧ください。
ccxtで買い注文を出す最小コード
import ccxt
import os
exchange = ccxt.mexc({
"apiKey": os.environ["MEXC_API_KEY"],
"secret": os.environ["MEXC_API_SECRET"],
})
SYMBOL = "BTC/USDT"
BUY_AMOUNT_USDT = 10 # 1回あたりの購入額
def buy_dca():
ticker = exchange.fetch_ticker(SYMBOL)
price = ticker["last"]
amount_btc = round(BUY_AMOUNT_USDT / price, 6)
order = exchange.create_market_buy_order(SYMBOL, amount_btc)
print(f"[DCA] {amount_btc} BTC を約 {price} USDT で購入")
return order
if __name__ == "__main__":
buy_dca()
金額ベースで買いたい場合、取引所によっては「金額指定」の注文がAPIで直接サポートされていることもあります。BTC数量への換算誤差(端数)が気になる場合は、取引所側の仕様を確認してみてください。
なお筆者はAPIキーの取引権限のみを付与し、出金権限は必ず外しています。積立ボットは長期間キーを使い続けることになるため、この設定は特に徹底しておきたいポイントです。
定期実行の仕組み(cron/schedule)
積立ボットは「決まったタイミングで実行される」ことが本質なので、常駐プロセスにする必要は必ずしもありません。cronで十分機能します。
# 毎週月曜9時に実行
0 9 * * 1 /usr/bin/python3 /home/ubuntu/bot/dca_buy.py >> /home/ubuntu/bot/dca.log 2>&1
Pythonの schedule ライブラリで常駐プロセス化する方法もありますが、積立ボットのようにシンプルな定期実行であれば、cronのほうが「落ちていても再起動すれば直る」という意味で堅牢です。
二重発注を防ぐ工夫
積立ボットで実際に起きがちな事故が「同じタイミングで二重に注文してしまう」パターンです。cronの実行が重なったり、手動実行とcronがかぶったりすると発生します。
対策として、実行前にロックファイルを確認する処理を入れておくと安全です。
import os
import sys
LOCK_FILE = "/tmp/dca_bot.lock"
if os.path.exists(LOCK_FILE):
print("既に実行中、または前回異常終了しています。処理を中断します。")
sys.exit(1)
with open(LOCK_FILE, "w") as f:
f.write("running")
try:
buy_dca()
finally:
os.remove(LOCK_FILE)
さらに、実行ログに「最後に買った日時」を残しておき、想定より短い間隔で再実行されそうになったらスキップするような二重チェックも入れておくと安心です。
実運用時の注意点
手数料の影響
積立ボットは1回あたりの購入額が小さくなりがちなため、手数料の割合が相対的に大きくなりやすい点に注意が必要です。1回1,000円の購入で手数料が0.1%なら1円ですが、これが毎日発生すると年間の影響は無視できません。「間隔を広げて1回あたりの金額を大きくする」のも有効な対策です。
APIキー管理
積立ボットは長期間、同じAPIキーを使い続けることになります。定期的にキーをローテーションする、権限を必要最小限に絞るなど、自動売買ボットの基本の記事で触れた基本原則は積立ボットでも変わらず重要です。
相場急変時の挙動確認
急落・急騰時に成行注文を出すと、スリッページ(想定価格とのズレ)が大きくなることがあります。積立ボットでは基本的に成行で問題ありませんが、値動きが荒い場面での約定価格をログに残しておき、後から確認できるようにしておくと安心です。
資金管理・入金設計
積立ボットは「継続すること」が前提の戦略です。取引所の口座残高が途中で尽きてエラーになる、というのが実運用でありがちな失敗です。残高不足時はエラー通知を出し、注文をスキップして次回に持ち越すような設計にしておくと、放置していても安全に運用できます。
cronでの定期実行も、結局は「サーバーが動き続けていること」が前提になります。24時間稼働の環境構築についてはVPSでボットを24時間動かす方法で詳しく解説しています。
なお、MT4のEAで似たような積立的ロジックを組みたい場合は、PythonのLinux VPSではなくWindows系のFX特化VPSのほうが相性が良いケースもあります。用途に応じて選んでみてください。
まとめ
- 積立(DCA)ボットは「一定間隔・一定額で買う」だけのシンプルな戦略で、実装難易度が低く放置運用に向いている
- タイミング設計(間隔・時刻)と、二重発注防止の仕組みは地味だが実運用で重要
- 手数料・APIキー管理・資金管理といった基本は他の戦略と共通して押さえておく必要がある
まずは最小構成のDCAボットを小さい金額で動かしてみて、慣れてきたら応用ロジックや通知の仕組みを足していくのがおすすめです。ボット開発の基礎から見直したい方は自動売買ボットの基本記事、ccxtの使い方はccxtでのボット開発入門もあわせてご覧ください。