ビットコイン値段の勢いをチェック!「価格オシレーター作戦」をわかりやすく説明します
この作戦は、ビットコインの「値段の勢い」を見て、いつ買って、いつ売るかを決めるやり方です。1時間ごとの値段の動きを見て、うまく利益を出すことを目指します。難しい言葉は使わないで説明しますね!
導入と前提条件
この作戦は、ビットコインの「値段の勢い」を見て、いつ買って、いつ売るかを決めるやり方です。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)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Price Oscillator』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 98回 |
勝率 | 26.53% |
平均利益 | 1.33% |
平均損失 | -0.99% |
期待値 | -0.37% |
プロフィットファクター | 0.49 |
最大ドローダウン | 32.22% |
最終リターン | -31.15% |
シャープレシオ | -0.77 |
HODL(Buy&Hold) | 16.66% |
HODL戦略との比較
実装コード(Python)
"""
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勝った回数が少なかったようです(勝率 約27%)。これは、4回やって1回勝てるかどうか、という割合なので、負けることが多かったと考えられます。
- 2全体として、利益よりも損のほうが大きくなりやすい作戦だったようです。1回の取引の平均で見ると、少しずつ損をしてしまう計算でした。
- 3一番運が悪かった時には、持っていたお金が32.22%も減ってしまいました(最大DD)。これは、大きな損が出た時に、うまくストップできなかったのかもしれません。
この結果から学べる3つの教訓
- 1勝つ回数が少なくても、1回の勝ちがとっても大きければ、全体でプラスになる作戦もあります。大事なのは、勝ち負けの回数だけでなく、利益と損のバランスを見ることです。
- 2作戦を試すときは、「最後にいくら増えたか」だけじゃなく、「途中でどれくらい大きくお金が減ったか(最大DD)」もチェックすることが、とっても大事です。
- 3ただビットコインを買ってずっと持っていた場合(ガチホ)と比べて、この作戦が良い結果だったかを比べるのも、作戦の良し悪しを判断するのに役立ちます。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金:もし1000円持っていたら、1回の取引で失う可能性のある金額は10円か20円くらいにしましょう。この作戦は損しやすかったので、もっと少なくしてもいいかもしれません。
損失が大きくなったときの対処法
大きな損を防ぐには:もし持っているお金が、最初に決めた以上に減ってしまったら(例えば10%減ったら)、いったん取引をお休みして、作戦を見直す時間を作りましょう。
資金管理の方法
お金の管理について:投資に使うお金は、お小遣いやお年玉など、なくなっても生活に困らないお金だけにしましょう。もし利益が出たら、その一部を次の投資に使うなど、上手にお金を育てていく計画も大事です。
改良案の具体的提案
- 勝つ確率を上げるために、他の道具(例えば「買われすぎ・売られすぎ」がわかるサインなど)と組み合わせて、もっと良いタイミングを探してみましょう。
- 「ここまで損をしたら売る(損切り)」や「ここまで利益が出たら売る(利確)」というルールを、もっとはっきり決めておくことが大切です。
- 作戦で使う数字(例えば、平均を出す期間など)を色々と変えてみて、一番成績が良くなる組み合わせを探してみるのも良い方法です。
実用性の向上(運用上の注意)
- この作戦の結果は、あくまで過去のテストでの話です。未来でも同じようにうまくいくとは限りません。
- 本当のお金で始める前に、まずはゲームのような練習モード(デモトレード)で試したり、すごく少ない金額でやってみたりするのがおすすめです。
- 「もっといけるかも!」とか「損を取り返したい!」という気持ちに流されず、最初に決めたルールをしっかり守ることが、一番の成功のコツです。
検証の透明性と信頼性
- データの出所: 使ったデータ:ある時間の「始めの値段」「一番高い値段」「一番安い値段」「終わりの値段」そして「取引された量」というデータを使ってテストしました。
- 検証のやり方: テストの方法:過去のデータ(2025年4月28日から8月26日までの約4ヶ月間)を使って、この作戦がどれくらいうまくいったかを調べました。
- コード: テストに使ったプログラム:このテストをしたときのプログラム(Pythonという言葉で書かれたコード)は見ることができます。
- 注意事項: 大事なお約束:この作戦を使っても、必ずもうかるとは限りません。投資にはお金が減ってしまう危険(リスク)もあります。投資をするときは、自分でよく考えて、自分の責任で行ってくださいね。