TSIオシレーターって使えるの?ビットコイン取引の結果を見てみよう!
この作戦は、ビットコインの値段の元気さ(勢い)を見て、「いつ買うか」「いつ売るか」を決める方法です。5分ごとの値動きを見るグラフを使って、短い時間で何回も取引をしてみました。その結果がどうだったか、一緒に見ていきましょう!
導入と前提条件
この作戦は、ビットコインの値段の元気さ(勢い)を見て、「いつ買うか」「いつ売るか」を決める方法です。5分ごとの値動きを見るグラフを使って、短い時間で何回も取引をしてみました。その結果がどうだったか、一緒に見ていきましょう!
【検証】戦略のバックテスト概要
- 戦略名: TSI Oscillator を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 5m
- 期間: 2024-07-30〜2025-08-25(390日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
TSI Oscillator の理論的背景
この作戦は、「値動きの波に乗る」という考え方が元になっています。値段が上がっている大きな波が来たら、その波に乗って「買い」、下がっている波が来たら「売り」で利益をねらう方法です。TSIオシレーターは、値段の元気さを数字にすることで、この波の始まりや終わりを見つけようとします。具体的には、値段の細かいギザギザした動きにだまされずに、本当の大きな流れを見つけるための工夫がされています。ものさしと平均の線が交わるところが、流れが変わるサインになる、と考えて使います。
具体的な売買ルール(今回の検証)
エントリー条件
- TSIオシレーター(ものさし)が、その平均の線を下から上に追い越したとき(買うタイミングです)
- (この作戦では、買うときも売るときも、この2本の線が交わるタイミングを見て判断します)
エグジット条件
- TSIオシレーター(ものさし)が、その平均の線を上から下に追い越したとき(取引をやめるタイミングです)
- (もし損が大きくなりすぎたら、決めておいた金額でストップして、取引をやめるルールも大事です)
リスク管理
一度にたくさんのお金を使わずに、もし損をしても大丈夫と思える範囲の金額で取引するようにします。また、損が一定の金額になったら、それ以上広がらないように取引をやめることも大切です。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『TSI Oscillator』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 5053回 |
勝率 | 11.52% |
平均利益 | 0.58% |
平均損失 | -0.52% |
期待値 | -0.4% |
プロフィットファクター | 0.23 |
最大ドローダウン | 100% |
最終リターン | -100% |
シャープレシオ | -2.35 |
HODL(Buy&Hold) | 68.25% |
HODL戦略との比較
実装コード(Python)
"""
True Strength Index (TSI) Signal
TSIとシグナルラインのクロスで判定するのだ。
"""
import pandas as pd
def _ema(s: pd.Series, n: int) -> pd.Series:
return s.ewm(span=n, adjust=False).mean()
def _tsi(close: pd.Series, r: int = 25, s: int = 13) -> pd.Series:
pc = close.diff()
apc = pc.abs()
e1 = _ema(pc, r)
e2 = _ema(e1, s)
ae1 = _ema(apc, r)
ae2 = _ema(ae1, s)
tsi = 100 * (e2 / ae2)
return tsi
def calculate_tsi_signals(df: pd.DataFrame, r: int = 25, s: int = 13, signal_period: int = 7) -> pd.DataFrame:
out = df.copy()
out['tsi'] = _tsi(out['close'], r, s)
out['tsi_signal'] = _ema(out['tsi'], signal_period)
prev = (out['tsi'] - out['tsi_signal']).shift(1)
now = out['tsi'] - out['tsi_signal']
out['is_buy'] = (now > 0) & (prev <= 0)
out['is_sell'] = (now < 0) & (prev >= 0)
return out
なぜこの結果になったのか(3つの理由)
- 1勝てた確率が11.52%と、とても低かったです。これは、100回やったら11回くらいしか勝てなかったということです。TSIオシレーターだけだと、短い時間の動きにだまされて、「今がチャンス!」と思ったのに実は違った、ということが多かったのかもしれません。
- 21回あたりの取引の平均を見ると、もうけよりも損のほうが大きくなってしまいました(期待値がマイナスでした)。
- 3もうけたお金(利益)と、損したお金(損失)を比べた数字(PF)が0.23でした。これは、もうけた金額よりも損した金額の方がずっと多かった、ということを表しています。最終的に、最初のお金が全部なくなってしまったのは、この作戦ではうまく利益を出し続けられなかったからです。
この結果から学べる3つの教訓
- 1TSIオシレーターは値段の元気さを見るのに役立ちますが、これ1つだけではちょっと力が足りないようです。他の分析ツールと一緒に使う必要がありそうです。
- 25分ごとの短い時間での取引は、チャンスがたくさんあるように見えますが、その分、細かい値動きに惑わされて、間違った判断をしやすくなる難しさがあります。
- 3勝てる確率が低くても、1回で大きく勝てればプラスになることもありますが、この作戦ではそれも難しかった、ということがわかりました。
リスク管理の具体的手法
取引量の決め方
取引に使うビットコインの量は、自分が持っているお金全部のうち、ほんの少し(100分の1とか2)だけを使うようにします。こうすれば、もし取引がうまくいかなくても、全体のお金へのダメージを小さくできます。
損失が大きくなったときの対処法
もし損が続いて、持っているお金が1割減ってしまったら、一度すべての取引をやめて、作戦を見直します。これ以上、損が大きくならないようにすることが一番大切です。
資金管理の方法
取引に使うお金は、もしなくなっても生活に困らない「余裕のあるお金」だけにします。また、もうけが出たときは、その一部を次回の取引のためにとっておくなど、計画的にお金を管理することが大事です。
改良案の具体的提案
- TSIオシレーターの設定の数字を色々変えてみて、今のビットコインの動きに合う設定を探してみること。
- 他の分析ツール(例えば、移動平均線などのお助けアイテム)と一緒に使って、もっと確かな「買い」や「売り」のサインを見つけ出すこと。
- 「ここまで損したらやめる(損切り)」とか、「ここまでもうかったらやめる(利食い)」というルールをもっとハッキリ決めて、きちんと守ること。
実用性の向上(運用上の注意)
- この結果は、あくまで昔のデータで試したものなので、未来も同じ結果になるわけではありません。
- 実際にお金を使って取引する前に、まず少なめの金額で試したり、お金を使わない練習用の取引(デモトレード)で練習したりすることをおすすめします。
- マーケットの様子はいつも変わるので、この作戦が今もうまくいくか、時々チェックして、必要ならやり方を変えていくことが重要です。
検証の透明性と信頼性
- データの出所: 昔のビットコインの5分ごとの値動きのデータを使いました。
- 検証のやり方: 昔のデータを使って、「もしこの作戦で取引していたら、どうなっていたか?」というシミュレーション(バックテスト)をしました。
- コード: この作戦を計算するためのコンピュータープログラムは、ちゃんと公開されています。
- 注意事項: このお話は、「こうすればもうかるよ」と投資をおすすめするものではありません。投資には、大切なお金が減ってしまう可能性があります。お金をかけるときは、必ず自分でよく考えて、自分の責任で行ってください。