ビットコインの買いどき・売りどきを見つける作戦!2本の線が交わるのを見てみよう
この作戦は、ビットコインを1時間ごとに見て、いつ買ったり売ったりすればいいかを見つける方法です。2つの特別な線が交わるのを「合図」にします。このやり方で、過去の約1年間の成績がどうだったかを調べてみました。
導入と前提条件
この作戦は、ビットコインを1時間ごとに見て、いつ買ったり売ったりすればいいかを見つける方法です。2つの特別な線が交わるのを「合図」にします。このやり方で、過去の約1年間の成績がどうだったかを調べてみました。
【検証】戦略のバックテスト概要
- 戦略名: DEMA Crossover を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 1h
- 期間: 2024-07-21〜2025-08-25(399日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
DEMA Crossover の理論的背景
「移動平均線」というのは、これまでの値段の平均を線にしたグラフのことです。これを見ると、値段が上がっている途中なのか、下がっている途中なのか、その「流れ」がわかります。「DEMA」は、その中でも特に今の値動きに素早く反応する特別な線です。この作戦では、速さが違う2本の線が交わった瞬間を、「流れが変わるかもしれない!」という合図として使います。速い線が遅い線を上に突き抜けたら、これから値段が上がる勢いが出てきたと考えて「買い」の合図にします。逆に下に突き抜けたら、下がる勢いが出てきたと考えて「売り」の合図にするんです。
具体的な売買ルール(今回の検証)
エントリー条件
- 「買い」の合図:速い動きの線が、遅い動きの線を下から上に追い越したときです。
- (※ポイントは、ちょうど今、追い越した!という瞬間をねらうことです。)
エグジット条件
- 「買い」で持っているのをやめるタイミングは、速い線が遅い線を下に抜けてしまったときです。
- 「売り」で持っているのをやめるタイミングは、速い線が遅い線を上に抜けたときです。
リスク管理
この作戦では、大きな損をしないための工夫が必要です。例えば、一度に大きなお金を使わないことや、もし損がある金額を超えたら、その日はもう取引をやめる、といったルールを決めておくことが考えられます。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『DEMA Crossover』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 280回 |
勝率 | 29.64% |
平均利益 | 2.24% |
平均損失 | -1.37% |
期待値 | -0.3% |
プロフィットファクター | 0.69 |
最大ドローダウン | 61.78% |
最終リターン | -59.12% |
シャープレシオ | -0.37 |
HODL(Buy&Hold) | 69.13% |
HODL戦略との比較
実装コード(Python)
"""
DEMA Crossover Signal
二重指数移動平均のクロスで判定するのだ。
"""
import pandas as pd
def _ema(s: pd.Series, n: int) -> pd.Series:
return s.ewm(span=n, adjust=False).mean()
def _dema(s: pd.Series, n: int) -> pd.Series:
ema1 = _ema(s, n)
ema2 = _ema(ema1, n)
return 2 * ema1 - ema2
def calculate_dema_signals(df: pd.DataFrame, fast: int = 12, slow: int = 26) -> pd.DataFrame:
out = df.copy()
out['dema_fast'] = _dema(out['close'], fast)
out['dema_slow'] = _dema(out['close'], slow)
out['dema_prev_fast'] = out['dema_fast'].shift(1)
out['dema_prev_slow'] = out['dema_slow'].shift(1)
out['is_buy'] = (out['dema_fast'] > out['dema_slow']) & (out['dema_prev_fast'] <= out['dema_prev_slow'])
out['is_sell'] = (out['dema_fast'] < out['dema_slow']) & (out['dema_prev_fast'] >= out['dema_prev_slow'])
out.drop(['dema_prev_fast','dema_prev_slow'], axis=1, inplace=True)
return out
なぜこの結果になったのか(3つの理由)
- 1この作戦の勝った割合(勝率)は、約30%と低めでした。これは、線が交わっても、それが「ウソの動き(ダマシ)」ですぐに反対に動いてしまい、損することが多かったからかもしれません。
- 2儲けと損のバランスを見ると、全体として利益を出すのが難しい作戦だったと言えます。
- 3最終的に、最初のお金が半分以上減ってしまう(-59.12%)という結果でした。一番悪いときには、元のお金が60%以上も減ってしまった瞬間もあり、この作戦の弱点がわかりました。
この結果から学べる3つの教訓
- 1移動平均線が交わるのを見るだけ、という簡単な作戦では、勝つのが難しい場合があることを学びました。
- 2「ウソの動き」にだまされずに、本当に流れが変わる瞬間を見つけることが大事だとわかりました。
- 31つの作戦だけに頼らず、他の道具と組み合わせたり、大きな損をしないためのルールをしっかり作ったりすることが必要だと感じました。
リスク管理の具体的手法
取引量の決め方
一度の取引で使うお金は、持っているお金全体の1%か2%くらいにしましょう。そうすれば、もし負けても、全体のお金への影響は小さくてすみます。
損失が大きくなったときの対処法
もし全体のお金が10%減ってしまったら、その日はもう取引をやめる、というようなルールを決めます。こうすることで、大きな損を防ぎます。
資金管理の方法
儲かっていても調子に乗って取引の量を増やしたり、損しているからと焦って取り返そうとしたりせず、いつも同じルールを守ることが大切です。
改良案の具体的提案
- 線が交わるだけでなく、他の道具(例えば、今の値段が買われすぎか売られすぎかを見るものなど)も一緒に見て、もっと確実な合図を探すようにします。
- 「これ以上損したら絶対にやめる」というライン(損切り)を決めて、そのルールを厳しく守るようにします。
- 一度に使うお金の量を少なくして、もし負けても大きなダメージを受けないように工夫します。
実用性の向上(運用上の注意)
- この作戦だけで判断しないで、必ず他の分析方法と組み合わせて考えるようにしましょう。
- うれしかったり、くやしかったり、気持ちで判断するのではなく、決めたルール通りに冷静に取引することが一番大切です。
- まずはお小遣い程度の少ないお金で試してみて、自分に合っているか、ルールを守れるかを確認してから、少しずつ金額を増やしていくのがおすすめです。
検証の透明性と信頼性
- データの出所: このお話は、過去のビットコインの1時間ごとの値段のデータを使って調べています。
- 検証のやり方: 昔の値段のデータを使って、「もしこの作戦で取引していたらどうなっていたかな?」と試してみました。これをシミュレーションと言います。
- コード: この計算をするためのプログラムは、誰でも見られるようになっています。
- 注意事項: 注意:これは「こうすれば儲かるよ」とお勧めするものではありません。投資には、お金が減ってしまうリスクがあります。最後は必ず自分で考えて判断してくださいね。