シェア:

KSTオシレーターでドージコインの取引に挑戦!でも結果は…?

今回は、「ドージコイン」というコインの取引で、「KSTオシレーター」という道具を使った作戦を試してみました。5分ごとという短い時間で、たくさん売り買いしてみたんですけど、残念ながらうまくいきませんでした。どうして失敗しちゃったのか、一緒に見ていきましょう!

取引数
1330
勝率
35.94%
最終リターン
-99.19%
最大DD
99.24%

導入と前提条件

今回は、「ドージコイン」というコインの取引で、「KSTオシレーター」という道具を使った作戦を試してみました。5分ごとという短い時間で、たくさん売り買いしてみたんですけど、残念ながらうまくいきませんでした。どうして失敗しちゃったのか、一緒に見ていきましょう!

【検証】戦略のバックテスト概要

  • 戦略名: KST Oscillator を使用したトレンド追従戦略
  • 対象銘柄: DOGE/USDT
  • 時間足: 5m
  • 期間: 2024-07-29〜2025-08-25(392日間)
  • 初期資金: $10,000
  • 手数料・スリッページ: 0.1% / 0.1%
  • 取引所: okx

KST Oscillator の理論的背景

この作戦の基本的な考え方は、「値段の勢いが変わる瞬間をつかまえて、うまく流れに乗ろう」というものです。KSTオシレーターは、値段の元気の良さ(勢い)が、これからどうなりそうかを探るのに役立ちます。具体的には、過去の値段の動きを調べて、今の勢いを数字で表します。この数字の線(KSTライン)と、それを滑らかにした線(シグナルライン)が交わるタイミングで売り買いします。今回はちょっと特別で、勢いが下向きのときに買って、上向きのときに売る、という少し変わったルールで挑戦しました。

具体的な売買ルール(今回の検証)

エントリー条件

  • 勢いの線が、それを滑らかにした線を追い越したとき。ただし、全体の勢いがまだマイナス(下がり気味)のときに買います。
  • 1つ前の時点では、勢いの線は滑らかな線の下にいました。

エグジット条件

  • 勢いの線が、それを滑らかにした線よりも下にいったとき。ただし、全体の勢いがプラス(上がり気味)のときに売って、取引を終えます。
  • 1つ前の時点では、勢いの線は滑らかな線の上にいました。

リスク管理

取引で大きな損をしないためには、まず1回に使うお金を少なくすることが大切です。そして、もし予想と反対に値段が動いてしまったら、すぐに取引をやめて損を小さくすることが重要です。今回の作戦では、もうけよりも損のほうが大きくなってしまったので、もっと上手に損を減らす工夫が必要でした。

再現手順(HowTo)

  1. Python/依存(ccxt, pandas, ta)をインストール
  2. ccxtでDOGE/USDTのOHLCVを取得して前処理
  3. 『KST Oscillator』に必要な指標を算出(ta 等)
  4. 閾値・クロス条件から売買シグナルを生成
  5. 手数料・スリッページを加味して検証・評価

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数1330回
勝率35.94%
平均利益1.24%
平均損失-1.23%
期待値-0.34%
プロフィットファクター0.64
最大ドローダウン99.24%
最終リターン-99.19%
シャープレシオ-0.27
HODL(Buy&Hold)68.7%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/usr/bin/env python3
"""
KST(Know Sure Thing)オシレーター戦略
複数のROCを組み合わせたモメンタムインジケーター
"""
import pandas as pd
import numpy as np


