シェア:

未来の値段がわかる?コイン取引の作戦「サイバーサイクル」を大解剖!

この作戦は、コイン(暗号資産)の値段がこれから上がるか下がるかを、まるで未来を当てるかのように予測しようとするものです。「サイバーサイクル」という名前のこの方法が、いつ買ったり売ったりすればいいかをどうやって見つけるのか、そしてその結果はどうだったのかを、わかりやすく説明しますね。

取引数
15834
勝率
12.12%
最終リターン
-100.00%
最大DD
100.00%

導入と前提条件

この作戦は、コイン(暗号資産)の値段がこれから上がるか下がるかを、まるで未来を当てるかのように予測しようとするものです。「サイバーサイクル」という名前のこの方法が、いつ買ったり売ったりすればいいかをどうやって見つけるのか、そしてその結果はどうだったのかを、わかりやすく説明しますね。

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

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

Cyber Cycle の理論的背景

この作戦は、「コインの値段は、上がったり下がったり、決まったリズム(サイクル)で動くことがある」という考え方が元になっています。海で波が何度もやってくるように、値段にも上げ下げの波がくり返し来ると考えるんです。サイバーサイクルでは、まず値段のギザギザの動きを「なめらか」な線にして、本当の波の形を見つけやすくします。次に、その波が「上向き」か「下向き」か、そして波の「大きさはどれくらいか」を計算します。これらの情報を使って、値段が変わりそうな「きっかけ」を見つけて、取引のタイミングを決めるんですよ。

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

エントリー条件

  • 値段の波を表す線が、過去の波のいきおいを示す「きっかけの線」を、下から上にこえたら「買い」のサインです。
  • 値段の波が、「売られすぎ」を示す線よりも下にあった状態から、その線を上にこえ始めたときも「買い」のサインと見なします。

エグジット条件

  • 値段の波を表す線が、「きっかけの線」を、上から下にわってしまったら、持っているコインを売るタイミングです。
  • 値段の波が、「買われすぎ」を示す線よりも上にあった状態から、その線を下まわり始めたときも売るタイミングと見なします。

リスク管理

もし予想がはずれて損しちゃっても、大損しないためのルールです。「ここまで損したらやめる」というラインを決めておいて、それ以上に損が大きくならないようにします。これによって、大切なお金を守りながらチャレンジを続けられるようにします。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数15834回
勝率12.12%
平均利益0.43%
平均損失-0.51%
期待値-0.39%
プロフィットファクター0.11
最大ドローダウン100%
最終リターン-100%
シャープレシオ-3.69
HODL(Buy&Hold)64.28%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Cyber Cycle Trading Signal Generator
デジタルフィルターを使用したサイクル分析
"""
import pandas as pd
import numpy as np


def calculate_cyber_cycle_signals(df: pd.DataFrame,
                                 period: int = 16) -> pd.DataFrame:
    """
    Cyber Cycle戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        サイクル期間(デフォルト: 16)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # 価格データのスムージング
    df['price'] = (df['high'] + df['low']) / 2
    df['smooth'] = (df['price'] + 2 * df['price'].shift(1) + 2 * df['price'].shift(2) + df['price'].shift(3)) / 6
    
    # サイクル成分の抽出(2次IIRフィルター)
    alpha = 2 / (period + 1)
    df['cycle'] = 0.0
    
    for i in range(2, len(df)):
        a = 1 - 0.5 * alpha
        b = 1 - alpha
        c = (1 - 0.75 * alpha)
        if i >= 2 and not np.isnan(df.iloc[i]['smooth']) and not np.isnan(df.iloc[i-1]['smooth']) and not np.isnan(df.iloc[i-2]['smooth']):
            df.loc[df.index[i], 'cycle'] = (
                a**2 * (df.iloc[i]['smooth'] - 2 * df.iloc[i-1]['smooth'] + df.iloc[i-2]['smooth']) + 
                2 * b * df.iloc[i-1]['cycle'] - 
                c**2 * df.iloc[max(i-2, 0)]['cycle']
            )
    
    # トリガーライン(1期前のサイクル)
    df['trigger'] = df['cycle'].shift(1)
    
    # サイクルの標準偏差
    df['cycle_std'] = df['cycle'].rolling(window=period).std()
    
    # ダイナミックレベル
    df['upper_level'] = df['cycle_std'] * 1.5
    df['lower_level'] = -df['cycle_std'] * 1.5
    
    # シグナル生成
    df['is_buy'] = (
        ((df['cycle'] > df['trigger']) & (df['cycle'].shift(1) <= df['trigger'].shift(1))) |  # トリガークロス
        ((df['cycle'] > df['lower_level']) & (df['cycle'].shift(1) <= df['lower_level']))  # 売られ過ぎからの反発
    ) & df['cycle'].notna()
    df['is_sell'] = (
        ((df['cycle'] < df['trigger']) & (df['cycle'].shift(1) >= df['trigger'].shift(1))) |  # トリガークロス
        ((df['cycle'] < df['upper_level']) & (df['cycle'].shift(1) >= df['upper_level']))  # 買われ過ぎからの反落
    ) & df['cycle'].notna()
    
    # 不要カラム削除
    df.drop(['price', 'smooth', 'trigger', 'cycle_std', 'upper_level', 'lower_level'], 
            axis=1, inplace=True, errors='ignore')
    
    return df

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

  1. 1この結果は、「もしこの作戦を昔のデータで使っていたらどうなったかな?」という、お試し(シミュレーション)の結果です。本当にこの通りにお金が動いたわけではありません。
  2. 2「勝率12.12%」というのは、100回チャレンジして、うまくいったのは約12回だけだった、ということです。ほとんどが失敗だったんですね。
  3. 3「最終損益-100%」というのは、最初のお金が、ぜんぶなくなっちゃった、という意味です。つまり、この作戦では、この期間ではまったくもうからなかった、ということになります。

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

  1. 1どんなにすごそうな作戦に見えても、うまくいかなかったときは、その原因をちゃんと調べることが大切です。
  2. 2勝つ回数が少なくても、一回で大きく勝てばプラスになることもありますが、この作戦はそうじゃありませんでした。
  3. 3昔のデータでうまくいかなかった作戦は、そのまま使わずに、もっと良くする方法を考えることが大事です。

