シェア:

ビットコインの値段の波をキャッチ!「調和振動子」っていう作戦を紹介します!

この作戦は、「調和振動子」っていう考え方を使います。ビットコインの値段が、まるでブランコみたいに揺れる動きに注目するんです。1時間ごとの値段を見て、いつ買うといいか、いつ売るといいかのヒントを探します。

取引数
1199
勝率
23.19%
最終リターン
-99.26%
最大DD
99.26%

導入と前提条件

この作戦は、「調和振動子」っていう考え方を使います。ビットコインの値段が、まるでブランコみたいに揺れる動きに注目するんです。1時間ごとの値段を見て、いつ買うといいか、いつ売るといいかのヒントを探します。

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

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

Harmonic Oscillator の理論的背景

世の中には、波みたいに繰り返す動きがたくさんあります。例えば、季節が春夏秋冬と変わったり、公園のブランコが揺れたりするのもそうですね。この作戦は、ビットコインの値段の動きにも、そんな波みたいなリズムがあるんじゃないか?と考えています。「調わ振動子」っていう特別な計算で、その波の「山」(いきおいが一番強いとき)と「谷」(いきおいが一番弱いとき)を見つけようとします。値段の動きのいきおいが変わる瞬間をキャッチして、買ったり売ったりするタイミングを決めるんです。

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

エントリー条件

  • 値段のいきおいを表すグラフが、マイナス(下向きのいきおい)からプラス(上向きのいきおい)に変わった瞬間に「買います」。

エグジット条件

  • 値段のいきおいを表すグラフが、プラス(上向きのいきおい)からマイナス(下向きのいきおい)に変わった瞬間に「売ります」。

リスク管理