def calculate_kst_signals(df: pd.DataFrame, roc_periods: list = [10, 15, 20, 30],
                         sma_periods: list = [10, 10, 10, 15], signal_period: int = 9) -> pd.DataFrame:
    """
    KSTオシレーターシグナルを生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    roc_periods : list
        ROC計算期間のリスト(デフォルト: [10, 15, 20, 30])
    sma_periods : list
        各ROCのSMA期間(デフォルト: [10, 10, 10, 15])
    signal_period : int
        シグナルライン期間(デフォルト: 9)
    
    Returns:
    --------
    pd.DataFrame
        シグナル列が追加されたDataFrame
    """
    df = df.copy()
    
    # 各ROCとSMAを計算
    weights = [1, 2, 3, 4]  # 重み付け
    kst_components = []
    
    for i, (roc_p, sma_p) in enumerate(zip(roc_periods, sma_periods)):
        # ROC計算
        roc = ((df['close'] - df['close'].shift(roc_p)) / df['close'].shift(roc_p)) * 100
        # SMA適用
        roc_sma = roc.rolling(window=sma_p).mean()
        # 重み付けして追加
        kst_components.append(roc_sma * weights[i])
    
    # KST計算(加重平均)
    df['kst'] = sum(kst_components) / sum(weights)
    
    # シグナルライン
    df['kst_signal'] = df['kst'].rolling(window=signal_period).mean()
    
    # シグナル生成(KSTとシグナルラインのクロス)
    df['is_buy'] = (
        (df['kst'] > df['kst_signal']) & 
        (df['kst'].shift(1) <= df['kst_signal'].shift(1)) &
        (df['kst'] < 0)  # ネガティブ領域でのクロス
    )
    
    df['is_sell'] = (
        (df['kst'] < df['kst_signal']) & 
        (df['kst'].shift(1) >= df['kst_signal'].shift(1)) &
        (df['kst'] > 0)  # ポジティブ領域でのクロス
    )
    
    # NaN値をFalseに置換
    df['is_buy'] = df['is_buy'].fillna(False)
    df['is_sell'] = df['is_sell'].fillna(False)
    
    print(f"KSTオシレーター: ROC期間={roc_periods}")
    print(f"買いシグナル数: {df['is_buy'].sum()}")
    print(f"売りシグナル数: {df['is_sell'].sum()}")
    
    return df

なぜこの結果になったのか(3つの理由)

  1. 1勝率が約36%と低くて、3回に1回くらいしか勝てなかったからです。つまり、取引のほとんどで負けてしまいました。
  2. 2「期待値がマイナス」というのは、「1回取引するごとに、平均して少しずつ損をする」ということです。だから、取引すればするほど、お金が減りやすい作戦でした。
  3. 3一番ひどいときには、持っていたお金が99%以上も減ってしまうくらい、大きな失敗がありました。これは、お金がほとんど無くなってしまう危険な状態だったということです。

この結果から学べる3つの教訓

  1. 1KSTオシレーターの「今だ!」というサインが出ても、必ずもうかるわけじゃないことが分かりました。
  2. 21330回もたくさん取引したのに、勝つ確率が低いと、結局は大きな損になってしまうことがあるんですね。
  3. 3「HODL(ホドル)」というのは、ただコインをずっと持っていることです。今回は、がんばって売り買いするよりも、ただ持っているだけの方が、ずっと良い結果になってしまいました。

リスク管理の具体的手法

取引量の決め方

1回の取引で使うお金は、自分が持っているお金のほんの少し(例えば1%〜2%)にするのが基本です。こうすれば、もし取引で負けても、全体のお金へのダメージを小さくできます。

損失が大きくなったときの対処法

もし損が一定の金額を超えてしまったら、そこで取引をやめるというルールが大切です。今回は大きな損が出てしまったので、もっと早く「ストップ!」をかけるルールがあれば良かったです。

資金管理の方法

「持っているお金を全部使っちゃう」とか、「負けた分を取り返そうとして、次にもっと大きなお金をかける」といったやり方はとても危険なので、絶対にやめましょう。長く安定して続けるためには、失っても生活に困らないお金で、落ち着いて取引することが大事です。

