暗号資産「ADA/USDT」で、「スイングインデックス」を使って値段のパワーを調べてみました!
この作戦は、「ADA/USDT」という暗号資産のセットで使います。1時間ごとの値段の動きを調べて、「スイングインデックス」という方法で、いつ買ったり売ったりしたら良いかを見つけようとするものです。昔のデータを使って、このやり方がうまくいったかどうかを試してみました。一緒に結果を見てみましょう!
導入と前提条件
この作戦は、「ADA/USDT」という暗号資産のセットで使います。1時間ごとの値段の動きを調べて、「スイングインデックス」という方法で、いつ買ったり売ったりしたら良いかを見つけようとするものです。昔のデータを使って、このやり方がうまくいったかどうかを試してみました。一緒に結果を見てみましょう!
【検証】戦略のバックテスト概要
- 戦略名: Swing Index を使用したトレンド追従戦略
- 対象銘柄: ADA/USDT
- 時間足: 1h
- 期間: 2024-09-02〜2025-08-25(356日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: kucoin
Swing Index の理論的背景
この作戦の基本的な考え方は、値段が動く「パワー」をはかることです。具体的には、1時間の中での「終わりの値段」「始まりの値段」「一番高かった値段」「一番安かった値段」といった情報から、「スイングインデックス」という数字を出します。この数字がプラスになったら「買いたい!」というパワーが強くなっている、マイナスになったら「売りたい!」というパワーが強くなっている、と考えます。さらに、この数字を平均したものと比べることで、値段がどっちに向かっているか、大きな流れをつかもうとします。
具体的な売買ルール(今回の検証)
エントリー条件
- 「スイングインデックス」の数字が、前の時間の数字よりも大きくなって、さらにパワーの変化を見るための「ASIトレンド」というものがマイナスからプラスに変わったときです。これは「買うタイミングかもしれない!」という合図です。
- 「ASIトレンド」がプラスになったのを確認したら、次の1時間で買う準備をします。
エグジット条件
- 「ASIトレンド」が、プラスからマイナスに変わったときです。これは、儲けを自分のものにしたり、損がふくらむのを止めたりするタイミングです。
- 暗号資産を買っている状態で、「ASIトレンド」のパワーがなくなってきたと感じたら、売ることを考えます。
リスク管理
この作戦では、たくさん売り買いをしましたが、残念ながら儲けよりも損のほうが大きくなってしまいました。勝てる確率も低くて、一回でガクンと大きく損をしてしまうこともありました。なので、もしこのやり方を使うなら、一回にたくさんのお金を使いすぎないように注意することがとても大切です。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでADA/USDTのOHLCVを取得して前処理
- 『Swing Index』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 535回 |
勝率 | 24.49% |
平均利益 | 3.81% |
平均損失 | -1.57% |
期待値 | -0.25% |
プロフィットファクター | 0.79 |
最大ドローダウン | 87.05% |
最終リターン | -81.45% |
シャープレシオ | -0.32 |
HODL(Buy&Hold) | 174.03% |
HODL戦略との比較
実装コード(Python)
"""
Swing Index Trading Signal Generator
Wilder's Swing Indexを使用した短期トレンド検出
"""
import pandas as pd
import numpy as np
def calculate_swing_index_signals(df: pd.DataFrame,
limit_move: float = 3.0) -> pd.DataFrame:
"""
Swing Index戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
limit_move : float
リミットムーブ値(デフォルト: 3.0)
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# 前日データ
df['close_prev'] = df['close'].shift(1)
df['open_prev'] = df['open'].shift(1)
df['high_prev'] = df['high'].shift(1)
df['low_prev'] = df['low'].shift(1)
# 価格差分計算
df['c_cp'] = df['close'] - df['close_prev']
df['c_o'] = df['close'] - df['open']
df['cp_op'] = df['close_prev'] - df['open_prev']
# K値計算
df['h_cp'] = np.abs(df['high'] - df['close_prev'])
df['l_cp'] = np.abs(df['low'] - df['close_prev'])
df['k'] = df[['h_cp', 'l_cp']].max(axis=1)
# R値計算
df['h_l'] = df['high'] - df['low']
df['r1'] = df['h_l']
df['r2'] = np.abs(df['high'] - df['close_prev'])
df['r3'] = np.abs(df['low'] - df['close_prev'])
df['r'] = df[['r1', 'r2', 'r3']].max(axis=1)
# Swing Index計算
df['si'] = 50 * (df['c_cp'] + 0.5 * df['c_o'] + 0.25 * df['cp_op']) * (df['k'] / (limit_move * 100)) / (df['r'] + 0.0001)
# Accumulative Swing Index
df['asi'] = df['si'].cumsum()
# ASIのトレンド
df['asi_ma'] = df['asi'].rolling(window=14).mean()
df['asi_trend'] = df['asi'] - df['asi_ma']
# シグナル生成
df['asi_trend_prev'] = df['asi_trend'].shift(1)
df['is_buy'] = (df['asi_trend'] > 0) & (df['asi_trend_prev'] <= 0) & df['asi_trend'].notna()
df['is_sell'] = (df['asi_trend'] < 0) & (df['asi_trend_prev'] >= 0) & df['asi_trend'].notna()
# 不要カラム削除
drop_cols = ['close_prev', 'open_prev', 'high_prev', 'low_prev', 'c_cp', 'c_o', 'cp_op',
'h_cp', 'l_cp', 'k', 'h_l', 'r1', 'r2', 'r3', 'r', 'asi_trend_prev']
df.drop(drop_cols, axis=1, inplace=True, errors='ignore')
return df
なぜこの結果になったのか(3つの理由)
- 1勝てた回数が少なかったのは、短い時間の値段の動きに、つい乗ってしまったからかもしれません。値段が「上がるぞ!」と見せかけて実は下がるような「ウソの動き」に、だまされてしまった回数が多かったと考えられます。
- 2成績が良くなかったのは、1回あたりの取引で見ると、平均して儲けよりも損のほうが大きかったからです。
- 3一度にすごく大きな損をしてしまった時期があった、ということも分かりました。これは、「もしも」の時の準備が、ちょっと足りなかったのかもしれない、ということを教えてくれています。
この結果から学べる3つの教訓
- 1短い時間の動きだけを見て売り買いのタイミングを決めるのは、とても難しいことだと分かりました。
- 2勝つ回数だけじゃなくて、一回ごとの儲けを大きくしたり、損を小さくしたりすることが大事だということを学びました。
- 3どんなに良さそうな作戦でも、「もしも」の時の準備をちゃんとしておかないと、大きな損につながる可能性があることを、あらためて感じました。
リスク管理の具体的手法
取引量の決め方
一回の取引で使うお金は、自分が持っているお金のほんのちょっとだけ(例えば1%〜2%くらい)にしましょう。そうすれば、もし負けても、持っているお金が全部なくなるような大きな失敗を防げます。
損失が大きくなったときの対処法
もし損が続いてしまったら、無理に続けようとしないで、いったんお休みすることが大事です。そして、なんでうまくいかないのか理由を考えて、やり方を見直しましょう。しばらく取引をお休みするのも、良い方法です。
資金管理の方法
勝ったときも負けたときも、「悔しい!」とか「もっといける!」という気持ちに流されないで、最初に決めた約束を守ってお金を管理することが重要です。一回で大儲けを狙うんじゃなくて、コツコツと長く続けていく気持ちが大切です。
改良案の具体的提案
- 別の道具(例えば、値段の平均を見る線や、買われすぎ・売られすぎを見る道具など)と組み合わせることで、もっと「当たりやすい」売り買いの合図を見つけられるかもしれません。
- 作戦で使う数字の設定を変えてみたり、1時間ごとじゃなくて4時間ごとや1日ごとのデータで試してみたりすると、結果が良くなる可能性があります。
- 「ここまで損したら絶対に売る」というルールをしっかり決めておけば、大きな損をしないようにできるでしょう。
実用性の向上(運用上の注意)
- この作戦は短い時間の動きを見るので、値段のグラフをこまめにチェックする必要があります。
- 実際に自分のお金を使う前に、必ず昔のデータでたくさん練習試合(バックテスト)をして、自分に合った設定を見つけることが大切です。
- 値段の動きはいつも同じじゃないので、一度うまくいったやり方でも、定期的に成績をチェックして、必要ならやり方を変えていきましょう。
検証の透明性と信頼性
- データの出所: このデータは、昔の「ADA/USDT」の値段の動きを記録したデータをもとにしています。
- 検証のやり方: 「もし、このやり方で昔から取引してたらどうなってたかな?」というのを、コンピューターで試してみて(バックテスト)、結果を確かめました。
- コード: この計算をするためのコンピューターへの命令文(プログラムコード)は、誰でも見られるようになっています。
- 注意事項: この結果は、あくまで昔のデータにもとづくものです。これから先も同じようにうまくいくというお約束はできません。お金を使うかどうかは、自分でよく考えて決めてくださいね。