「Chande Momentum」でLINK/USDTの売買タイミングを探る!どんな結果になったか見てみよう
この方法は、LINK/USDTという仮想通貨の価格に「勢い」があるか、それとも「勢い」がなくなってきたかを見つけて、売買のタイミングを探す作戦です。1時間ごとの価格の動きを見て、うまくいくタイミングを探します。
導入と前提条件
この方法は、LINK/USDTという仮想通貨の価格に「勢い」があるか、それとも「勢い」がなくなってきたかを見つけて、売買のタイミングを探す作戦です。1時間ごとの価格の動きを見て、うまくいくタイミングを探します。
【検証】戦略のバックテスト概要
- 戦略名: Chande Momentum を使用したトレンド追従戦略
- 対象銘柄: LINK/USDT
- 時間足: 1h
- 期間: 2024-03-02〜2025-08-25(540日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: bybit
Chande Momentum の理論的背景
この作戦の基本的な考え方は、「価格は、勢いがある方向に進みやすい」というものです。例えば、値段がどんどん上がっているときは、もっと上がりやすいかもしれません。逆に、どんどん下がっているときは、もっと下がりやすいかもしれません。Chande Momentumは、最近の価格の上がり幅と下がり幅を比べて、今の勢いを数字にします。この数字が「みんなが買いすぎていて、そろそろ下がるかも」とか、「逆に売られすぎていて、そろそろ上がるかも」ということを教えてくれるので、それをヒントに売買のタイミングを決めるのです。
具体的な売買ルール(今回の検証)
エントリー条件
- 価格の勢いを表す数字が、「売られすぎ」のラインを下から上に突き抜けたら、「買い」の合図かもしれません。
- 価格の勢いを表す数字を、もっと滑らかにした線が、「売られすぎ」のラインを下から上に突き抜けたら、これも「買い」の合図かもしれません。
エグジット条件
- 価格の勢いを表す数字が、「買われすぎ」のラインを上から下に突き抜けたら、持っているのを売るタイミングかもしれません。
- 価格の勢いを表す数字を、もっと滑らかにした線が、「買われすぎ」のラインを上から下に突き抜けたら、これも売るタイミングかもしれません。
リスク管理
もし、予想と反対に価格が動いて損をしそうになったら、すぐに取引をやめる「損切り」というルールが大切です。今回のテストでは、資金が最大で約65%も減ってしまう場面があったので、損を小さくするための工夫がもっと必要だったようです。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでLINK/USDTのOHLCVを取得して前処理
- 『Chande Momentum』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 65回 |
勝率 | 46.15% |
平均利益 | 6.28% |
平均損失 | -6.17% |
期待値 | -0.42% |
プロフィットファクター | 0.74 |
最大ドローダウン | 65.47% |
最終リターン | -38.58% |
シャープレシオ | -0.02 |
HODL(Buy&Hold) | 21.87% |
HODL戦略との比較
実装コード(Python)
#!/usr/bin/env python3
"""
Chande Momentum Oscillator (CMO)戦略
価格変動の強さを測定
"""
import pandas as pd
import numpy as np
def calculate_cmo_signals(df: pd.DataFrame, cmo_period: int = 14,
overbought: float = 50, oversold: float = -50) -> pd.DataFrame:
"""
Chande Momentum Oscillatorシグナルを生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
cmo_period : int
CMO計算期間(デフォルト: 14)
overbought : float
買われすぎ水準(デフォルト: 50)
oversold : float
売られすぎ水準(デフォルト: -50)
Returns:
--------
pd.DataFrame
シグナル列が追加されたDataFrame
"""
df = df.copy()
# 価格変動
df['price_change'] = df['close'].diff()
# 上昇と下降の分離
df['up_move'] = np.where(df['price_change'] > 0, df['price_change'], 0)
df['down_move'] = np.where(df['price_change'] < 0, np.abs(df['price_change']), 0)
# 期間内の合計
df['sum_up'] = df['up_move'].rolling(window=cmo_period).sum()
df['sum_down'] = df['down_move'].rolling(window=cmo_period).sum()
# CMO計算
df['cmo'] = ((df['sum_up'] - df['sum_down']) / (df['sum_up'] + df['sum_down'])) * 100
# CMOの移動平均(スムージング)
df['cmo_ma'] = df['cmo'].rolling(window=3).mean()
# シグナル生成
df['is_buy'] = (
(df['cmo_ma'] > oversold) &
(df['cmo_ma'].shift(1) <= oversold)
)
df['is_sell'] = (
(df['cmo_ma'] < overbought) &
(df['cmo_ma'].shift(1) >= overbought)
)
# NaN値をFalseに置換
df['is_buy'] = df['is_buy'].fillna(False)
df['is_sell'] = df['is_sell'].fillna(False)
print(f"Chande Momentum: 期間={cmo_period}, 買われすぎ={overbought}, 売られすぎ={oversold}")
print(f"買いシグナル数: {df['is_buy'].sum()}")
print(f"売りシグナル数: {df['is_sell'].sum()}")
return df
なぜこの結果になったのか(3つの理由)
- 1この作戦では、LINK/USDTの価格が大きく下がったときに売買を繰り返しましたが、65回の取引全体でみると、利益よりも損失のほうが大きくなってしまいました。これは、売買のタイミングが市場の動きと合わなかったことを示しています。
- 2勝った取引の割合(勝率)が約46%で、半分以上が負けてしまいました。これは、売買の合図が出たとしても、必ずうまくいくわけではない、ということを意味します。
- 3何もしないで、ただずっと持っている場合(専門用語でHODLと言います)と比べると、今回の作戦の成績は良くありませんでした。つまり、細かく売買するよりも、持っているだけの方が結果的に良かった、ということです。
この結果から学べる3つの教訓
- 1Chande Momentumは価格の勢いを知るのに役立ちますが、これ一つだけで売買のタイミングを決めるのは、難しいことがあるようです。他の道具と組み合わせて使うなどの工夫が必要かもしれません。
- 2取引の回数が多くなると、そのたびに手数料がかかります。また、予想が外れたときの損も積み重なりやすいです。勝つ回数が少なくても、一回で大きな利益を狙うような作戦を考えるのも一つの手です。
- 3仮想通貨は、価格がとても大きく動くことがあります。だからこそ、「ここまで損をしたら、いったんやめる」というルール(損切り)をあらかじめ決めておくことが、大きな失敗を防ぐためにとても重要です。
リスク管理の具体的手法
取引量の決め方
一度に、持っているお金の全部を使うのではなく、ほんの一部だけを使って取引をすることです。例えば、おこづかいの1割だけを使う、と決めておけば、もし負けても大きなダメージを受けずに済みます。
損失が大きくなったときの対処法
もし損が積み重なって、持っているお金が一定の割合(例えば10%)まで減ってしまったら、それ以上損が大きくならないように、一度取引をお休みすることです。これで、冷静になる時間も作れます。
資金管理の方法
投資に使うお金と、普段の生活で使うお金は、きちんと分けて管理することが大切です。また、もし利益が出たら、その一部は使わずに取っておくなど、計画的にお金を扱うことが成功の秘訣です。
改良案の具体的提案
- 売買の合図が出たときに、本当に今がチャンスなのかを確かめるために、他の道具(例えば、移動平均線やRSIといったもの)も一緒に見て判断する方法があります。
- 「買われすぎ」や「売られすぎ」を決める基準の数字を、今の市場の様子に合わせて変えてみるのも、一つの工夫です。
- 損が大きくなりすぎないように、一回の取引で失っても大丈夫な金額の上限を、あらかじめきっちり決めておくことが大切です(これをリスク管理と言います)。
実用性の向上(運用上の注意)
- いきなり大きなお金で始めるのではなく、まずは失っても大丈夫なくらいの少額で試してみて、この作戦が自分に合っているかを確認してみましょう。
- 今回は1時間ごとの値動きで見ましたが、4時間ごとや1日ごとなど、見る時間を変えて試してみると、また違う結果が出るかもしれません。
- 世の中のニュースや、その仮想通貨に関する新しい情報もチェックしながら、総合的に判断することが大切です。
検証の透明性と信頼性
- データの出所: このテストの結果は、LINK/USDTの1時間ごとの価格データを使って計算したものです。
- 検証のやり方: 過去のデータを使って、「もしこの作戦で取引していたら、どうなっていたか?」をコンピューターで試してみました(これをバックテストと言います)。期間は2024年3月2日から2025年8月25日までの約1年半です。
- コード: このテストに使ったプログラムは、誰でも見られるように公開されています。プログラミングに興味がある人は、中身をのぞいてみるのも面白いかもしれません。
- 注意事項: この説明は、投資をオススメするためのものではありません。「こうすれば儲かる」という話ではないので注意してください。仮想通貨の取引には、お金が減ってしまう危険が必ずあります。もし実際に取引をするときは、必ず自分でよく考えて、自分の責任で行ってください。