ビットコインで勝てる?「上がりすぎ・下がりすぎ」の合図を見つける作戦!
ビットコインの値段は、大きく上がったり下がったりしますよね。「いつ買えばいいの?」「いつ売ればいいの?」と迷うことはありませんか?この作戦は、過去の値段の勢いから、「買いどきかも!」「売りどきかも!」を見つけるための方法です。簡単な合図を見つけて、取引のヒントにしてみましょう!
導入と前提条件
ビットコインの値段は、大きく上がったり下がったりしますよね。「いつ買えばいいの?」「いつ売ればいいの?」と迷うことはありませんか?この作戦は、過去の値段の勢いから、「買いどきかも!」「売りどきかも!」を見つけるための方法です。簡単な合図を見つけて、取引のヒントにしてみましょう!
【検証】戦略のバックテスト概要
- 戦略名: Stochastic Oscillator を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 5m
- 期間: 2024-08-25〜2025-08-25(364日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
Stochastic Oscillator の理論的背景
世の中のものの値段には、上がったり下がったりする「勢い」があります。「ストキャスティクス」は、この勢いを数字で表してくれる道具です。ある期間のいちばん高い値段といちばん安い値段を使って、今の値段がどのあたりにいるかを見ます。もし値段が安い方に近ければ「売られすぎ」、高い方に近ければ「買われすぎ」と考えます。この「売られすぎ」「買われすぎ」の合図と、2本の線が交わる合図を組み合わせることで、より成功しそうなタイミングを見つけようというのが、この作戦の考え方です。
具体的な売買ルール(今回の検証)
エントリー条件
- 値段が「売られすぎだよ」という合図(20という数字より下)になった後、速い方の線が遅い方の線を下から上に追い抜いたときに買います(買いの合図)。
エグジット条件
- 値段が「買われすぎだよ」という合図(80という数字より上)になった後、速い方の線が遅い方の線を上から下に追い抜いたときに売って、取引を終わりにします(売りの合図)。
リスク管理
もし予想と反対に値段が動いてしまったら、大きな損をしないように、あらかじめ決めておいた金額まで損したらすぐに取引をやめます。例えば、「1回の取引で失ってもいいのは、持っているお金の2%まで」と決めておくことで、一度の失敗で全部のお金を失うことを防ぎます。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Stochastic Oscillator』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 2692回 |
勝率 | 15.01% |
平均利益 | 0.31% |
平均損失 | -0.49% |
期待値 | -0.37% |
プロフィットファクター | 0.09 |
最大ドローダウン | 100% |
最終リターン | -100% |
シャープレシオ | -1.32 |
HODL(Buy&Hold) | 75.18% |
HODL戦略との比較
実装コード(Python)
#!/usr/bin/env python3
"""
ストキャスティクスオシレーター戦略
%Kと%Dのクロスオーバーとオーバーボート/オーバーソールドを利用
"""
import pandas as pd
import numpy as np
def calculate_stochastic_signals(df: pd.DataFrame, k_period: int = 14, d_period: int = 3, oversold: int = 20, overbought: int = 80) -> pd.DataFrame:
"""
ストキャスティクスシグナルを生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
k_period : int
%K計算期間(デフォルト: 14)
d_period : int
%D(移動平均)期間(デフォルト: 3)
oversold : int
売られすぎ水準(デフォルト: 20)
overbought : int
買われすぎ水準(デフォルト: 80)
Returns:
--------
pd.DataFrame
シグナル列が追加されたDataFrame
"""
df = df.copy()
# %Kの計算
lowest_low = df['low'].rolling(window=k_period).min()
highest_high = df['high'].rolling(window=k_period).max()
df['%K'] = 100 * ((df['close'] - lowest_low) / (highest_high - lowest_low))
# %D(%Kの移動平均)の計算
df['%D'] = df['%K'].rolling(window=d_period).mean()
# スローストキャスティクス(%Dをさらに平滑化)
df['slow_%D'] = df['%D'].rolling(window=d_period).mean()
# オーバーボート/オーバーソールドゾーン
df['is_oversold'] = df['%K'] < oversold
df['is_overbought'] = df['%K'] > overbought
# クロスオーバーシグナル(オーバーソールドゾーンでの買い、オーバーボートゾーンでの売り)
df['is_buy'] = (
(df['%K'] > df['%D']) &
(df['%K'].shift(1) <= df['%D'].shift(1)) &
(df['is_oversold'].shift(1)) # 前回オーバーソールドゾーンにいた
)
df['is_sell'] = (
(df['%K'] < df['%D']) &
(df['%K'].shift(1) >= df['%D'].shift(1)) &
(df['is_overbought'].shift(1)) # 前回オーバーボートゾーンにいた
)
# NaN値をFalseに置換
df['is_buy'] = df['is_buy'].fillna(False)
df['is_sell'] = df['is_sell'].fillna(False)
# デバッグ情報
print(f"ストキャスティクス: K期間={k_period}, D期間={d_period}")
print(f"オーバーソールド={oversold}, オーバーボート={overbought}")
print(f"買いシグナル数: {df['is_buy'].sum()}")
print(f"売りシグナル数: {df['is_sell'].sum()}")
return df
なぜこの結果になったのか(3つの理由)
- 1この作戦でたくさん取引(2692回)をしましたが、勝てたのは15%くらいと、かなり低かったです。そのため、1回取引するたびに、平均すると少しずつお金が減ってしまう計算になりました。
- 2利益の合計と、損の合計を比べると、損のほうが利益よりもずっと大きかったことがわかります。
- 3最終的に、もとのお金が全部なくなってしまうという結果になりました。一番お金が減ったときも100%だったので、この作戦をそのまま続けると、お金がゼロになってしまう可能性が高いということです。
この結果から学べる3つの教訓
- 1「ストキャスティクス」という道具一つだけで、いつ買ったり売ったりするかを決めるのは、難しい場合があることがわかりました。
- 2「売られすぎ」や「買われすぎ」の合図が出たからといって、すぐに反対のことをするのではなく、2本の線が交わるなど、他の条件と組み合わせることが大切だとわかりました。
- 3作戦の成績(勝てた回数や利益など)をちゃんと見て、もし結果が悪かったら、そのまま使わずに「どうしたらもっと良くなるかな?」と考える必要があると学びました。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金の量を、持っているお金全体の少しだけ(例えば2%)に決めておきます。こうすれば、もし何回か負けても、すぐにお金が全部なくなることはありません。
損失が大きくなったときの対処法
もし取引で損が大きくなってきたら、それ以上損がふくらまないように、あらかじめ決めたラインで必ず取引をやめます。これで、大きな失敗を防いで、次のチャンスに備えることができます。
資金管理の方法
取引ごとに使うお金の量を決めたり、負けが続いたら使うお金を減らしたりして、全体のお金を上手に管理します。また、利益が出たら、その一部を次の取引に使うなど、賢くお金を増やしていく方法を考えます。
改良案の具体的提案
- 「売られすぎ」や「買われすぎ」の基準になる数字(20や80)を、そのときのマーケットの様子に合わせて変えてみる。
- 2本の線が交わる合図だけでなく、他の道具(例えば、値段の平均を表す線など)も一緒に見て、もっと確かな合図が出たときだけ取引をするようにする。
- 「これ以上損したらやめる」という損切りのルールや、「ここまで利益が出たら確定する」という利確のルールを追加して、お金の管理をもっとしっかりする。
実用性の向上(運用上の注意)
- この作戦は、ビットコインみたいに値段が大きく動くもので試してみるのがおすすめです。
- 実際のお金を使う前に、必ず昔のデータで練習(バックテスト)をして、どんな結果になるかを確認しましょう。
- この作戦だけで100%勝てるわけではありません。いつもマーケットの様子をよく見て、必要なら作戦を直していくことが大切です。
検証の透明性と信頼性
- データの出所: このお試しに使ったデータは、仮想通貨取引所の昔の値段の記録です。
- 検証のやり方: 昔の値段のデータを使って、「もしこの作戦を使っていたら、どんな結果になったかな?」というのをコンピューターで計算してみました。
- コード: この作戦をコンピューターで動かすためのプログラムは、だれでも見られるように公開されています。
- 注意事項: この作戦や昔のデータでのお試し結果は、将来も同じように利益が出ることを約束するものではありません。投資にはお金が減ってしまう危険(リスク)が必ずありますので、ご自身の判断と責任でお願いします。