虹色チャートで未来を予測?ビットコイン取引の作戦を大解剖!
ビットコイン(BTC)という有名な暗号資産(あんごうしさん)の取引で、「虹色の線」を使った新しい作戦を試してみました。約4ヶ月間、1時間ごとの値動きを見て38回取引した結果、勝てたのは約26%で、最終的には11.64%損をしてしまいました。一番大きくお金が減ったときは、20.71%も減ってしまったんです。この結果について、中学生でもわかるように、わかりやすく説明しますね!
導入と前提条件
ビットコイン(BTC)という有名な暗号資産(あんごうしさん)の取引で、「虹色の線」を使った新しい作戦を試してみました。約4ヶ月間、1時間ごとの値動きを見て38回取引した結果、勝てたのは約26%で、最終的には11.64%損をしてしまいました。一番大きくお金が減ったときは、20.71%も減ってしまったんです。この結果について、中学生でもわかるように、わかりやすく説明しますね!
【検証】戦略のバックテスト概要
- 戦略名: Rainbow Moving Average を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 1h
- 期間: 2025-04-28〜2025-08-26(119日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
Rainbow Moving Average の理論的背景
この作戦の基本的な考え方は、たくさんの線がきれいな虹の形に並んだら、値段はその方向に動きやすい、というものです。例えば、短い期間の線から長い期間の線までが、上から順番にきれいに並んでいたら、「上がり調子だ!」と考えます。逆に、下から順番に並んでいたら、「下がり調子だ!」と判断します。さらに、実際の値段が、この虹の線たちより上にあるか下にあるかも見て、買うべきか、下がるほうにかけるべきかを決めます。たくさんの線を使うことで、ちょっとした値動きにだまされずに、大きな流れをつかもうとしているんです。
具体的な売買ルール(今回の検証)
エントリー条件
- 「買うタイミング」:虹の線が上向きにきれいに並んでいて(上がり調子!)、実際の値段がその虹の線よりも上に来たときに買います。
- 「値段が下がるほうにかけるタイミング」:虹の線が下向きにきれいに並んでいて(下がり調子!)、実際の値段がその虹の線よりも下に来たときに、値段が下がるほうにかけます。
エグジット条件
- 「取引をやめるタイミング」:買ったり、下がるほうにかけたりした後、値段の勢いが弱くなってきたら取引を終えます。
- 「取引をやめるタイミング」:予想と反対に値段が動いてしまったときも、損が大きくならないようにすぐに取引を終えます。
リスク管理
損をできるだけ小さくすることが大切です。もし予想と反対に値段が動いてしまったら、すぐに取引をやめて、それ以上損が大きくならないようにします。一度にたくさんのお金を使わず、少しずつ取引することも大事なルールです。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Rainbow Moving Average』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 38回 |
勝率 | 26.32% |
平均利益 | 2.72% |
平均損失 | -1.38% |
期待値 | -0.3% |
プロフィットファクター | 0.7 |
最大ドローダウン | 20.71% |
最終リターン | -11.64% |
シャープレシオ | -0.24 |
HODL(Buy&Hold) | 16.72% |
HODL戦略との比較
実装コード(Python)
"""
Rainbow Moving Average Trading Signal
レインボー移動平均を使用したトレンド判定
"""
import pandas as pd
import numpy as np
def calculate_rainbow_moving_average_signals(df: pd.DataFrame,
period: int = 10) -> pd.DataFrame:
"""
Rainbow Moving Average戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
period : int
基本移動平均期間(デフォルト: 10)
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# レインボーMA(10本のMA)
for i in range(1, 11):
df[f'ma_{i}'] = df['close'].rolling(window=period * i).mean()
# レインボーMAの平均
ma_cols = [f'ma_{i}' for i in range(1, 11)]
df['rainbow_avg'] = df[ma_cols].mean(axis=1)
# レインボーの拡散度
df['rainbow_spread'] = df[ma_cols].std(axis=1)
# トレンド判定
df['trend_score'] = 0
for i in range(1, 10):
df['trend_score'] += np.where(df[f'ma_{i}'] > df[f'ma_{i+1}'], 1, -1)
# シグナル初期化
df['signal'] = 0
df['is_buy'] = False
df['is_sell'] = False
position = 0
for i in range(period * 10, len(df)):
# 買いシグナル(上昇トレンド)
if position <= 0 and df['trend_score'].iloc[i] > 2 and df['close'].iloc[i] > df['rainbow_avg'].iloc[i]:
df.loc[df.index[i], 'is_buy'] = True
df.loc[df.index[i], 'signal'] = 1
position = 1
# 売りシグナル(下降トレンド)
elif position >= 0 and df['trend_score'].iloc[i] < -2 and df['close'].iloc[i] < df['rainbow_avg'].iloc[i]:
df.loc[df.index[i], 'is_sell'] = True
df.loc[df.index[i], 'signal'] = -1
position = -1
else:
df.loc[df.index[i], 'signal'] = position
df['signal'] = df['signal'].fillna(0)
return df
def get_strategy_name() -> str:
"""戦略名を返す"""
return "Rainbow Moving Average"
def get_strategy_description() -> str:
"""戦略の説明を返す"""
return "レインボー移動平均を使用したトレンド判定戦略"
なぜこの結果になったのか(3つの理由)
- 1この作戦のいいところは、たくさんの線を使うことで、一時的な値動きに惑わされず、大きな流れをつかみやすいことです。
- 2虹の線の広がり具合で、値段の勢いの強さもわかるようになっています。
- 3でも、今回のテストでは、1回の取引で期待できるもうけがマイナスになってしまい、最終的にも損をしてしまいました。これは、この作戦が今のビットコインの値動きには合っていなかった、ということかもしれません。
この結果から学べる3つの教訓
- 1どんな作戦でも、必ずもうかるとは限らないんだ、ということがわかりました。
- 2作戦がうまくいかなくても、なぜダメだったのかを考えることが、次につながる大切な一歩だと学びました。
- 3今回の結果を見て、この作戦をもっと良くしていく必要があるとわかりました。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金は、持っているお金のほんの一部だけにします。こうすれば、もし取引に失敗しても、大損するのを防げます。
損失が大きくなったときの対処法
もし損が続いて、持っているお金が一定の割合まで減ってしまったら、一度取引をお休みします。または、使うお金をさらに減らして、もっと大きな損になるのを防ぎます。
資金管理の方法
取引に使うお金は、普段の生活に必要なお金とは別にします。なくなっても困らない、余裕のあるお金だけを使うのが鉄則です。また、もうかったら少しだけ使うお金を増やし、損したら減らす、といった調整も考えます。
改良案の具体的提案
- 虹を作る線の種類や数を変えてみて、もっと良い結果が出る組み合わせを探してみます。
- 買うときや売るときのルールを、もう少し厳しくしたり、逆にゆるくしたりして、ちょうどいいバランスを見つけます。
- 「これ以上損したらやめる」という損切りのルールを、もっと細かく決めてみるのも良いかもしれません。
実用性の向上(運用上の注意)
- もしこの作戦を試すなら、まずは本当に少ないお金で始めてみましょう。それで、どんな感じかつかんでから本格的にやるのが安全です。
- 虹の形がきれいかどうか、崩れていないか、いつもグラフをよく見ることが大切です。
- 取引の記録をつけて、「なぜもうかったのか」「なぜ損したのか」をふりかえることが、上達への一番の近道です。
検証の透明性と信頼性
- データの出所: このテストは、過去に実際に動いたビットコインの値段のデータを使って行いました。
- 検証のやり方: 過去の値段のデータを使って、「もしこの作戦で取引していたら、どうなっていたかな?」というシミュレーション(バックテストと言います)をして、結果を確かめました。
- コード: この作戦をコンピューターで動かすためのプログラムは、だれでも見られるように公開されています。
- 注意事項: このお話は、過去のデータでの結果です。未来も同じようにうまくいくとは限りません。投資には損をする可能性もあるので、自分自身でよく考えて、自己責任で行ってくださいね。