PPOシグナル作戦:未来の値段はわかる?仮想通貨BNBで試してみた結果
「PPOシグナル」という、過去の値動きから「これから値段がどっちに動くか」を予想しようとする作戦があります。今回は、BNBという仮想通貨を使い、5分ごとの値動きを見て、この作戦がうまくいくか試してみました。でも残念ながら、結果はうまくいきませんでした。この記事では、どうしてダメだったのか、そしてこの失敗から何を学べるのかを、わかりやすく説明しますね。
導入と前提条件
「PPOシグナル」という、過去の値動きから「これから値段がどっちに動くか」を予想しようとする作戦があります。今回は、BNBという仮想通貨を使い、5分ごとの値動きを見て、この作戦がうまくいくか試してみました。でも残念ながら、結果はうまくいきませんでした。この記事では、どうしてダメだったのか、そしてこの失敗から何を学べるのかを、わかりやすく説明しますね。
【検証】戦略のバックテスト概要
- 戦略名: PPO Signal を使用したトレンド追従戦略
- 対象銘柄: BNB/USDT
- 時間足: 5m
- 期間: 2024-12-23〜2025-08-25(244日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: bybit
PPO Signal の理論的背景
この作戦の基本的な考え方は、市場の「勢い」をつかまえることです。PPOという線は、最近の値段の動きが、もっと長い目で見た時の動きと比べて、どれくらい元気があるかを示してくれます。そして、もう一本のシグナル線は、そのPPOの動きをもう少しなめらかにした線です。最近の勢いがだんだん強くなってきて、PPO線がシグナル線を追い抜いたら「これから上がるかも!」、逆に勢いが弱くなってきたら「これから下がるかも…」と考えるのが、この作戦のキホンです。
具体的な売買ルール(今回の検証)
エントリー条件
- PPOの線が、シグナル線を下から上に追い抜いたとき(これが「買い」の合図です)
- 2つの線が交わったのを確認して、次の5分が始まったら買います
エグジット条件
- PPOの線が、シグナル線を上から下に追い抜いたとき(これが「売り」の合図です)
- 2つの線が交わったのを確認して、次の5分が始まったら取引を終わりにします
リスク管理
とても大事なのが、大きな損をしないためのルールです。例えば、「1回の取引で損してもいいのは、持っているお金全体の2%まで」と決めておきます。もし予想が外れて損が大きくなってきたら、途中で「ごめんなさい」をして、もっと損が広がらないように取引をやめる勇気も必要です。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBNB/USDTのOHLCVを取得して前処理
- 『PPO Signal』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 2830回 |
勝率 | 14.38% |
平均利益 | 0.52% |
平均損失 | -0.54% |
期待値 | -0.39% |
プロフィットファクター | 0.2 |
最大ドローダウン | 100% |
最終リターン | -100% |
シャープレシオ | -2.11 |
HODL(Buy&Hold) | 32.78% |
HODL戦略との比較
実装コード(Python)
"""
PPO Signal
PPOとシグナルのクロスで判定するのだ。
"""
import pandas as pd
def _ema(s: pd.Series, n: int) -> pd.Series:
return s.ewm(span=n, adjust=False).mean()
def calculate_ppo_signals(df: pd.DataFrame, fast: int = 12, slow: int = 26, signal_period: int = 9) -> pd.DataFrame:
out = df.copy()
ema_fast = _ema(out['close'], fast)
ema_slow = _ema(out['close'], slow)
ppo = 100 * (ema_fast - ema_slow) / ema_slow
signal = _ema(ppo, signal_period)
out['ppo'] = ppo
out['ppo_signal'] = signal
prev = (ppo - signal).shift(1)
now = ppo - signal
out['is_buy'] = (now > 0) & (prev <= 0)
out['is_sell'] = (now < 0) & (prev >= 0)
return out
なぜこの結果になったのか(3つの理由)
- 1作戦のサイン通りに値段が動かないことが、とても多かったみたいです。「これから上がるぞ!」というサインが出ても、実際には下がってしまう、ということがたくさんありました。だから、勝てる確率が低くなってしまったのです。
- 2仮想通貨の値段は、ジェットコースターみたいに急に動くことがあります。この作戦だけだと、その速い動きについていけなくて、「ダマシ」と呼ばれるニセモノのサインに、たくさん引っかかってしまったのかもしれません。
- 32830回も取引したのに、勝てたのはたったの14%ほどでした。小さな負けが何度も積み重なった結果、最終的には持っていたお金が全部なくなってしまうという、とても残念な結果になりました。
この結果から学べる3つの教訓
- 1どんなに簡単そうに見える作戦でも、いつでもうまくいくわけじゃない、ということがわかりました。時と場合によるんですね。
- 2勝つ回数が少なくても、一回で大きく勝てれば、全体ではプラスになることもあります。でも、今回の作戦では、勝つ回数が少ない上に、大きく勝つこともできませんでした。
- 3昔のデータで「この作戦はうまくいくかな?」と試してみることは、とても大事です。そして、もし悪い結果が出たら、「なんでダメだったんだろう?」と理由を考えることが、もっと大事だということを学びました。
リスク管理の具体的手法
取引量の決め方
1回の取引でリスクにさらすお金は、持っているお金全体の1%か2%くらいにしましょう。例えば1万円持っていたら、1回の取引で損しても100円か200円で済むように、買う量を調整するということです。
損失が大きくなったときの対処法
もし負けが続いて、持っているお金が1割か2割くらい減ってしまったら、一度取引をお休みします。そして、作戦が今の状況に合っているか、もう一度考え直します。これ以上損を大きくしないための大事なルールです。
資金管理の方法
「もっと儲かるかも!」とか「負けを取り返したい!」という気持ちに流されずに、最初に決めたルールをしっかり守ることが大切です。勝っている時も欲張らず、目標の金額になったらちゃんと利益を確定させる、計画的なお金の管理を心がけましょう。
改良案の具体的提案
- このPPO作戦だけでなく、他の道具(例えば、値段の勢いを示す別のグラフなど)も一緒に使って、もっと当たりの確率が高いサインを見つけられるように工夫してみます。
- 「これ以上損したらやめる」という損切りルールをもっと厳しくして、一回の負けで大ケガしないようにします。
- 試す期間や、他の仮想通貨、見る時間(5分じゃなくて1時間とか)を変えてみて、この作戦がどんな時に強くて、どんな時に弱いのかをもっと調べてみます。
実用性の向上(運用上の注意)
- この作戦をいきなり本番で使うのは危ないかもしれません。まずは少ないおこづかいで試してみたり、他の作戦と組み合わせてみたりするのがおすすめです。
- 仮想通貨の値段はすごく変わりやすいです。だから、いつもニュースなどを見て、世の中の動きに注意しておくことが大事です。もし作戦が合わなくなってきたら、やり方を変える準備もしておきましょう。
- PF(プロフィットファクター)という成績表が0.2と、とても低かったです。これは「1円稼ぐために5円損した」という意味なので、この作戦だけで戦うのは難しそうです。もっとうまくいく別の作戦と組み合わせることを考えた方がいいかもしれません。
検証の透明性と信頼性
- データの出所: 昔のBNBという仮想通貨の、5分ごとの値段のデータを使いました。
- 検証のやり方: 決められた設定とルールを使って、過去のデータで「もしこの作戦を使っていたらどうなっていたか」というシミュレーションをしました。
- コード: この作戦をコンピューターで動かすためのプログラム(Pythonコード)も、ちゃんとありますよ。
- 注意事項: このお話は、あくまで過去のデータで試した結果です。未来も同じようにうまくいくとは限りません。お金を使うときは、自分でよく考えて、自分の責任で行ってくださいね。