シェア:

ビットコイン値段の勢いをチェック!「価格オシレーター作戦」をわかりやすく説明します

この作戦は、ビットコインの「値段の勢い」を見て、いつ買って、いつ売るかを決めるやり方です。1時間ごとの値段の動きを見て、うまく利益を出すことを目指します。難しい言葉は使わないで説明しますね!

取引数
98
勝率
26.53%
最終リターン
-31.15%
最大DD
32.22%

導入と前提条件

この作戦は、ビットコインの「値段の勢い」を見て、いつ買って、いつ売るかを決めるやり方です。1時間ごとの値段の動きを見て、うまく利益を出すことを目指します。難しい言葉は使わないで説明しますね!

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

  • 戦略名: Price Oscillator を使用したトレンド追従戦略
  • 対象銘柄: BTC/USDT
  • 時間足: 1h
  • 期間: 2025-04-28〜2025-08-26(119日間)
  • 初期資金: $10,000
  • 手数料・スリッページ: 0.1% / 0.1%
  • 取引所: binance

Price Oscillator の理論的背景

この作戦は、「流れに乗る」という考え方が基本です。値段が上がっている大きな波に乗って買い、下がっている波に乗って売る、というイメージです。価格オシレーターは、最近の値段の動きと、少し前の値段の動きを比べて、今の勢いをはかる道具なんです。最近の平均値段が、前の平均値段より高くなると「勢いがついてきた!」というサイン。逆に低くなると「元気がなくなってきたかも」というサインになります。この勢いの変化を見て、利益を出すチャンスを探します。

具体的な売買ルール(今回の検証)

エントリー条件

  • 「買うタイミング」はいつ?:値段の勢いを示す線が、目安の線を下から上に追い抜いたときです。ただし、まだビットコインを持っていない時に限ります。

エグジット条件

  • 「売るタイミング」はいつ?:逆に、勢いの線が目安の線を上から下に突き抜けたときです。これは、持っているビットコインを売るサインになります。

リスク管理

気をつけること:今回のテストでは、この作戦を続けると、だんだんお金が減ってしまう(最終損益-31.15%)という結果でした。もし試すなら、むやみに取引の回数を増やさず、1回で使うお金をすごく少なくするなどの工夫が必要です。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数98回
勝率26.53%
平均利益1.33%
平均損失-0.99%
期待値-0.37%
プロフィットファクター0.49
最大ドローダウン32.22%
最終リターン-31.15%
シャープレシオ-0.77
HODL(Buy&Hold)16.66%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Price Oscillator Trading Signal
価格オシレーターによるトレンド判定
"""
import pandas as pd
import numpy as np


def calculate_price_oscillator_signals(df: pd.DataFrame,
                                    short_period: int = 12,
                                    long_period: int = 26) -> pd.DataFrame:
    """
    Price Oscillator戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    short_period : int
        短期移動平均期間(デフォルト: 12)
    long_period : int
        長期移動平均期間(デフォルト: 26)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # 移動平均
    df['short_ma'] = df['close'].rolling(window=short_period).mean()
    df['long_ma'] = df['close'].rolling(window=long_period).mean()
    
    # Price Oscillator
    df['po'] = df['short_ma'] - df['long_ma']
    
    # シグナルライン
    df['po_signal'] = df['po'].rolling(window=9).mean()
    
    # ヒストグラム
    df['po_hist'] = df['po'] - df['po_signal']
    
    # シグナル初期化
    df['signal'] = 0
    df['is_buy'] = False
    df['is_sell'] = False
    
    position = 0
    
    for i in range(long_period + 9, len(df)):
        # 買いシグナル
        if position <= 0 and df['po'].iloc[i] > df['po_signal'].iloc[i] and df['po'].iloc[i-1] <= df['po_signal'].iloc[i-1]:
            df.loc[df.index[i], 'is_buy'] = True
            df.loc[df.index[i], 'signal'] = 1
            position = 1
            
        # 売りシグナル
        elif position >= 0 and df['po'].iloc[i] < df['po_signal'].iloc[i] and df['po'].iloc[i-1] >= df['po_signal'].iloc[i-1]:
            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 "Price Oscillator"


def get_strategy_description() -> str:
    """戦略の説明を返す"""
    return "価格オシレーターによるトレンド判定戦略"