リスク管理の具体的手法

取引量の決め方

一回のチャレンジで使うお金は、持っているお金のほんの少しだけにします。例えば、1000円持っていたら、10円とか20円だけ使う、という感じです。そうすれば、もし負けても大きなダメージにはなりません。

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

もし損がどんどんふくらんで、決めておいた金額をこえてしまったら、いったん全部の取引をストップして、作戦を見直します。これ以上、損が広がらないように、冷静になることが大切です。

資金管理の方法

「いくらもうかったら、いったんお休みする」というゴールを決めたりします。また、損が大きくなりすぎないように、いつも自分のお金がぜんぶでいくらあるかをチェックしておくことが重要です。

改良案の具体的提案

  • チャレンジした回数(15834回)が多すぎるのに、勝てた回数が少なすぎます。もっとねらいをすまして、回数をへらしても効率よく取引できるようにした方が良さそうです。
  • もうけの期待度をしめす数字もすごく悪かったので、取引のルールを変えるか、まったく別の作戦を考えた方がいいかもしれません。
  • 「最大DD100%」は、一番大きくお金がへってしまったとき、ぜんぶなくなってしまったことを示しています。だから、損を小さくするためのルールをもっときびしくする必要があります。

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

  • この作戦は、昔のデータで試したらすごく成績が悪かったので、このまま本番のお金で使うのはやめた方が安全です。
  • もしこの作戦を試してみたいなら、まずはゲームみたいに練習するか、本当に少なーいお金で始めて、ルールを大きく変えるなど、すごく注意ぶかくやる必要があります。
  • うまくいかなくても、カッとなったり落ちこんだりせず、「どうしてダメだったんだろう?」と冷静に考えて、次に活かすことが一番大事です。

検証の透明性と信頼性

  • データの出所: このお試し計算には、イーサリアム(ETH)というコインの値段のデータを使いました。値段は、テザー(USDT)という別のコインで表されています。データは、5分ごとの値段の動きを記録したものです。
  • 検証のやり方: この作戦がどれだけうまくいくか、ある期間のデータを使って「もしも」の計算(シミュレーション)をしてみました。
  • コード: この作戦が、どうやって計算しているかの設計図(プログラムコード)は、みんなが見られるようになっています。
  • 注意事項: この結果は、あくまで昔のデータを使った計算上の話で、未来のもうけを約束するものではありません。お金を使った取引には、ソンをする可能性がいつもあります。自分でよく考えて、自分の責任で行ってください。

よくある質問

Q.そもそも「サイバーサイクル」って何?

A.コインの値段の動きを、くり返す「波」のようなものだと考えて、その波のいきおいから未来の動きを予想する方法のことだよ。

Q.「ETH/USDT」って、どういう意味?

A.「ETH」は「イーサリアム」という有名なコインの名前だよ。「USDT」は「テザー」といって、1枚がだいたい1ドルの価値になるように作られたコインのこと。この2つのコインを交換するときの値段の動きを見てるんだ。

Q.「5m」の「時間足」って何?

A.グラフの「ろうそく足」1本が、5分間の値段の動きを表している、ということだよ。短い時間のこまかい動きを見たいときに使うんだ。

Q.「勝率12.12%」って、すごく悪くない?

A.うん、その通り。すごく悪い結果だね。100回チャレンジして、うまくいったのが12回だけだったってこと。ほとんどが予想とは反対に動いちゃったんだ。

Q.「最終損益-100%」って、どういうこと?

A.これは、最初にもっていたお金が、ぜーんぶなくなっちゃいました、っていう意味なんだ。大失敗だったってことだね。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報