コインの元気度を示す線が交差!BNB/USDTで自動売買してみた結果
ある特別な線とその平均の線が交差するタイミングで、コインを買ったり売ったりする作戦を試してみました。BNB/USDTというコインの組み合わせで、1時間ごとの値動きを見ながら、約1年半の期間でテストした結果を、わかりやすく説明しますね。
導入と前提条件
ある特別な線とその平均の線が交差するタイミングで、コインを買ったり売ったりする作戦を試してみました。BNB/USDTというコインの組み合わせで、1時間ごとの値動きを見ながら、約1年半の期間でテストした結果を、わかりやすく説明しますね。
【検証】戦略のバックテスト概要
- 戦略名: ADL MA Crossover を使用したトレンド追従戦略
- 対象銘柄: BNB/USDT
- 時間足: 1h
- 期間: 2024-02-11〜2025-08-25(560日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: kucoin
ADL MA Crossover の理論的背景
この作戦の基本的な考え方は、「コインの勢いの流れが変わる瞬間をキャッチする」ということです。ADLは、コインが買われたり売られたりした勢いをずっと記録していく、いわば「元気度メーター」のようなものです。一方、移動平均線は、その元気度の平均なので、流れがなめらかになります。この2つの線が交差するということは、コインの勢いの流れが変わり始めたサインだと考えられます。そのタイミングで売り買いすることで、利益を狙おうというのが、この作戦の目的です。
具体的な売買ルール(今回の検証)
エントリー条件
- 【いつ買うの?】 コインの元気度を示す線(ADL)が、その平均線(ADL MA)を下から上に追い越したときです。
エグジット条件
- 【いつ売るの?】 コインの元気度を示す線(ADL)が、その平均線(ADL MA)を上から下に割り込んだときです。
リスク管理
残念ながら、この作戦には「もし値段が予想と反対に動いてしまった時に、損を小さくするための特別ルール」は入っていませんでした。そのため、一度損をし始めると、それが大きくなりやすいという弱点がありました。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBNB/USDTのOHLCVを取得して前処理
- 『ADL MA Crossover』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 801回 |
勝率 | 28.09% |
平均利益 | 1.84% |
平均損失 | -1.02% |
期待値 | -0.22% |
プロフィットファクター | 0.78 |
最大ドローダウン | 90.9% |
最終リターン | -85.27% |
シャープレシオ | -0.43 |
HODL(Buy&Hold) | 169.43% |
HODL戦略との比較
実装コード(Python)
"""
ADL MA Crossover
累積/配分(ADL)とそのSMAのクロスで判定するのだ。
"""
import pandas as pd
def _adl(df: pd.DataFrame) -> pd.Series:
mfm = ((df['close'] - df['low']) - (df['high'] - df['close'])) / (df['high'] - df['low']).replace(0, 1)
mfv = mfm * df['volume']
return mfv.cumsum()
def calculate_adl_ma_signals(df: pd.DataFrame, ma_period: int = 20) -> pd.DataFrame:
out = df.copy()
out['adl'] = _adl(out)
out['adl_ma'] = out['adl'].rolling(ma_period).mean()
prev = (out['adl'] - out['adl_ma']).shift(1)
now = out['adl'] - out['adl_ma']
out['is_buy'] = (now > 0) & (prev <= 0)
out['is_sell'] = (now < 0) & (prev >= 0)
return out
なぜこの結果になったのか(3つの理由)
- 1この作戦の勝率は約28%でした。これは、10回取引したら勝てるのは3回もない、ということです。つまり、利益が出た取引よりも、損した取引のほうがずっと多かったことになります。ADLと平均線が交わるだけでは、本当に値段が上がるタイミングをうまく見つけられなかったようです。
- 21回の取引で、平均して0.22%ずつ損をしていました。これは、売り買いのタイミングが少しずつズレていて、小さな損が積み重なってしまったことを意味します。
- 3最終的に、元のお金が85%以上も減ってしまいました。一番大きくお金が減った時には、持っていたお金の90.9%がなくなった瞬間もありました。これは、値段が大きく下がったときに、大きなダメージを受けてしまったことを示しています。何もしないでコインをただ持っているだけ(HODL)の場合と比べても、成績は悪かったです。
この結果から学べる3つの教訓
- 1コインの元気度(ADL)と、その平均線が交わるのは、流れが変わるサインになることもありますが、それだけで安定して勝ち続けるのは難しいということがわかりました。
- 2全部で801回も取引のチャンスがあったのに、勝率が低かったということは、売ったり買ったりするタイミングが、あまり良くなかったということです。
- 3コインの値段は、時には激しく動きます。どんなに良い作戦だと思っても、「損を小さくするためのブレーキ」のような仕組みが、とても大切だということを学びました。
リスク管理の具体的手法
取引量の決め方
この作戦では、「1回の取引で、いくら分のお金を使うか」というルールが決まっていませんでした。そのため、たまたま大きな金額で取引した時に値段が下がってしまうと、大損につながる危険がありました。
損失が大きくなったときの対処法
もしお金が大きく減ってしまっても(最大で90.9%)、自動で取引をストップするような仕組みがありませんでした。そのため、損がどんどん膨らんでしまう可能性がありました。
資金管理の方法
持っているお金全体をどうやって管理するか、という計画も特にありませんでした。そのため、取引がうまくいかなかった場合に、大切なお金のほとんどを失ってしまう危険がありました。
改良案の具体的提案
- 元気度メーター(ADL)だけでなく、例えば「値段の揺れの大きさ」を測るような、他の道具も一緒に使って、もっと確実なタイミングで売り買いできるように改良します。
- コイン全体の調子が悪くて、値段が下がり続けているような時期は、取引をお休みするルールを加えます。また、「これ以上損したら、いったんストップする」というルールも追加して、大きな損を防ぎます。
- 2つの線がただ交差した時だけでなく、「どれくらい勢いよく交差したか」や「交差した後の動き」なども見て、本当に信頼できるサインの時だけ取引するようにします。
実用性の向上(運用上の注意)
- この作戦をそのまま試すのは、あまりおすすめできません。もし試すなら、まずは失っても大丈夫な少額でやるか、本物のお金を使わない練習用の取引(デモトレード)で様子を見てください。
- コインの世界はいつも変化しています。この作戦が、いつもうまくいくとは限りません。定期的に成績をチェックして、必要ならルールを見直すことが大切です。
- このテスト結果は、あくまで過去のデータで試したものです。未来の値段の動きを約束するものではありません。最後は、ご自身の判断で慎重に決めてくださいね。
検証の透明性と信頼性
- データの出所: このテストは、公開されているBNB/USDTというコインの、2024年2月11日から2025年8月25日までの約1年半ぶんの1時間ごとの値動きデータを使って計算しました。
- 検証のやり方: もしこの作戦を過去のその期間で実行していたら、どんな結果になっていたか」を、コンピューター上で再現(シミュレーション)して、成績を計算しました。
- コード: この作戦を動かすためのプログラム(Pythonというプログラミング言語で書かれています)は、公開されています。
- 注意事項: この説明は、投資の作戦と、そのテスト結果をわかりやすくお伝えするためのものです。投資をすすめるものではありません。コインの取引には、お金が減ってしまうリスクがあります。投資をするかどうかは、最後はご自身の責任で判断してください。