【中学生にもわかる!】仮想通貨の売り買い作戦「ガッピー」の結果と学んだこと
このお話では、仮想通貨(XRP/USDT)で「ガッピー」という売り買いのチャンスを見つける作戦を試した結果を、むずかしい言葉を使わずにわかりやすく説明します。結果は残念でしたが、ここから学べることもたくさんありましたよ。
導入と前提条件
このお話では、仮想通貨(XRP/USDT)で「ガッピー」という売り買いのチャンスを見つける作戦を試した結果を、むずかしい言葉を使わずにわかりやすく説明します。結果は残念でしたが、ここから学べることもたくさんありましたよ。
【検証】戦略のバックテスト概要
- 戦略名: Guppy Multiple MA を使用したトレンド追従戦略
- 対象銘柄: XRP/USDT
- 時間足: 5m
- 期間: 2024-11-26〜2025-08-25(271日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: kucoin
Guppy Multiple MA の理論的背景
この作戦は、世の中には短い時間で売り買いする人(トレーダー)と、長い目で見て投資する人(投資家)がいる、という考え方がもとになっています。短い時間の動きを見る線が、長い時間の動きを見る線を追い越したり、また戻ってきたりするタイミングに注目します。特に、短い時間の線がギュッと集まっているときに、新しい動きが始まるかもしれないと考え、売り買いのチャンスを探します。これは、たくさんの人が同じ方向を向き始める合図だと考えられているんです。
具体的な売買ルール(今回の検証)
エントリー条件
- 短い時間の動きを見る線が、上を向き始めて、線どうしがギュッとくっついてきたら「買う」チャンスです。
- 短い時間の動きを見る線の平均が、長い時間の動きを見る線の平均を、下から上に追い越したときも「買う」チャンスです。
エグジット条件
- 短い時間の動きを見る線が、下を向き始めて、線どうしがギュッとくっついてきたら「売る」(取引をやめる)タイミングです。
- 短い時間の動きを見る線の平均が、長い時間の動きを見る線の平均を、上から下に追い越してしまったときも「売る」タイミングです。
リスク管理
大きな損をしないように、もし思ったのと反対に値段が動いてしまったら、すぐに取引をやめることが大切です。また、一度にたくさんのお金を使わず、自分のできる範囲で取引することも重要ですよ。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでXRP/USDTのOHLCVを取得して前処理
- 『Guppy Multiple MA』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 1435回 |
勝率 | 16.93% |
平均利益 | 1.88% |
平均損失 | -0.82% |
期待値 | -0.36% |
プロフィットファクター | 0.62 |
最大ドローダウン | 99.71% |
最終リターン | -99.54% |
シャープレシオ | -0.49 |
HODL(Buy&Hold) | 107.66% |
HODL戦略との比較
実装コード(Python)
"""
Guppy Multiple Moving Average Trading Signal Generator
12本のEMAを使用したトレンド判定戦略
"""
import pandas as pd
import numpy as np
def calculate_guppy_signals(df: pd.DataFrame) -> pd.DataFrame:
"""
Guppy MMA戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# 短期EMAグループ(トレーダー)
short_periods = [3, 5, 8, 10, 12, 15]
# 長期EMAグループ(投資家)
long_periods = [30, 35, 40, 45, 50, 60]
# 各EMAを計算
for period in short_periods:
df[f'ema_short_{period}'] = df['close'].ewm(span=period, adjust=False).mean()
for period in long_periods:
df[f'ema_long_{period}'] = df['close'].ewm(span=period, adjust=False).mean()
# 短期グループと長期グループの平均
short_cols = [f'ema_short_{p}' for p in short_periods]
long_cols = [f'ema_long_{p}' for p in long_periods]
df['short_avg'] = df[short_cols].mean(axis=1)
df['long_avg'] = df[long_cols].mean(axis=1)
# グループ間の距離(トレンド強度)
df['separation'] = df['short_avg'] - df['long_avg']
df['separation_pct'] = (df['separation'] / df['long_avg']) * 100
# 短期グループの収束度(圧縮度)
df['short_max'] = df[short_cols].max(axis=1)
df['short_min'] = df[short_cols].min(axis=1)
df['short_compression'] = (df['short_max'] - df['short_min']) / df['short_avg']
# シグナル生成
df['separation_prev'] = df['separation'].shift(1)
df['is_buy'] = (
(df['separation'] > 0) &
(df['separation_prev'] <= 0) &
(df['short_compression'] < 0.02) & # 短期EMAが収束
df['separation'].notna()
)
df['is_sell'] = (
(df['separation'] < 0) &
(df['separation_prev'] >= 0) &
(df['short_compression'] < 0.02) & # 短期EMAが収束
df['separation'].notna()
)
# 不要カラム削除
drop_cols = short_cols + long_cols + ['short_max', 'short_min', 'separation_prev']
df.drop(drop_cols, axis=1, inplace=True, errors='ignore')
return df
なぜこの結果になったのか(3つの理由)
- 1この作戦は、仮想通貨の値段が激しく動く「5分ごと」という短い時間で試しました。でも、急な値段の変化についていけなかったのかもしれません。
- 2勝率が約17%と、とても低かったです。つまり、100回やっても83回は負けてしまう計算で、なかなか利益が出ませんでした。
- 31回取引するごとに、平均して損をしてしまう計算でした。儲けたお金より損したお金の方がずっと多くて、やればやるほど損が増える結果になってしまいました。
この結果から学べる3つの教訓
- 1どんなに良いと言われている作戦でも、いつでも、どんな仮想通貨でもうまくいくわけではない、ということを学びました。
- 2勝率が低かったのは、この作戦が今の世の中の動きに合っていなかったか、やり方を変える必要があったからかもしれません。
- 3この結果から、作戦をそのまま使うのではなく、状況に合わせて工夫したり、他の作戦と組み合わせたりすることが大事だとわかりました。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金は、持っているお金全体の1%か2%くらいにすると安心です。こうすれば、もし負けても、持っているお金全体へのダメージを小さくできます。
損失が大きくなったときの対処法
もし損がふくらんで、持っているお金が10%など、決めた割合以上へってしまったら、一度取引をお休みしましょう。そして、作戦やお金の使い⽅を⾒直すことが⼤切です。
資金管理の方法
取引に使うお⾦は、なくなっても⽣活に困らないお⾦だけにしましょう。そして、「もっと儲かるかも!」「損したくない!」という気持ちに流されず、最初に決めたルールをしっかり守ることがとても重要です。
改良案の具体的提案
- 短い時間の線が「ギュッと集まる」という条件を、もう少し厳しくしたり、逆にゆるくしたりして、もっと良いタイミングを見つける工夫が必要です。
- この作戦がうまくいくのはどんな時か(例えば、値段がずっと上がり続けている時など)を見つけるために、新しいルールを加えるのも良いかもしれません。
- 1回に使うお金の量を決めたり、大きな損が出ないように「ここまで損したら絶対やめる」というルールをもっと厳しく決めたりする必要があります。
実用性の向上(運用上の注意)
- この作戦を試すときは、まず少しのお金でやってみたり、ゲームのお金で練習(デモトレード)したりして、本当にうまくいくか確かめてみましょう。
- 世の中の動きはいつも変わります。だから、一度うまくいった作戦でも、時々うまくいっているかチェックして、必要ならやり方を変えることが大切です。
- この作戦がうまくいかなかったからといって、がっかりしてやめてしまうのはもったいないです。なぜダメだったのかを考えて、直すところを見つけることが、次につながります。
検証の透明性と信頼性
- データの出所: このテストは、仮想通貨を取引できる会社からもらった、昔の値段の記録(XRP/USDTという種類の5分ごとの記録)を使って行いました。
- 検証のやり方: 公開されているプログラムを使って、「もし昔、この作戦で売り買いしていたらどうなっていたか?」というシミュレーションをして、結果を計算しました。
- コード: 計算に使ったプログラム(Pythonコード)は、誰でも見られるようになっています。だから、誰でも同じ方法でテストを試すことができますよ。
- 注意事項: このレポートは、昔の記録をもとにしたテストの結果です。これから絶対に儲かることを約束するものではありません。仮想通貨の取引には、損をする危険もあります。自分でよく考えて、自分の責任で行ってくださいね。