シェア:

ビットコインで勝てる?「上がりすぎ・下がりすぎ」の合図を見つける作戦!

ビットコインの値段は、大きく上がったり下がったりしますよね。「いつ買えばいいの?」「いつ売ればいいの?」と迷うことはありませんか?この作戦は、過去の値段の勢いから、「買いどきかも!」「売りどきかも!」を見つけるための方法です。簡単な合図を見つけて、取引のヒントにしてみましょう!

取引数
2692
勝率
15.01%
最終リターン
-100.00%
最大DD
100.00%

導入と前提条件

ビットコインの値段は、大きく上がったり下がったりしますよね。「いつ買えばいいの?」「いつ売ればいいの?」と迷うことはありませんか?この作戦は、過去の値段の勢いから、「買いどきかも!」「売りどきかも!」を見つけるための方法です。簡単な合図を見つけて、取引のヒントにしてみましょう!

【検証】戦略のバックテスト概要

  • 戦略名: 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)

  1. Python/依存(ccxt, pandas, ta)をインストール
  2. ccxtでBTC/USDTのOHLCVを取得して前処理
  3. 『Stochastic Oscillator』に必要な指標を算出(ta 等)
  4. 閾値・クロス条件から売買シグナルを生成
  5. 手数料・スリッページを加味して検証・評価

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数2692回
勝率15.01%
平均利益0.31%
平均損失-0.49%
期待値-0.37%
プロフィットファクター0.09
最大ドローダウン100%
最終リターン-100%
シャープレシオ-1.32
HODL(Buy&Hold)75.18%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/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. 1この作戦でたくさん取引(2692回)をしましたが、勝てたのは15%くらいと、かなり低かったです。そのため、1回取引するたびに、平均すると少しずつお金が減ってしまう計算になりました。
  2. 2利益の合計と、損の合計を比べると、損のほうが利益よりもずっと大きかったことがわかります。
  3. 3最終的に、もとのお金が全部なくなってしまうという結果になりました。一番お金が減ったときも100%だったので、この作戦をそのまま続けると、お金がゼロになってしまう可能性が高いということです。

この結果から学べる3つの教訓

  1. 1「ストキャスティクス」という道具一つだけで、いつ買ったり売ったりするかを決めるのは、難しい場合があることがわかりました。
  2. 2「売られすぎ」や「買われすぎ」の合図が出たからといって、すぐに反対のことをするのではなく、2本の線が交わるなど、他の条件と組み合わせることが大切だとわかりました。
  3. 3作戦の成績(勝てた回数や利益など)をちゃんと見て、もし結果が悪かったら、そのまま使わずに「どうしたらもっと良くなるかな?」と考える必要があると学びました。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金の量を、持っているお金全体の少しだけ(例えば2%)に決めておきます。こうすれば、もし何回か負けても、すぐにお金が全部なくなることはありません。

損失が大きくなったときの対処法

もし取引で損が大きくなってきたら、それ以上損がふくらまないように、あらかじめ決めたラインで必ず取引をやめます。これで、大きな失敗を防いで、次のチャンスに備えることができます。

資金管理の方法

取引ごとに使うお金の量を決めたり、負けが続いたら使うお金を減らしたりして、全体のお金を上手に管理します。また、利益が出たら、その一部を次の取引に使うなど、賢くお金を増やしていく方法を考えます。

改良案の具体的提案

  • 「売られすぎ」や「買われすぎ」の基準になる数字(20や80)を、そのときのマーケットの様子に合わせて変えてみる。
  • 2本の線が交わる合図だけでなく、他の道具(例えば、値段の平均を表す線など)も一緒に見て、もっと確かな合図が出たときだけ取引をするようにする。
  • 「これ以上損したらやめる」という損切りのルールや、「ここまで利益が出たら確定する」という利確のルールを追加して、お金の管理をもっとしっかりする。

実用性の向上(運用上の注意)

  • この作戦は、ビットコインみたいに値段が大きく動くもので試してみるのがおすすめです。
  • 実際のお金を使う前に、必ず昔のデータで練習(バックテスト)をして、どんな結果になるかを確認しましょう。
  • この作戦だけで100%勝てるわけではありません。いつもマーケットの様子をよく見て、必要なら作戦を直していくことが大切です。

検証の透明性と信頼性

  • データの出所: このお試しに使ったデータは、仮想通貨取引所の昔の値段の記録です。
  • 検証のやり方: 昔の値段のデータを使って、「もしこの作戦を使っていたら、どんな結果になったかな?」というのをコンピューターで計算してみました。
  • コード: この作戦をコンピューターで動かすためのプログラムは、だれでも見られるように公開されています。
  • 注意事項: この作戦や昔のデータでのお試し結果は、将来も同じように利益が出ることを約束するものではありません。投資にはお金が減ってしまう危険(リスク)が必ずありますので、ご自身の判断と責任でお願いします。

よくある質問

Q.ストキャスティクスって何?

A.過去の値段の動きを見て、今の値段が「上がりすぎ」か「下がりすぎ」かを教えてくれる便利な道具のことだよ。

Q.%Kと%Dって何が違うの?

A.%Kは今の勢いを素早く表す線で、%Dはその%Kの動きを少しなめらかにした線だよ。この2本の線が交わるときが、売ったり買ったりする大事な合図になることがあるんだ。

Q.「売られすぎ」「買われすぎ」って、どうやってわかるの?

A.%Kという線が、あらかじめ決めた低い数字(例えば20)より下に行ったら「売られすぎ」、高い数字(例えば80)より上に行ったら「買われすぎ」と考えるんだ。

Q.勝率が低いってことは、全然勝てないの?

A.そういうわけじゃないけど、この作戦では、勝つ回数よりも負ける回数の方がずっと多かったということ。だから、負けたときの損をできるだけ小さくする工夫がとても大切になるんだよ。

Q.この作戦で、本当にビットコインを買ったり売ったりしていいの?

A.今回の結果だけを見ると、そのまま使うのはちょっと危ないかもしれないね。勝つ確率が低かったから、ルールを工夫したり、「損切り」という「損が出たらすぐにやめる」ルールをしっかり守るなど、作戦をもっと良くしてから使うのがおすすめだよ。

Q.検証に使用した期間と時間足は?

A.5m足で検証しました。期間は記事内の概要をご確認ください。

Q.最終リターンと最大ドローダウンは?

A.最終リターンは-100.00%、最大DDは100.00%です。

Q.勝率やPFはどの程度?

A.勝率は15.01%、プロフィットファクターは0.09です。

Q.HODLとの比較結果は?

A.HODLは75.18%でした。記事内の比較表をご覧ください。

Q.手数料やスリッページは考慮済み?

A.はい。バックテスト設定の手数料・スリッページを損益に反映しています。

Q.市場環境はトレンド/レンジどちらに近かった?

A.期間中はトレンド優勢と推測されます。

Q.この戦略は初心者でも扱える?

A.基礎的な指標と検証環境の知識があれば扱えます。まずは少額・デモから。

Q.推奨のリスク管理は?

A.最大DDを踏まえた損切り・ポジションサイジングと、システム停止基準の設定を推奨します。

Q.将来の結果は期待できる?

A.過去の結果は将来を保証しません。市場環境やパラメータ適合性に大きく依存します。

Q.改良の方向性は?

A.トレンド・ボラティリティのフィルター併用、パラメータの再最適化、取引頻度の制御を検討してください。

著者情報