改良案の具体的提案

  • KSTオシレーターだけじゃなくて、他の道具(例えば、すごく盛り上がっているときだけ取引する、など)も一緒に使って、もっと勝てそうなときだけを狙うようにします。
  • 取引のルールをもう少し厳しくして、「これは絶対いける!」というときだけ参加するようにします。そうすれば、勝つ確率が上がるかもしれません。
  • 1回の取引で使うお金の量を考え直して、負けても大ダメージを受けないように工夫します。

実用性の向上(運用上の注意)

  • KSTオシレーターだけに頼らないで、他の道具や世の中のニュースも見て、いろいろな情報から判断するのがおすすめです。
  • この作戦をそのまま真似するんじゃなくて、まずは少ないお金で試してみたり、設定を少し変えてみて、自分なりにテストしてみることが大切です。
  • たくさん売り買いすると、そのたびに手数料がかかります。この手数料のことも考えて、本当にプラスになるか計算しないといけません。

検証の透明性と信頼性

  • データの出所: このお話は、2024年7月から約1年半のドージコインの実際の値段のデータを使って調べています。
  • 検証のやり方: パソコンのプログラムを使って、「もしこの作戦で取引していたら、どうなっていたか?」を過去のデータで試してみました。これをバックテストと言います。
  • コード: どんな計算をしたか分かるように、使ったプログラムも公開されています。
  • 注意事項: この結果は、あくまで昔のデータで試したものです。だから、これからも同じようにうまくいくとは限りません。投資は、自分でよく考えて、自分の責任で行ってくださいね。特に仮想通貨は値段の動きが激しいので、なくなっても困らないお金でやるのが鉄則です。

よくある質問

Q.KSTオシレーターって、どんなときに使うの?

A.値段がこれから上がりそうか、下がりそうか、その「勢い」を知りたいときに使う道具です。勢いが弱まったり、強まったりする変わり目を見つけるのが得意なんですよ。

Q.「勝率」って何?

A.取引を100回やったとして、そのうち何回もうかったか、という割合のことです。勝率36%だと、100回やっても36回しか勝てなかった、ということになります。

Q.「期待値」がマイナスってどういうこと?

A.「1回取引するたびに、平均するとお金が減っちゃう」という意味です。つまり、やればやるほど損をしやすくなる、ちょっと残念な作戦だということです。

Q.「最大DD」って、そんなに悪いことなの?

A.はい、すっごく大変なことです。「最大DD」は、お金が一番減っちゃったときの落ち込み具合のことです。99%以上ということは、例えば100万円が1万円くらいまで減っちゃった、というイメージです。とても危険な状態ですね。

Q.この作戦のどこを改善すれば良くなる?

A.まず、勝つ確率を上げるために、もっと「これはイケる!」というチャンスだけを狙うようにすることです。それから、もし負けても被害が大きくならないように、1回に使うお金の量を少なくする工夫も大切です。

Q.検証に使用した期間と時間足は?

A.5m足で検証しました。期間は記事内の概要をご確認ください。

Q.最終リターンと最大ドローダウンは?

A.最終リターンは-99.19%、最大DDは99.24%です。

Q.勝率やPFはどの程度?

A.勝率は35.94%、プロフィットファクターは0.64です。

Q.HODLとの比較結果は?

A.HODLは68.70%でした。記事内の比較表をご覧ください。

Q.手数料やスリッページは考慮済み?

A.はい。バックテスト設定の手数料・スリッページを損益に反映しています。

Q.市場環境はトレンド/レンジどちらに近かった?

A.期間中はトレンド優勢と推測されます。

Q.この戦略は初心者でも扱える?

A.基礎的な指標と検証環境の知識があれば扱えます。まずは少額・デモから。

Q.推奨のリスク管理は?

A.最大DDを踏まえた損切り・ポジションサイジングと、システム停止基準の設定を推奨します。

Q.将来の結果は期待できる?

A.過去の結果は将来を保証しません。市場環境やパラメータ適合性に大きく依存します。

Q.改良の方向性は?

A.トレンド・ボラティリティのフィルター併用、パラメータの再最適化、取引頻度の制御を検討してください。

著者情報