値段の『いきおい』で判断!仮想通貨の売り買いタイミングを見つける方法
この方法は、仮想通貨(ETH/USDT)の5分ごとの値段の動きを見て、「これから上がりそう?」「それとも下がりそう?」と予測するための作戦です。約1年間のデータで試してみた結果、どうすればもっと上手くいくかのヒントが見つかりました。この作戦の仕組みと、わかったことを中学生にもわかるように説明しますね。
導入と前提条件
この方法は、仮想通貨(ETH/USDT)の5分ごとの値段の動きを見て、「これから上がりそう?」「それとも下がりそう?」と予測するための作戦です。約1年間のデータで試してみた結果、どうすればもっと上手くいくかのヒントが見つかりました。この作戦の仕組みと、わかったことを中学生にもわかるように説明しますね。
【検証】戦略のバックテスト概要
- 戦略名: Kase Peak Oscillator を使用したトレンド追従戦略
- 対象銘柄: ETH/USDT
- 時間足: 5m
- 期間: 2024-08-29〜2025-08-25(360日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: bybit
Kase Peak Oscillator の理論的背景
市場では、値段が上がりすぎたり、下がりすぎたりすることがあります。これを「買われすぎ」「売られすぎ」と言います。この作戦は、そういう時に「そろそろ反対に動くはずだ」と予想する方法です。KPOは、最近の値段の動きの大きさを調べて、値段のいきおいがどちらに向かっているかを見ています。そして、そのいきおいが「弱すぎライン」を下回ったら「買われすぎかも」と判断し、買いのチャンスを探します。でも、今回のテストでは、このサインが出ても、残念ながら損をしてしまうことが多かったようです。
具体的な売買ルール(今回の検証)
エントリー条件
- KPOという『いきおいメーター』の数字が、下の基準線を下回った後、もう一度その線を上回ったときが「買い」の合図です。
エグジット条件
- KPOの数字が、上の基準線を上回った後、もう一度その線を下回ったときが「売り」の合図です。
リスク管理
大きな損をしないためには、あらかじめ「これ以上損したらやめる」というルールを決めておくことがとても大切です。この作戦では、一回の取引で大きな損をしないように特に注意が必要になります。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでETH/USDTのOHLCVを取得して前処理
- 『Kase Peak Oscillator』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 640回 |
勝率 | 40% |
平均利益 | 1.11% |
平均損失 | -1.22% |
期待値 | -0.29% |
プロフィットファクター | 0.56 |
最大ドローダウン | 88.32% |
最終リターン | -86.38% |
シャープレシオ | -0.17 |
HODL(Buy&Hold) | 83.98% |
HODL戦略との比較
実装コード(Python)
"""
Kase Peak Oscillator Trading Signal Generator
トレンドの転換点を検出する高度なオシレーター
"""
import pandas as pd
import numpy as np
def calculate_kase_signals(df: pd.DataFrame,
period: int = 30,
smooth: int = 3) -> pd.DataFrame:
"""
Kase Peak Oscillator戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
period : int
ルックバック期間(デフォルト: 30)
smooth : int
平滑化期間(デフォルト: 3)
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# True Range計算
df['h_l'] = df['high'] - df['low']
df['h_c'] = np.abs(df['high'] - df['close'].shift(1))
df['l_c'] = np.abs(df['low'] - df['close'].shift(1))
df['true_range'] = df[['h_l', 'h_c', 'l_c']].max(axis=1)
# Average True Range
df['atr'] = df['true_range'].rolling(window=period).mean()
# 上昇・下降レンジ
df['up_move'] = df['high'] - df['high'].shift(1)
df['down_move'] = df['low'].shift(1) - df['low']
# 正規化された動き
df['up_norm'] = df['up_move'] / (df['atr'] + 0.0001)
df['down_norm'] = df['down_move'] / (df['atr'] + 0.0001)
# KPO計算
df['kpo_raw'] = df['up_norm'].rolling(window=period).sum() - df['down_norm'].rolling(window=period).sum()
df['kpo'] = df['kpo_raw'].ewm(span=smooth, adjust=False).mean()
# 標準偏差バンド
df['kpo_std'] = df['kpo'].rolling(window=period).std()
df['kpo_upper'] = df['kpo_std'] * 1.5
df['kpo_lower'] = -df['kpo_std'] * 1.5
# シグナル生成
df['kpo_prev'] = df['kpo'].shift(1)
df['is_buy'] = (
(df['kpo'] > df['kpo_lower']) &
(df['kpo_prev'] <= df['kpo_lower']) &
df['kpo'].notna()
)
df['is_sell'] = (
(df['kpo'] < df['kpo_upper']) &
(df['kpo_prev'] >= df['kpo_upper']) &
df['kpo'].notna()
)
# 不要カラム削除
df.drop(['h_l', 'h_c', 'l_c', 'true_range', 'up_move', 'down_move',
'up_norm', 'down_norm', 'kpo_raw', 'kpo_prev'], axis=1, inplace=True, errors='ignore')
return df
なぜこの結果になったのか(3つの理由)
- 1この作戦は、みんなが買っている時に「売り」、みんなが売っている時に「買う」という『逆張り』という考え方です。でも仮想通貨の世界では、勢いがついた方向にそのままついていく『順張り』の方がうまくいくことも多く、逆張りはうまくいかないことがあるんです。
- 25分ごとなど、短い時間で値段を見ると、本当の大きな流れとは関係ない、ちょっとした値段のブレがたくさんあります。そのため、作戦がうまく働かないことがあります。また、何回も売り買いすると、そのたびに手数料がかかってしまうのも原因の一つです。
- 3100回取引したら40回しか勝てない(勝率40%)という結果でした。勝つ回数が少ないだけでなく、勝った時の利益より負けた時の損失の方が大きかったため、全体として損をしてしまう結果になりました。
この結果から学べる3つの教訓
- 1どんな取引の作戦も、いつでもうまくいくわけではない、ということがわかりました。市場の様子や、どのくらいの時間で値段を見るかによって、うまくいく作戦は変わってくるんですね。
- 2何回勝ったか(勝率)だけでなく、一回ごとの勝ちや負けの金額のバランスもすごく大事だということがわかりました。
- 3短い時間での取引は、より注意深く「損をしないためのルール」を決めたり、市場のことをもっとよく知ったりする必要がある、ということを学びました。
リスク管理の具体的手法
取引量の決め方
一度に使うお金は、自分が持っているお金のすごく小さい一部(例えば100分の1)だけにします。そうすれば、もし負けても全体のお金へのダメージを小さくできます。
損失が大きくなったときの対処法
もし負けが続いてしまって、お金が大きく減ってしまったら、一度取引をお休みするルールを決めます。これ以上減ったらストップ、という線を引いておくことが大切です。
資金管理の方法
取引に使うお金は、もしなくなっても生活に困らないお金だけにします。そして、もし利益が出たら、その一部は使わずに貯金するなど、賢くお金を管理することが大事です。
改良案の具体的提案
- 値段のいきおいがある方向に、そのままついていく『順張り』の考え方も取り入れて、新しい作戦を試してみます。
- 5分ごとの動きだけでなく、15分や1時間ごとといった、もっと長い時間の値段の動きも見て、より確かな売り買いのタイミングを探すようにします。
- 「これは本当にチャンスだ!」と思える強いサインが出た時だけ取引するようにして、むやみに取引する回数を減らします。
実用性の向上(運用上の注意)
- この作戦の結果は、あくまで過去のデータで試したものです。未来も同じようにうまくいくとは限りません。試すときは、必ずなくなってもいいと思える少額のお金から始めましょう。
- 取引している仮想通貨だけでなく、世の中のニュースや、他の仮想通貨がどう動いているかにも気を配ると、より良い判断ができるようになります。
- この作戦の「買うタイミング」や「売るタイミング」は、あくまでヒントです。実際に取引するときは、最後は自分の頭で考えて判断することが大切です。
検証の透明性と信頼性
- データの出所: この結果は、提供された過去のデータをもとに計算されています。
- 検証のやり方: 取引回数や勝率などのデータを使って、この作戦がうまくいったかどうかを確かめています。
- コード: コンピュータ用のプログラム(Pythonコード)が公開されているので、誰でも同じテストを試すことができます。
- 注意事項: この説明は、投資をおすすめするものではありません。仮想通貨の取引には、お金が減ってしまうリスクがあります。取引をするときは、必ず自分でよく考えて、自分の責任で行ってください。