なぜこの結果になったのか(3つの理由)

  1. 1勝った回数が少なかったようです(勝率 約27%)。これは、4回やって1回勝てるかどうか、という割合なので、負けることが多かったと考えられます。
  2. 2全体として、利益よりも損のほうが大きくなりやすい作戦だったようです。1回の取引の平均で見ると、少しずつ損をしてしまう計算でした。
  3. 3一番運が悪かった時には、持っていたお金が32.22%も減ってしまいました(最大DD)。これは、大きな損が出た時に、うまくストップできなかったのかもしれません。

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

  1. 1勝つ回数が少なくても、1回の勝ちがとっても大きければ、全体でプラスになる作戦もあります。大事なのは、勝ち負けの回数だけでなく、利益と損のバランスを見ることです。
  2. 2作戦を試すときは、「最後にいくら増えたか」だけじゃなく、「途中でどれくらい大きくお金が減ったか(最大DD)」もチェックすることが、とっても大事です。
  3. 3ただビットコインを買ってずっと持っていた場合(ガチホ)と比べて、この作戦が良い結果だったかを比べるのも、作戦の良し悪しを判断するのに役立ちます。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金:もし1000円持っていたら、1回の取引で失う可能性のある金額は10円か20円くらいにしましょう。この作戦は損しやすかったので、もっと少なくしてもいいかもしれません。

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

大きな損を防ぐには:もし持っているお金が、最初に決めた以上に減ってしまったら(例えば10%減ったら)、いったん取引をお休みして、作戦を見直す時間を作りましょう。

資金管理の方法

お金の管理について:投資に使うお金は、お小遣いやお年玉など、なくなっても生活に困らないお金だけにしましょう。もし利益が出たら、その一部を次の投資に使うなど、上手にお金を育てていく計画も大事です。

改良案の具体的提案

  • 勝つ確率を上げるために、他の道具(例えば「買われすぎ・売られすぎ」がわかるサインなど)と組み合わせて、もっと良いタイミングを探してみましょう。
  • 「ここまで損をしたら売る(損切り)」や「ここまで利益が出たら売る(利確)」というルールを、もっとはっきり決めておくことが大切です。
  • 作戦で使う数字(例えば、平均を出す期間など)を色々と変えてみて、一番成績が良くなる組み合わせを探してみるのも良い方法です。

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

  • この作戦の結果は、あくまで過去のテストでの話です。未来でも同じようにうまくいくとは限りません。
  • 本当のお金で始める前に、まずはゲームのような練習モード(デモトレード)で試したり、すごく少ない金額でやってみたりするのがおすすめです。
  • 「もっといけるかも!」とか「損を取り返したい!」という気持ちに流されず、最初に決めたルールをしっかり守ることが、一番の成功のコツです。

検証の透明性と信頼性

  • データの出所: 使ったデータ:ある時間の「始めの値段」「一番高い値段」「一番安い値段」「終わりの値段」そして「取引された量」というデータを使ってテストしました。
  • 検証のやり方: テストの方法:過去のデータ(2025年4月28日から8月26日までの約4ヶ月間)を使って、この作戦がどれくらいうまくいったかを調べました。
  • コード: テストに使ったプログラム:このテストをしたときのプログラム(Pythonという言葉で書かれたコード)は見ることができます。
  • 注意事項: 大事なお約束:この作戦を使っても、必ずもうかるとは限りません。投資にはお金が減ってしまう危険(リスク)もあります。投資をするときは、自分でよく考えて、自分の責任で行ってくださいね。

よくある質問

Q.「価格オシレーター」って何?

A.ビットコインの値段の、最近の勢いと、ちょっと前の勢いを比べたものです。最近の勢いが強ければプラスの数字に、弱まっていればマイナスの数字になって、グラフの線で表されます。

Q.「移動平均線」って何?

A.例えば「過去10時間の値段の平均」みたいに、決まった期間の平均の値段を計算して、それを線で結んだグラフです。値段の大きな流れ(上がっているか、下がっているか)を見るのに便利です。

Q.「勝率が低い」って、そんなにダメなの?

A.そんなことないですよ! 例えば、10回やって9回は10円ずつ負けても、1回だけ100円勝てば、トータルではプラスになりますよね。大事なのは、勝ち負けの回数よりも、最終的に利益が残るかどうかです。

Q.「最大DD」って、どれくらいヤバいの?

A.DDはドローダウンの略で、「一番へこんだ時の落ち込み具合」のことです。最大DDが32.22%というのは、例えば100万円持っていたら、一時的に68万円くらいまで減っちゃった、ということです。結構ドキドキしますよね。

Q.この作戦で本当に儲かるの?

A.残念ながら、今回のテストではお金が減ってしまう結果でした。なので、この作戦をそのまま使うのはおすすめできません。もっと良くする方法を考えたり、他の作戦を探したりするのが良いと思います。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報