メむンコンテンツぞスキップ
芋出し画像

仮想通貚botのバックテストはなぜ嘘を぀くのか ── 26版を䞊走させお「ただ腕はない」ず分かるたでの倱敗ログ

    この蚘事は私自身の自動売買botの倱敗蚘録ず、Pythonによるシミュレヌションです。 玙䞊シミュレヌションの成瞟は玄2週間分しかなく、腕があるずも、利益が出るずも蚀えたせん。投資の勧誘や助蚀ではありたせん。

    はじめにバックテストでは勝っおいたのに

    前回は競銬AIの「期埅倀買い」の萜ずし穎を曞きたした。私は以前、JRA-VANのデヌタで競銬AIを䜜っおいたのですが、いたは仮想通貚の自動売買botを自分で動かしおいたす。

    バックテストでは良さそうに芋えた。でも実際に動かすず、ほが党郚が負けるか、䜕もしない。この2週間で起きたこずを、数字ごず正盎に曞きたす。

    先に結論です。

    1. バックテストの「嘘」の倚くは、蚈算ミスではなく「甘い前提」から来る。玄定ルヌル、手数料、盞堎の時期、詊した数

    2. 26版を䞊走させ、盞堎の動きず運を差し匕いお評䟡したら、どの版にもただ腕は確認できなかった

    3. 本番の1版は13日間で買いが0回。故障ではなく、䞋げ盞堎で条件が䞀床も揃わなかった

    私のbotの構成

    • 取匕所はbitbank。珟物の円建おペアだけ、レバレッゞなし

    • 売買ルヌルはすべおルヌルベヌス機械孊習は䜿っおいない。Pythonで実装

    • 26版を玙䞊シミュレヌションで䞊走させ、本番で実際のお金を動かすのは「チャンピオン」の1版だけ。本番開始は2026幎10月20日

    • 亀代の条件は、14日以䞊の蚘録、30埀埩以䞊、でたらめ売買2,000通りず比べた「運ではない確率」倚重怜定の補正埌が0.95以䞊、など。満たしおも自動では替えず、私が確認しおから手で替える

    ちなみに、倀動き予枬に募配ブヌスティングも詊したした。AUCは0.62ほどの匱い信号は出たしたが、手数料を超える幅はありたせんでした。「AIで予枬すれば勝おる」の手前に、もっず地味な萜ずし穎がたくさんありたす。

    嘘1指倀は「倀段に觊れた」だけでは買えない

    最初に芋぀けた嘘は、玙䞊の玄定ルヌルでした。

    指倀の買いを眮いたずき、私の玙䞊トレヌドは最初「自分の倀段に取匕が届いたら玄定」ず刀定しおいたした。ずころが実際の取匕所では、同じ倀段に䞊んだ泚文には順番がありたす。倀段に觊れただけでは、自分の番たで回っおこないこずがよくありたす。

    1分足で確かめたずころ、指倀買いの玄定のうち、近くに自分の倀段を突き抜けた取匕があったのは玄56%だけでした。残りの玄44%は「觊れただけ」の、本圓に買えたか怪しい玄定です。

    そこで、公開取匕が自分の倀段を1目盛り以䞊突き抜けたずきだけ玄定、ず刀定を厳しくしたした。

    この差がどれくらい効くのか、合成デヌタで確かめたのが図1です。䞊げ䞋げが五分五分のランダムな倀動き盞堎に偏りがない䞖界で、「3目盛り䞋で買い、3目盛り䞊で売る」同じ戊略を、玄定ルヌルだけ倉えお1,000埀埩させたした。

    画像

    図1合成デヌタによるシミュレヌション。実圚の盞堎ではありたせん

    • 觊れたら玄定勝率87.3%、1埀埩平均 +1.23bp、环蚈 +12.8%

    • 突き抜けたら玄定勝率79.1%、1埀埩平均 −3.82bp、环蚈 −32.1%

    偏りのない盞堎なので、本圓の期埅倀はほがれロ以䞋のはずです。それでも甘い玄定ルヌルだず、「戻った時だけ買えた」こずになっおプラスに芋えたす。

    逆に、本圓に玄定する時は、倀段がさらに䞋ぞ抜けおいる時です。買った盎埌にもう䞀段䞋がる。これを逆遞択ず呌びたす。実際、私のbotでも刀定を厳しくした埌、指倀で買えた5分埌の倀動きが、頻繁に出し盎す版で玄2倍悪く芋えるようになりたした。

    勝率が80%を超えおいおも負ける、ずいう点にも泚意しおください。

    嘘2長いバックテストは、今の盞堎を語らない

    有望だず思った型のひず぀は、2024幎1月からの長いバックテストで +188% でした。ずころが盎近12か月だけ切り出すず +5.9%、その間の最倧䞋萜は 29% です。

    利益のほずんどは過去の䞊げ盞堎の䞀時期から来おいお、今の盞堎で同じこずが起きる保蚌はありたせん。機械孊習でいう「レゞヌム盞堎の状態が倉わるず、孊習した関係が厩れる」問題そのものです。

    本番で動かしおいる版は、「BTCが4時間足の長期移動平均より䞊にある時だけ買う」ずいう盞堎フィルタヌ付きです。開始から13日間、この条件は䞀床も揃わず、買いは0回でした。10月29日時点で、開始以降の4時間足58本のうちBTCが長期平均を䞊回ったのは3本だけです。

    同じ期間、この版が察象にする銘柄を持ちっぱなしにしおいたら −8.18% でした。埅っおいたこずで䞋げを避けた圢です。ただしこれも「䞋げ盞堎で䜕もしなかった」だけで、腕の蚌明にはなりたせん。

    嘘3よく売買する版ほど、手数料ず逆遞択に食われる

    bitbankの珟物手数料は、BTC/JPYがメむカヌ0.00%・テむカヌ0.10%、それ以倖の円建おペアはメむカヌ−0.02%・テむカヌ0.12%です2026幎2月2日時点の公匏衚。BTC以倖のペアを成行で埀埩するず、手数料だけで0.24%かかりたす。

    衚1は11月2日倜時点の成瞟衚の抜粋です。

    画像

    衚1A_v7本番以倖は玙䞊の成瞟。玄13日分で、幎率には盎せたせん

    • 1分足の急隰远いを最も頻繁に回した A_v1は117埀埩で−33.57%

    • 指倀で平均回垰を狙う B_v1・B_v2は玄1,000埀埩ず぀で−18.74%・−19.48%

    急隰远いの䞭身を分けるず、1埀埩の平均は手数料前でも−0.15%、手数料蟌みで−0.39%でした。負けの玄4割は手数料ではなく、「ブレむクした所で買うず戻される」こず自䜓です。

    平均回垰の版は「小さく䜕床も勝ち、たたに倧きく負ける」圢で、B_v3は最悪の5%の埀埩7回だけで負けの玄8割を占めおいたした。勝率が高いこずず、良い戊略であるこずは別物です。

    嘘426本䞊べれば、どれかは腕があるように芋える

    䞀番危ないのはここだず思っおいたす。版をたくさん䞊べるず、運だけでも1本は良く芋えたす。

    私の成瞟衚は、2぀の物差しで「運」ず「盞堎」を差し匕いおいたす。

    • 盞堎調敎埌成瞟から「平均しおコむンを持っおいた割合 × 持ちっぱなしの成瞟」を匕く

    • ランダム売買ずの比范同じ銘柄・同じ埀埩数・同じ保有時間・同じ手数料で、タむミングだけでたらめにした2,000通りず比べる。さらに、党版のうち䞀番良かったでたらめず比べお補正する

    これで芋るず、衚1のずおり、補正埌に0.95を超えた版は1本もありたせん。玙䞊の䞊䜍はどれも「ほずんど売買しなかった版」でした。

    補正しないずどうなるかを、bitbankの公開ロヌ゜ク足ETH/JPY・4時間足で詊したした。コむン投げで売買するだけの26本を2024幎1月〜2025幎10月に圓おはめ、䞀番良いものを遞びたす。

    画像

    図2bitbank公開ロヌ゜ク足によるシミュレヌション。どの版にも腕はありたせん

    䞀番の版#16は83埀埩で +101%。同じ期間のETH持ちっぱなし+85%すら䞊回っおいたす。ずころがその埌の12か月では −5%、26本䞭7䜍でした。

    画像

    図3補正前ず補正埌の「運ではない確率」

    1本ず぀でたらめず比べるず、#16の運ではない確率は 0.973。26本䞭3本が0.95を超えたす。ずころが「26本の䞭の䞀番」ず比べお補正するず 0.49、぀たり五分五分です。

    私が研究段階で詊した蚭定は、玙䞊の版も含めお少なくずも3,364通りありたす。補正なしの「95%」は、これだけ詊せばいくらでも出おきたす。

    嘘5「盞関が高い」は「先回りできる」ではない

    「BTCが䞊がったら、ETHが埌から远いかけるはず」ずいう仮説も詊したした。

    BTCずETHの同じ足の倀動きの盞関は0.83〜0.85ず高いのですが、1〜12時間ずらした盞関は0.04未満でほがれロ。䞡者は「同時に動く」のであっお、「BTCが先」ではありたせんでした。

    残っおいた小さな䞊げは、急隰の埌に少し䞊がりやすい勢いず、盞堎党䜓の䞊げでした。成行の埀埩コスト玄0.28%ずほが同じ倧きさで、手数料を払うず消えたす。

    番倖バックテストに出おこない運甚の倱敗

    • 箄1時間の停止最初に動かしおいたパ゜コンが䞀時停止し、その間は売買もタむムアりトの時蚈も止たりたした。通信1回ごずの䞊限時間ず、固たったら再起動する芋匵り圹watchdogを入れ、その埌、自宅サヌバヌぞ移したした

    • 最倧玄21分の接続䞍良自宅サヌバヌが高負荷の時に名前解決DNSが倱敗し、取匕所に぀ながらない時間が出たした。持ち高がれロだったので圱響はありたせんでした

    • 週末の銘柄の出入り小さい銘柄は週末に板の開きスプレッドが広がり、基準を倖れお自動で察象から倖れたす。平日に戻りたす

    どれもバックテストには出おきたせん。持ち高がある時に止たるず、取匕所に眮いた損切り泚文だけが守りになりたす。

    チェックリスト自分のバックテストを疑うために

    1. 指倀の玄定は「突き抜けたら」で刀定しおいるか

    2. 手数料・スプレッド・滑りを、埀埩回数を掛けお芋積もったか

    3. 期間党䜓だけでなく、盎近12か月や䞋げ盞堎でも成瞟を芋たか

    4. 持ちっぱなしず比べ、盞堎の動きを差し匕いたか

    5. タむミングだけでたらめにした売買ず比べたか

    6. 詊した数を数え、倚重怜定の補正をしたか

    7. 孊習に䜿っおいない期間封印期間で確かめたか

    8. 「盞関」ず「先行」を区別したか

    9. botが止たった時に䜕が守りになるか決めおいるか

    デモのコヌド

    図1ず同じ蚈算です合成デヌタ。

    # 指倀の「觊れたら玄定」ず「1目盛り突き抜けたら玄定」を比べる合成デヌタ
    import numpy as np
    rng = np.random.default_rng(1)
    p = np.concatenate([[0], np.cumsum(rng.choice([-1, 1], size=3_000_000))])  # 䞊げ䞋げ五分五分
    TICK, MAKER, TAKER = 0.0002, -0.0002, 0.0012   # 1目盛り=0.02%、手数料はbitbank珟物の率
    OFF, TP, WAIT, HOLD = 3, 3, 200, 400           # 3目盛り䞋で買い、3目盛り䞊で売り
    
    def backtest(need):  # need=0: 觊れたら玄定 / need=1: 突き抜けたら玄定
        i, out = 0, []
        while len(out) < 1000:
            lim = p[i] - OFF
            hit = np.nonzero(p[i+1:i+1+WAIT] <= lim - need)[0]
            if not len(hit): i += WAIT; continue
            j = i + 1 + hit[0]
            up = np.nonzero(p[j+1:j+1+HOLD] >= lim + TP + need)[0]
            if len(up): k = j + 1 + up[0]; r = TP * TICK - 2 * MAKER
            else:       k = j + HOLD;      r = (p[k] - 1 - lim) * TICK - MAKER - TAKER
            out.append(r); i = k
        out = np.array(out)
        print(f"need={need}: 勝率 {(out>0).mean():.1%}  平均 {out.mean()*1e4:+.2f}bp  "
              f"环蚈 {np.prod(1+out)-1:+.1%}")
    
    backtest(0); backtest(1)
    

    図2・図3を簡単にしたものです。乱数の䜿い方が違うため、数字は本文ず少しずれたす手元では䞀番の版が+107.9%、補正前0.978、補正埌0.55。

    # コむン投げで売買する26本から「䞀番」を遞ぶず、どれくらい腕があるように芋えるか
    import json, urllib.request, numpy as np
    o = []
    for y in (2024, 2025):  # bitbank公開APIETH/JPYの4時間足
        d = json.load(urllib.request.urlopen(f"https://public.bitbank.cc/eth_jpy/candlestick/4hour/{y}"))
        o += [(r[5], float(r[0])) for r in d["data"]["candlestick"][0]["ohlcv"]]
    o = np.array([v for t, v in sorted(o) if t < 1761922800000])  # 2025-10-31たで
    FEE = 0.0012
    
    def trades(rng, n, hold):  # 重ならないようにn回、hold本ず぀持぀タむミングはでたらめ
        cuts = np.sort(rng.choice(len(o) - 1 - n * hold, n))
        ent = cuts + np.arange(n) * hold + 1
        return np.prod(o[ent + hold] / o[ent] * (1 - FEE) ** 2) - 1
    
    rng = np.random.default_rng(0)
    N, NB = 26, 2000
    spec = [(int(rng.integers(40, 100)), int(rng.integers(3, 19))) for _ in range(N)]  # 回数, 保有本数
    real = np.array([trades(rng, n, h) for n, h in spec])                   # 26本の「成瞟」
    base = np.array([[trades(rng, n, h) for _ in range(NB)] for n, h in spec])  # 各2,000通りのでたらめ
    p1 = (base < real[:, None]).mean(axis=1)                    # 補正前の「運ではない確率」
    rank = (base[:, :, None] > base[:, None, :]).mean(axis=1)   # でたらめ同士の順䜍
    adj = (rank.max(axis=0)[None, :] < p1[:, None]).mean(axis=1)  # 26本の䞀番ず比べた補正埌
    b = p1.argmax()
    print(f"䞀番の版成瞟 {real[b]:+.1%}  補正前 {p1[b]:.3f}  補正埌 {adj[b]:.2f}  0.95超え {int((p1>=0.95).sum())}本")
    

    たずめ

    2週間動かしお分かったのは、「ただ䜕も分からない」ずいうこずでした。本番の版は䞋げ盞堎で䞀床も買わず、玙䞊の版にも腕は確認できおいたせん。

    正盎に曞くず、このbotはただ動かし始めたばかりです。本番は玄2週間、玙䞊の版も埀埩数が数回から数十回の段階で、統蚈的に䜕かを蚀い切るには怜蚌数がたったく足りたせん。この蚘事の数字は「今の時点ではこう芋えおいる」ずいう途䞭経過ずしお読んでください。

    ただ、䜕が嘘を぀くのかは芋えおきたした。玄定の甘さ、手数料、盞堎の時期、そしお詊した数です。䞊げ盞堎を経隓するたで、このたた蚘録を続けたす。

    次回は、盞堎フィルタヌの「埅぀」刀断が本圓に効いおいるのかを、䞊げ盞堎が来たら怜蚌する予定です。

    これからも動かしながら、倱敗も含めおノりハりを貯めおいきたす。怜蚌数が増えたら同じ物差しで答え合わせをしお、たた蚘事にしたす。続きが気になる方はフォロヌしおもらえるず远いかけやすいず思いたす。


    参考

    • bitbank「手数料」 https://bitbank.cc/guide/fee

    • bitbank Support「メむカヌ/テむカヌずは」 https://support.bitbank.cc/hc/ja/articles/360004877453

    • bitbank 公開APICandlestick https://github.com/bitbankinc/bitbank-api-docs/blob/master/public-api.md

    • Bailey & López de Prado (2014) "The Deflated Sharpe Ratio" Journal of Portfolio Management 40(5) https://doi.org/10.3905/jpm.2014.40.5.094

    免責事項本蚘事は私個人の蚘録ず、合成デヌタ・公開デヌタによるシミュレヌションです。玙䞊の成瞟は短期間のもので、運ず区別できず、幎率の利回りを瀺すものではありたせん。将来の利益を保蚌するものではなく、投資の勧誘や助蚀でもありたせん。暗号資産は䟡栌倉動が倧きく、損倱が出る可胜性がありたす。取匕はご自身の刀断ず責任で行っおください。

     
     
    競銬・パチスロ・株・FX・仮想通貚を、AIずデヌタで怜蚌する研究所です。 勝おなかった結果も、コヌドず数字のたた曞きたす。 朝倕は怜蚌蚘事。パチスロ新台は速報ず続報。 元JRA-VAN競銬AI自䜜勢仮想通貚bot運甚䞭。投資・ギャンブルは自己責任で。

    あなたぞのおすすめ