ビットコイン自動売買に挑戦!賢い線「KAMA」ってどうなの?
この作戦は、ビットコインを1時間ごとに見て、賢い線「KAMA」を使って自動で売り買いする方法です。約1年間やってみたらどうなったか、その結果をのぞいてみましょう!
取引数
699
勝率
17.02%
最終リターン
-93.66%
最大DD
93.66%
導入と前提条件
この作戦は、ビットコインを1時間ごとに見て、賢い線「KAMA」を使って自動で売り買いする方法です。約1年間やってみたらどうなったか、その結果をのぞいてみましょう!
【検証】戦略のバックテスト概要
- 戦略名: KAMA Crossover を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 1h
- 期間: 2024-07-21〜2025-08-25(399日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
KAMA Crossover の理論的背景
普通の線は、いつも同じペースで動くんですけど、KAMAは特別です。値段の動きが激しいときはキビキビと、動きがおだやかなときはゆっくりと、自動でペースを変えてくれるんです。まるで生きているみたいですよね。このKAMAと値段のグラフが交わったときを、売り買いの合図にします。値段が線を追い越したら「買い」、下回ったら「売り」という分かりやすいルールです。
具体的な売買ルール(今回の検証)
エントリー条件
- ビットコインの値段が、KAMAの線を下から上に追い越した!その瞬間が「買う」合図です。
- さっきまでKAMAより下だったのに、追い越したときも「買う」チャンスになります。
エグジット条件
- ビットコインの値段が、KAMAの線を上から下に突き抜けた!その瞬間が「売る」合図です。
- さっきまでKAMAより上だったのに、下回ったときも「売る」タイミングになります。
リスク管理
大失敗しないためのルールも大切です。一度にたくさん買わずに少しずつにしたり、もし損が出ても「ここまで損したらやめる」というストップラインを決めておくことが大事です。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『KAMA Crossover』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 699回 |
勝率 | 17.02% |
平均利益 | 1.81% |
平均損失 | -0.84% |
期待値 | -0.39% |
プロフィットファクター | 0.46 |
最大ドローダウン | 93.66% |
最終リターン | -93.66% |
シャープレシオ | -1.19 |
HODL(Buy&Hold) | 69.12% |
HODL戦略との比較
実装コード(Python)
strategy.py
"""
KAMA Crossover Signal
Kaufman Adaptive Moving Average と価格のクロスで判定するのだ。
"""
import pandas as pd
import numpy as np
def _kama(price: pd.Series, er_period: int = 10, fast: int = 2, slow: int = 30) -> pd.Series:
change = price.diff(er_period).abs()
volatility = price.diff().abs().rolling(er_period).sum()
er = change / volatility.replace(0, np.nan)
fast_sc = 2 / (fast + 1)
slow_sc = 2 / (slow + 1)
sc = (er * (fast_sc - slow_sc) + slow_sc) ** 2
kama = price.copy()
kama.iloc[:er_period] = price.iloc[:er_period]
for i in range(er_period, len(price)):
k = sc.iloc[i] if not np.isnan(sc.iloc[i]) else slow_sc ** 2
kama.iloc[i] = kama.iloc[i-1] + k * (price.iloc[i] - kama.iloc[i-1])
return kama
def calculate_kama_signals(df: pd.DataFrame, er_period: int = 10, fast: int = 2, slow: int = 30) -> pd.DataFrame:
out = df.copy()
out['kama'] = _kama(out['close'], er_period, fast, slow)
prev = out['close'].shift(1) - out['kama'].shift(1)
now = out['close'] - out['kama']
out['is_buy'] = (now > 0) & (prev <= 0)
out['is_sell'] = (now < 0) & (prev >= 0)
return out
なぜこの結果になったのか(3つの理由)
- 1たくさん売り買いした(699回)のですが、勝てたのは17%くらいで、勝率がちょっと低かったようです。これだと、なかなかプラスにするのは難しいですよね。
- 21回の取引で、もうかる金額よりも損する金額の方が平均して大きかったようです。全部のもうけ(利益)と全部の損を比べても、損の方が大きくなってしまいました。
- 3最終的には、もとのお金が93%以上も減ってしまいました。一番大きく負けた時も同じくらい減っていて、ほとんどゼロに近くなってしまったんです。だから、この作戦はうまくいかなかったと言えそうです。
この結果から学べる3つの教訓
- 1グラフの線が交わったからといって、必ずもうかるとは限らないんだ、ということがよく分かりました。
- 2勝つ回数が少なくても、一回でドカンと大きく勝てばプラスになる作戦もあります。でも、今回はそうはなりませんでした。
- 3自動で売り買いするプログラムを試す前には、必ず過去のデータで「もしも」の練習をすることが大切です。そして、結果が良くなかったら、すぐに作戦を考え直さないといけない、ということを学びました。
リスク管理の具体的手法
取引量の決め方
一度に使うお金は、持っているお金のほんの少しだけにします。例えば、1000円持っていたら10円とか20円だけ使う、という感じです。そうすれば、もし失敗してもダメージが少なくてすみます。
損失が大きくなったときの対処法
もし、損がどんどんふくらんで、持っているお金の10%みたいに決めておいた金額を超えたら、一度全部ストップします。そして、作戦を練り直す時間を作るのがいいかもしれません。
資金管理の方法
売り買いに使うお金の上限を決めたり、もうかったら少しだけ使う金額を増やし、逆に損したら減らす、といったようにお金全体を上手にコントロールすることが大切です。
改良案の具体的提案
- KAMAの賢さや速さの数字(設定)を、色々な組み合わせで試して、一番うまくいくパターンを探してみます。
- KAMAが交わるタイミングだけじゃなく、他のヒント(例えば「今の勢いはどれくらい?」を教えてくれる道具とか)も一緒に使って、もっと確かなタイミングで売り買いできるようにします。
- 「ここまで損したら売る(損切り)」とか、「ここまでもうかったら売る(利確)」というルールをもっとハッキリ決めて、損は小さく、もうけは大きくできるように工夫します。
実用性の向上(運用上の注意)
- この結果は、あくまで過去のデータで試したものです。これから先も同じようになるとは限りません。
- 全部おまかせの自動売買でも、ときどきは自分でちゃんと動いているか、変なことになっていないかチェックしましょう。
- もし試すなら、最初はなくなってもいいと思えるくらい少ない金額から始めるのが安全です。
検証の透明性と信頼性
- データの出所: このお試し計算で使ったのは、ビットコインの1時間ごとの値段の記録です。
- 検証のやり方: 記事にあるコンピュータープログラムを使って、「もし過去のこの期間にこのルールで売り買いしていたら、どうなっていた?」という計算をしてみました。
- コード: この作戦を動かすためのプログラム(コード)は、記事の中で見ることができます。
- 注意事項: これは「こうすればもうかるよ!」とおすすめするものではありません。投資にはお金が減ってしまう危険もあります。もしやるなら、自分でしっかり考えて、自分の責任でお願いしますね。
よくある質問
Q.KAMAって、どうして「賢い」の?
A.KAMAは、ビットコインの値段の動きが激しいときは早く反応して、動きがおだやかなときはゆっくり反応するように、自動で動き方が変わるからです。だから、その場の状況に合わせるのが得意なんだ。
Q.勝率が低いってことは、ダメな作戦なの?
A.必ずしもそうとは限りません。勝つ回数が少なくても、1回の勝ちでドカンと大きくもうけることができれば、全体でプラスになることもあるんです。でも、この作戦のときは、残念ながらそうはならなかったみたいだね。
Q.PFって何? 1より小さいとダメなの?
A.PFは「プロフィットファクター」といって、「もうかったお金の合計」を「損したお金の合計」で割った数字だよ。1より小さいと、もうけより損のほうが大きかったってことだから、今回の作戦はあまり良くなかったと言えるね。
Q.最大DDって、一番ひどい時の損のこと?
A.その通りです。最大DDは、お金が一番大きく減ってしまった時の割合のこと。これが93.66%ってことは、持っていたお金がほとんどなくなっちゃうくらい、大きく減った瞬間があった、ということなんだ。
Q.この作戦を自分で試すことはできる?
A.記事にのっているプログラムを使えば、自分で過去のデータを使ってお試し計算ができます。でも、本物のお金を使うのは危ないから、まずはごく少ない金額で、よーく注意しながら試してみるのがおすすめだよ。
Q.検証に使用した期間と時間足は?
A.1h足で検証しました。期間は記事内の概要をご確認ください。
Q.最終リターンと最大ドローダウンは?
A.最終リターンは-93.66%、最大DDは93.66%です。
Q.勝率やPFはどの程度?
A.勝率は17.02%、プロフィットファクターは0.46です。
Q.HODLとの比較結果は?
A.HODLは69.12%でした。記事内の比較表をご覧ください。
Q.手数料やスリッページは考慮済み?
A.はい。バックテスト設定の手数料・スリッページを損益に反映しています。
Q.市場環境はトレンド/レンジどちらに近かった?
A.期間中はトレンド優勢と推測されます。
Q.この戦略は初心者でも扱える?
A.基礎的な指標と検証環境の知識があれば扱えます。まずは少額・デモから。
Q.推奨のリスク管理は?
A.最大DDを踏まえた損切り・ポジションサイジングと、システム停止基準の設定を推奨します。
Q.将来の結果は期待できる?
A.過去の結果は将来を保証しません。市場環境やパラメータ適合性に大きく依存します。
Q.改良の方向性は?
A.トレンド・ボラティリティのフィルター併用、パラメータの再最適化、取引頻度の制御を検討してください。