ビットコイン取引の作戦を学ぼう!平均足と移動平均線でわかる「流れに乗る」作戦
この作戦は、ビットコインの値段が「上がっているか」「下がっているか」の大きな流れを、特別なグラフと線を使って見つけようとするものです。5分ごとの細かい値動きを見て、約1年間、昔のデータでうまくいくか試してみました。
導入と前提条件
この作戦は、ビットコインの値段が「上がっているか」「下がっているか」の大きな流れを、特別なグラフと線を使って見つけようとするものです。5分ごとの細かい値動きを見て、約1年間、昔のデータでうまくいくか試してみました。
【検証】戦略のバックテスト概要
- 戦略名: Heikin Ashi Trend を使用したトレンド追従戦略
- 対象銘柄: BTC/USDT
- 時間足: 5m
- 期間: 2024-09-15〜2025-08-25(343日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: binance
Heikin Ashi Trend の理論的背景
この作戦の考え方は「流れに乗る(トレンドフォロー)」と呼ばれます。値段が上がり続けているときは「買い」、下がり続けているときは「売り」という、とてもシンプルな方法です。物の値段は、しばらく同じ方向に動き続けることがあります。これを「トレンド」と言います。この作戦では、平均足がプラス(値段が上がった印)で、平均線も上向きのとき、「これは上がる勢いが強いぞ!」と考えて買うチャンスとします。逆に、平均足がマイナス(値段が下がった印)で、平均線も下向きのときは、「下がる勢いが強いな」と考えて売るチャンスとします。つまり、値段の「勢い」と「方向」を見て取引する考え方なんです。
具体的な売買ルール(今回の検証)
エントリー条件
- 平均足が上向きで、平均線よりも上にあって、その平均線も上を向いていたら、取引を始めます(買い)。
- 平均足が下向きで、平均線よりも下にあって、その平均線も下を向いていたら、取引を始めます(売り)。
エグジット条件
- 買った後、平均足が下を向いたり、平均線が下がり始めたら、取引を終えます(もうけを確定したり、損を止めたりします)。
- 売った後、平均足が上を向いたり、平均線が上がり始めたら、取引を終えます。
リスク管理
大きな損をしないためのルールも大事です。例えば、1回の取引で使うお金は、持っているお金のほんの少しだけ、と決めておきます。もし損が大きくなったら、一旦取引をお休みする、というルールも考えられます。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Heikin Ashi Trend』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 2649回 |
勝率 | 12.61% |
平均利益 | 0.76% |
平均損失 | -0.55% |
期待値 | -0.39% |
プロフィットファクター | 0.21 |
最大ドローダウン | 100% |
最終リターン | -100% |
シャープレシオ | -1.52 |
HODL(Buy&Hold) | 86.71% |
HODL戦略との比較
実装コード(Python)
"""
Heikin Ashi Trend Signal
平均足の陽転/陰転とHA-SMA傾きでトレンド判定するのだ。
"""
import pandas as pd
def _heikin_ashi(df: pd.DataFrame) -> pd.DataFrame:
out = df.copy()
ha_close = (out['open'] + out['high'] + out['low'] + out['close']) / 4
ha_open = ha_close.copy()
ha_open.iloc[0] = (out['open'].iloc[0] + out['close'].iloc[0]) / 2
for i in range(1, len(out)):
ha_open.iloc[i] = (ha_open.iloc[i-1] + ha_close.iloc[i-1]) / 2
out['ha_open'] = ha_open
out['ha_close'] = ha_close
return out
def calculate_heikin_ashi_trend_signals(df: pd.DataFrame, ma_period: int = 20) -> pd.DataFrame:
out = _heikin_ashi(df)
out['ha_sma'] = out['ha_close'].rolling(ma_period).mean()
out['ha_sma_slope'] = out['ha_sma'].diff()
# シンプルな条件
out['is_buy'] = (out['ha_close'] > out['ha_open']) & (out['ha_close'] > out['ha_sma']) & (out['ha_sma_slope'] > 0)
out['is_sell'] = (out['ha_close'] < out['ha_open']) & (out['ha_close'] < out['ha_sma']) & (out['ha_sma_slope'] < 0)
return out
なぜこの結果になったのか(3つの理由)
- 1この作戦を試した結果、2649回も取引したのに、勝てたのはたった12.61%でした。つまり、ほとんどの取引で負けてしまったため、全体として損をしてしまいました。
- 2もうけと損のバランスを見る「プロフィットファクター」という数字が、1よりずっと小さい0.21でした。これは、もうかった金額よりも、損した金額の方がずっと大きかったことを表しています。
- 3最終的に、持っていたお金が全部なくなってしまいました(最終的なもうけが-100%)。一番お金が減った時も、全部なくなっていました(一番減った割合が100%)。
この結果から学べる3つの教訓
- 1ただ単純に値段の流れに乗るだけでは、特に値動きが激しいビットコインのようなものでは、もうけを出し続けるのは難しいことがある、とわかりました。
- 2平均足や平均線の向きだけで取引のタイミングを決めるのは、安定して勝つためには、ちょっと情報が足りないのかもしれない、と気づきました。
- 3作戦を立てたら、まず過去のデータでしっかりテストして、本当にうまくいくのかを確かめることが、すごく大事だと学びました。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金は、持っているお金全体の1%から2%くらいまでにします。こうすれば、もし何回か続けて負けても、すぐにお金が全部なくなることはありません。
損失が大きくなったときの対処法
もし、持っているお金が10%のように、決めた割合以上減ってしまったら、一度すべての取引をやめて、作戦を見直す時間を作る、というルールを決めます。
資金管理の方法
長く取引を続けていくために、もうかったお金の管理も大切です。もうけの一部を次の取引に使ったり、一部は貯金したりと、計画的にお金を使いましょう。
改良案の具体的提案
- 平均足と平均線だけでなく、他の道具(例えば『買われすぎ』や『売られすぎ』がわかる道具など)も一緒に使って、もっと確かな『買い』や『売り』の合図を見つけるようにします。
- 『これ以上損したくない』という損切りのルールを、もっとはっきり決めます。逆にもうけが出ているときは、もっともうけを伸ばせるような工夫を取り入れます。
- 平均線を計算するときの期間など、設定の数字をいろいろ変えてみて、どんな状況でもうまく動きやすい、一番良い設定を探します。
実用性の向上(運用上の注意)
- この作戦は、あくまで昔のデータで試しただけなので、未来も同じようにもうかることを約束するものではありません。
- 実際に自分のお金で取引を始める前に、まずは少額で試したり、練習用のツール(デモトレード)で十分に練習したりすることが大切です。
- 市場の様子はいつも変わっていきます。だから、定期的に自分の作戦の成績をチェックして、必要なら見直していくことが大事です。
検証の透明性と信頼性
- データの出所: この説明は、もらったテスト結果のデータをもとに作っています。
- 検証のやり方: もらったテスト結果(成績や設定など)を見て、分析しました。
- コード: この作戦をコンピューターで動かすためのプログラム(Pythonコード)はあります。
- 注意事項: このお話は、投資をおすすめするためのものではありません。お金を使う最終的な判断は、必ず自分で考えて決めてくださいね。過去にうまくいったからといって、将来もうまくいくとは限りません。