ビットコイン、いつ買っていつ売る?「コップ曲線」で探る作戦
ビットコインの値段が、いつ上がっていつ下がるか、見つけるのはとっても難しいですよね。この作戦は「コップ曲線」という道具を使って、値段のパワーの向きを見て、上手に売り買いするタイミングを探るものです。今回は、1時間ごとの値動きを見て、約4ヶ月間この作戦を試してみた結果を紹介しますね。
導入と前提条件
ビットコインの値段が、いつ上がっていつ下がるか、見つけるのはとっても難しいですよね。この作戦は「コップ曲線」という道具を使って、値段のパワーの向きを見て、上手に売り買いするタイミングを探るものです。今回は、1時間ごとの値動きを見て、約4ヶ月間この作戦を試してみた結果を紹介しますね。
【検証】戦略のバックテスト概要
- 戦略名: Coppock Curve を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 1h
- 期間: 2025-04-28〜2025-08-26(119日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
Coppock Curve の理論的背景
「値段って、急に上がったり下がったりするんじゃなくて、しばらく同じ方向に動き続けることが多いよね」という考え方が元になっています。まず、最近の値段がどれくらい変わったかを、短い期間と、もう少し長い期間の2つで見ます。この2つの変化を合体させることで、今の勢いと、これまでの流れの両方がわかるようになります。そして、その合体した数字のギザギザを、特別な計算でなめらかな線にします。これが「コップ曲線」の正体です。この線がゼロより上に行ったら、値段が上がるパワーが強まってきた!と考えて「買う」んです。逆にゼロより下に行ったら、値段が下がるパワーが強まってきたかも…と考えて「売る」んです。
具体的な売買ルール(今回の検証)
エントリー条件
- コップ曲線が、ゼロのラインを下から上に突き抜けたときです。
- このサインが出たら、新しくビットコインを買います。
エグジット条件
- コップ曲線が、ゼロのラインを上から下に突き抜けたときです。
- このサインが出たら、持っていたビットコインを売って、取引を終えます。
リスク管理
この作戦、実は勝てる確率は約23%と、ちょっと低めです。だから、一回の取引で大きく負けないようにすることが、すごく大事になります。例えば、「一回に使うお金はこれだけ」と決めたり、「これ以上損したら、今回はやめる」という自分ルールを作っておくのがおすすめです。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Coppock Curve』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 154回 |
勝率 | 23.38% |
平均利益 | 1.15% |
平均損失 | -0.87% |
期待値 | -0.4% |
プロフィットファクター | 0.4 |
最大ドローダウン | 46.51% |
最終リターン | -46.37% |
シャープレシオ | -1.24 |
HODL(Buy&Hold) | 16.67% |
HODL戦略との比較
実装コード(Python)
"""
Coppock Curve Trading Signal
長期モメンタム指標によるトレンド判定
"""
import pandas as pd
import numpy as np
def calculate_coppock_curve_signals(df: pd.DataFrame,
roc1_period: int = 14,
roc2_period: int = 11,
wma_period: int = 10) -> pd.DataFrame:
"""
Coppock Curve戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
roc1_period : int
第1 ROC期間(デフォルト: 14)
roc2_period : int
第2 ROC期間(デフォルト: 11)
wma_period : int
WMA期間(デフォルト: 10)
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# Rate of Change計算
df['roc1'] = ((df['close'] - df['close'].shift(roc1_period)) / df['close'].shift(roc1_period)) * 100
df['roc2'] = ((df['close'] - df['close'].shift(roc2_period)) / df['close'].shift(roc2_period)) * 100
# ROCの合計
df['roc_sum'] = df['roc1'] + df['roc2']
# 加重移動平均
weights = np.arange(1, wma_period + 1)
df['coppock'] = df['roc_sum'].rolling(window=wma_period).apply(lambda x: np.dot(x, weights) / weights.sum(), raw=True)
# シグナル初期化
df['signal'] = 0
df['is_buy'] = False
df['is_sell'] = False
position = 0
for i in range(max(roc1_period, roc2_period) + wma_period, len(df)):
# 買いシグナル(Coppock Curveがゼロを上抜け)
if position <= 0 and df['coppock'].iloc[i] > 0 and df['coppock'].iloc[i-1] <= 0:
df.loc[df.index[i], 'is_buy'] = True
df.loc[df.index[i], 'signal'] = 1
position = 1
# 売りシグナル(Coppock Curveがゼロを下抜け)
elif position >= 0 and df['coppock'].iloc[i] < 0 and df['coppock'].iloc[i-1] >= 0:
df.loc[df.index[i], 'is_sell'] = True
df.loc[df.index[i], 'signal'] = -1
position = -1
else:
df.loc[df.index[i], 'signal'] = position
df['signal'] = df['signal'].fillna(0)
return df
def get_strategy_name() -> str:
"""戦略名を返す"""
return "Coppock Curve"
def get_strategy_description() -> str:
"""戦略の説明を返す"""
return "長期モメンタム指標によるトレンド判定戦略"
なぜこの結果になったのか(3つの理由)
- 1勝つ確率が23%くらいで、4回に1回くらいしか勝てなかったからです。
- 21回取引するごとに、平均して少しずつお金が減ってしまう計算だったからです。
- 3儲かった金額よりも、損した金額のほうが大きかったからです。
この結果から学べる3つの教訓
- 1「コップ曲線」という道具一つだけだと、うまく勝てないこともあるんだ、ということがわかります。
- 2勝つ回数が少なくてもトータルでプラスになる作戦もあるけど、今回のやり方ではうまくいきませんでした。
- 3たくさん取引(154回)したのに、結果的に持っていたお金が半分近くも減ってしまいました。これは、小さな負けが積み重なってしまったからですね。
リスク管理の具体的手法
取引量の決め方
一回の取引で、もし負けても全体のお金の1%か2%くらいの損で済むように、買う量を調整します。これがとっても大事です。
損失が大きくなったときの対処法
もし取引の途中で、全体のお金が10%とか20%も減ってしまったら、一度取引をお休みします。大きな失敗を避けるためのブレーキです。
資金管理の方法
もし取引で勝って儲かっても、そのお金を全部次の取引に使わないようにします。一部はとっておいたり、別の安全なことに使ったりして、大切なお金全体を守ります。
改良案の具体的提案
- コップ曲線を計算するときの数字(期間の長さ)を変えてみて、もっと良い成績になる組み合わせを探してみる。
- 線がゼロを越えたらすぐに売り買いするんじゃなくて、「値段が大きく動いたときだけ」みたいに、別のルールも付け加えてみる。
- 値段がどんどん上がったり下がったりする時だけじゃなくて、あまり値段が変わらない「横ばい」の時でもうまくいくような工夫を考えてみる。
実用性の向上(運用上の注意)
- この作戦の成績は、あくまでも過去のデータで試した結果です。未来も同じようにうまくいくとは限りません。
- いきなり大きなお金でやるのは危険です。まずは、練習用のツールを使ったり、すごく小さい金額で試してみたりするのがおすすめです。
- ビットコインの値段の動き方は、いつも同じではありません。だから、この作戦が今もうまくいくか、時々チェックして、必要ならやり方を変えることも大切です。
検証の透明性と信頼性
- データの出所: この説明は、コンピューターで過去のデータを使ってシミュレーションした結果をもとにしています。
- 検証のやり方: 2025年4月28日から8月26日までの、ビットコインの1時間ごとの値段のデータを使って、プログラムで本当にこの作戦がうまくいったかを確かめました。
- コード: どんなプログラムで計算したかは、見ることができるようになっています。
- 注意事項: このお話は、投資をおすすめするためのものではありません。投資は、お金が増えることもあれば、減ってしまうこともある危険なものです。必ず自分でよく考えて、自分の責任で行ってくださいね。