この作戦を試した結果、とっても残念なことがわかりました。たった1回の取引で、持っていたお金のほとんど全部(99.26%)を失ってしまったんです。これは、大きな損をしないように「ここまで損したらやめる」っていうルール(これを「損切り」と言います)がなかったからです。だから、もしこの作戦を使うなら、「一回の取引で失ってもいいお金はこれだけ」と、先にしっかり決めておくことが絶対に必要です。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数1199回
勝率23.19%
平均利益0.87%
平均損失-0.79%
期待値-0.4%
プロフィットファクター0.36
最大ドローダウン99.26%
最終リターン-99.26%
シャープレシオ-2.01
HODL(Buy&Hold)77.56%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Harmonic Oscillator Trading Signal Generator
調和振動子を使用したサイクル分析
"""
import pandas as pd
import numpy as np


def calculate_harmonic_signals(df: pd.DataFrame,
                              period: int = 16) -> pd.DataFrame:
    """
    Harmonic Oscillator戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        基本期間(デフォルト: 16)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # HLC平均価格
    df['hlc'] = (df['high'] + df['low'] + df['close']) / 3
    
    # 第1段階フィルター(ハイパスフィルター)
    alpha1 = np.clip((np.cos(2 * np.pi / period) + np.sin(2 * np.pi / period) - 1) / np.cos(2 * np.pi / period), -0.99, 0.99)
    df['hp'] = df['hlc'].copy()
    for i in range(2, len(df)):
        if not np.isnan(df.iloc[i]['hlc']) and not np.isnan(df.iloc[i-1]['hlc']):
            val = (1 - alpha1/2)**2 * (df.iloc[i]['hlc'] - 2*df.iloc[i-1]['hlc'] + df.iloc[i-2]['hlc']) + 2*(1-alpha1)*df.iloc[i-1]['hp'] - (1-alpha1)**2*df.iloc[i-2]['hp']
            df.loc[df.index[i], 'hp'] = np.clip(val, -1e6, 1e6)  # オーバーフロー防止
    
    # 第2段階フィルター(スムージング)
    df['smooth'] = df['hp'].rolling(window=period//2).mean()
    
    # ハーモニックオシレーター
    df['ho'] = df['smooth']
    
    # 信号ラインの生成
    df['signal'] = df['ho'].rolling(window=3).mean()
    
    # ヒストグラム
    df['histogram'] = df['ho'] - df['signal']
    
    # シグナル生成
    df['hist_prev'] = df['histogram'].shift(1)
    df['is_buy'] = (df['histogram'] > 0) & (df['hist_prev'] <= 0) & df['histogram'].notna()
    df['is_sell'] = (df['histogram'] < 0) & (df['hist_prev'] >= 0) & df['histogram'].notna()
    
    # 不要カラム削除
    df.drop(['hlc', 'hp', 'smooth', 'signal', 'histogram', 'hist_prev'], 
            axis=1, inplace=True, errors='ignore')
    
    return df

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

  1. 1勝率が約23%しかありません。これは、4回取引したら3回は負けてしまう、というくらい低い数字です。
  2. 21回の取引で平均していくら儲かるかを示す「期待値」がマイナスです。つまり、取引すればするほど、お金が減ってしまう計算になります。
  3. 3儲けと損のバランスを示す「PF」が0.36でした。これは1よりずっと小さい数字で、儲かった金額よりも、損した金額の方がずっと大きいことを意味します。

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

  1. 1作戦が本当にうまくいくか、数字でしっかり確かめることが大事だということがわかりました。
  2. 2「何回勝てたか」だけじゃなくて、「トータルで儲かったか」など、色々な角度から作戦をチェックしないといけないんですね。
  3. 3どんなに難しそうな計算を使っても、結果がダメなら、やり方を変えたり、もっと良くしたりする必要があるということです。

リスク管理の具体的手法

取引量の決め方

この作戦は、一度にすごく大きく損をする可能性があるので、1回の取引に使うお金は、持っているお金のほんの少しだけにするべきです。例えば、持っているお金全体の1%か2%まで、と決めておくのが安全です。

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

この作戦では、持っているお金のほとんど全部をなくしてしまう危険があります。そうならないように、「これ以上損が大きくなったら、しばらく取引をお休みする」というような厳しいルールを作っておくことが、とても大切です。

資金管理の方法

この作戦は、あなたのお金全体を大きく減らしてしまう可能性がとても高いです。本気で使う前に、まずはものすごく少ない金額で試してみるか、この作戦だけじゃなくて、もっと安全な他の作戦と一緒に使うことを強くおすすめします。

改良案の具体的提案

  • 大きな損をする前に「ここまで損したらやめる」というルール(損切り)を必ず加えることが必要です。
  • 勝つ回数を増やしたり、全体のもうけをプラスにするために、計算に使う数字(設定値)を変えてみるのがいいかもしれません。
  • 他の作戦のヒントになる道具と組み合わせて、もっと確実な「買い」や「売り」のタイミングを探してみましょう。

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

  • 今のままでは、この作戦は損をしやすいです。そのまま使わないで、必ずもっと良くする方法を考えてから試してくださいね。
  • 計算に使う期間などの設定を変えると、作戦の結果も変わることがあります。色々な設定で試してみるのも一つの手です。
  • 実際にお金を使って取引する前に、過去の値段の動きを使って「この作戦は本当に儲かるのかな?」としっかりテストしてみることが、すごく大事です。

検証の透明性と信頼性

  • データの出所: 使った情報:ビットコイン(BTC/USDT)の1時間ごとの値段のデータです。
  • 検証のやり方: 確かめ方:取引した回数や勝率、儲けと損のバランスなどの数字をもとにして、この作戦がどうだったかをチェックしました。
  • コード: プログラムについて:この作戦の計算プログラム(Pythonコード)があるので、誰でも同じようにテストしてみることができます。
  • 注意事項: 注意してほしいこと:この作戦は、昔のデータを使って考えたものです。だから、未来も同じようにうまくいくとは限りません。投資をするときは、自分でよく考えて決めてくださいね。特に、この作戦は今のままでは、とても損をしやすいという結果が出ていることを忘れないでください。

よくある質問

Q.「調和振動子」って、何かの必殺技の名前ですか?

A.いいえ、必殺技じゃなくて、理科や数学で出てくる考え方です。ブランコや波みたいに、規則正しく繰り返す動きを分析するときに使う、ちょっと難しい道具の名前なんです。

Q.ビットコインの値段って、本当に波みたいに動くんですか?

A.100%予想することはできませんが、値段の動きには、なんとなくのパターンやリズムがあると考えられています。この作戦は、そのリズムを見つけようとする挑戦なんです。

Q.勝率が低いって、どれくらいダメなんですか?

A.取引を4回やったら、そのうち3回は損をしてしまう、ということです。なかなか勝てない状態ですね。

Q.PFが0.36って、よくわからないけど、悪いんですか?

A.はい、とっても悪いです。PFは「儲かったお金」を「損したお金」で割った数字です。これが1より小さいと、損のほうが多いということになります。0.36だと、100円儲けるかわりに、その倍以上の277円くらい損しているようなイメージです。

Q.この作戦、そのまま使っちゃダメなんですか?

A.はい、絶対にそのまま使わないでください!今のままだと、大切なお金をたくさん失ってしまう可能性がすごく高いです。使うなら、必ず「大きな損をしないためのルール」を加えて、まずはお小遣いみたいな少ない金額で試すようにしてくださいね。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報