仮想通貨の「元気度」で売り買いのチャンスを見つけよう!RVI戦略のヒミツ
この作戦では、「RVI」という特別な道具を使います。これは、仮想通貨が今どれくらい「元気」かを見るためのものです。この元気さをヒントに、いつ買って、いつ売るかのタイミングを探しました。5分ごとという、とても短い時間の値動きを見て、何度も売り買いを試してみました。
導入と前提条件
この作戦では、「RVI」という特別な道具を使います。これは、仮想通貨が今どれくらい「元気」かを見るためのものです。この元気さをヒントに、いつ買って、いつ売るかのタイミングを探しました。5分ごとという、とても短い時間の値動きを見て、何度も売り買いを試してみました。
【検証】戦略のバックテスト概要
- 戦略名: Relative Vigor Index を使用したトレンド追従戦略
- 対象銘柄: AVAX/USDT
- 時間足: 5m
- 期間: 2024-03-22〜2025-08-25(520日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: okx
Relative Vigor Index の理論的背景
この作戦の基本的な考え方は、「値動きに勢いがある時は、その後も値段が動きやすいんじゃないか?」というものです。RVIは、その日の値動きの「勢い」を数字にします。その数字をグラフの線にして、その線の平均を表すもう一本の線(これを「合図線」と呼びます)と比べます。元気さを表す線が、合図線を下から上に追い越したら「買い」の合図。逆に、上から下に追い越したら「売り」の合図、というふうに考えます。勢いが強まったり弱まったりした瞬間を見つけるんです。
具体的な売買ルール(今回の検証)
エントリー条件
- 元気さを表す線が、平均の線(合図線)を、下から上に追い越した時に「買います」。
エグジット条件
- 元気さを表す線が、平均の線(合図線)を、上から下に追い越した時に「売ります」。
- もし予想と違って損が出始めたら、決めておいた金額以上は損しないように、途中で取引をやめます(これを「損切り」と言います)。
リスク管理
一度の取引で使うお金は、持っているお金のほんの少しだけにします。こうすることで、もし失敗しても、大きな損にはなりません。もし損が出ても、決めた金額以上になったらすぐにやめるルールで、大切なお金を守ります。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでAVAX/USDTのOHLCVを取得して前処理
- 『Relative Vigor Index』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 13360回 |
勝率 | 17.58% |
平均利益 | 0.64% |
平均損失 | -0.63% |
期待値 | -0.41% |
プロフィットファクター | 0.2 |
最大ドローダウン | 100% |
最終リターン | -100% |
シャープレシオ | -2.55 |
HODL(Buy&Hold) | -55.12% |
HODL戦略との比較
実装コード(Python)
"""
Relative Vigor Index Trading Signal Generator
価格の終値と始値の関係から市場の活力を測定
"""
import pandas as pd
import numpy as np
def calculate_rvi_signals(df: pd.DataFrame,
period: int = 10,
signal_period: int = 4) -> pd.DataFrame:
"""
Relative Vigor Index戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
period : int
RVI計算期間(デフォルト: 10)
signal_period : int
シグナルライン期間(デフォルト: 4)
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# 価格の変動幅
df['co'] = df['close'] - df['open']
df['hl'] = df['high'] - df['low']
# 4期間加重移動平均(分子)
df['co_1'] = df['co'].shift(0)
df['co_2'] = df['co'].shift(1)
df['co_3'] = df['co'].shift(2)
df['co_4'] = df['co'].shift(3)
df['numerator'] = (df['co_1'] + 2*df['co_2'] + 2*df['co_3'] + df['co_4']) / 6
# 4期間加重移動平均(分母)
df['hl_1'] = df['hl'].shift(0)
df['hl_2'] = df['hl'].shift(1)
df['hl_3'] = df['hl'].shift(2)
df['hl_4'] = df['hl'].shift(3)
df['denominator'] = (df['hl_1'] + 2*df['hl_2'] + 2*df['hl_3'] + df['hl_4']) / 6
# RVI計算
df['rvi_num_sum'] = df['numerator'].rolling(window=period).sum()
df['rvi_den_sum'] = df['denominator'].rolling(window=period).sum()
df['rvi'] = df['rvi_num_sum'] / (df['rvi_den_sum'] + 0.0001)
# シグナルライン(加重移動平均)
df['rvi_1'] = df['rvi'].shift(0)
df['rvi_2'] = df['rvi'].shift(1)
df['rvi_3'] = df['rvi'].shift(2)
df['rvi_4'] = df['rvi'].shift(3)
df['signal'] = (df['rvi_1'] + 2*df['rvi_2'] + 2*df['rvi_3'] + df['rvi_4']) / 6
# ヒストグラム
df['histogram'] = df['rvi'] - 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()
# 不要カラム削除
drop_cols = ['co', 'hl', 'co_1', 'co_2', 'co_3', 'co_4', 'hl_1', 'hl_2', 'hl_3', 'hl_4',
'numerator', 'denominator', 'rvi_num_sum', 'rvi_den_sum',
'rvi_1', 'rvi_2', 'rvi_3', 'rvi_4', 'hist_prev']
df.drop(drop_cols, axis=1, inplace=True, errors='ignore')
return df
なぜこの結果になったのか(3つの理由)
- 1この作戦があまりうまくいかなかった理由はいくつかあります。まず、勝率が約18%と低く、取引をすればするほど少しずつ損をしてしまう計算でした。これは、売り買いの合図が出ても、その通りに値段が動かないことが多かったということです。
- 2成績を表すPFという数字もとても低かったです。これは、儲かったお金よりも損したお金の方が5倍も多かった、という意味になります。
- 3そして、最終的には持っていたお金が全部なくなってしまうという結果でした。これは、この作戦をそのまま使うと、とても危険だということを示しています。
この結果から学べる3つの教訓
- 1RVIという道具ひとつだけで、売り買いのタイミングを決めるのは、ちょっと難しいみたいだということがわかりました。
- 2勝てる確率が低くても、一回でたくさん儲かればプラスになることもあります。でも、この作戦ではそれもできませんでした。
- 3もし、ただ仮想通貨を買って持っているだけ(これをHODLと言います)でもお金は半分くらいに減ってしまいました。でも、この作戦を使ったら全部なくなってしまったので、何もしない方がまだマシだった、ということになります。
リスク管理の具体的手法
取引量の決め方
一度の取引に使うお金の量を決めます。例えば、持っているお金の100分の1だけを使う、というルールです。こうすれば、もし負けても、失うのは少しだけで済みます。
損失が大きくなったときの対処法
もし取引で損が続いて、持っているお金が一定の割合(例えば5%)以上減ってしまったら、一度取引をストップします。こうすることで、大きなダメージを受ける前に立ち止まることができます。
資金管理の方法
持っているお金を全部一度に使わず、何回かに分けて使います。儲かったら、その一部を次の取引資金に足したり、逆に損したら、次の取引で使うお金を減らしたり。状況に合わせてお金の使い方を調整することが大切です。
改良案の具体的提案
- RVIだけでなく、他の道具(例えば、値動きの勢いを調べるものや、値動きの大きさを調べるもの)も一緒に使って、もっと確実な「買い」や「売り」の合図を探してみるのが良さそうです。
- 「いつ買うか」だけでなく、「いつ売って利益を確定するか」や「いつ損切りするか」のルールをもっとしっかり決めることが大切です。
- 計算に使う数字(パラメータと言います)を色々と変えてみて、一番良い成績が出る組み合わせを探すのも一つの手です。
実用性の向上(運用上の注意)
- 今回の結果は良くなかったので、この作戦をそのまま真似するのはやめましょう。もし試すなら、改善点をしっかり考えてから、なくなってもいいくらい少ないお金で始めるのが安全です。
- 5分ごとなど短い時間での取引は、値段の動きがとても速いです。合図が出ても、すぐに状況が変わってしまうことがあります。焦らず、冷静に判断することが大事です。
- RVIの数字だけを信じるのではなく、グラフ全体の形や、世の中のニュースなども見ながら考えると、もっと上手に判断できるかもしれません。
検証の透明性と信頼性
- データの出所: この実験で使ったのは、実際の仮想通貨取引所が公開している過去の値段のデータ(AVAX/USDTという通貨ペアの5分ごとの記録)です。
- 検証のやり方: 「もし過去にこの作戦を使っていたら、どれくらい儲かったり損したりしたかな?」というのをコンピューターで計算(これをバックテストと言います)して、作戦の成績を調べました。
- コード: この計算をするために使ったプログラム(コード)は、誰でも見られるように公開されています。
- 注意事項: この結果は、あくまで過去のデータを使った実験の結果です。未来も同じようにうまくいくとは限りません。投資には、お金が減ってしまうリスクが必ずあります。お金を使う時は、最後は自分でよく考えて決めてくださいね。