xrp1m 全個体 (52体 / 稼働52 / プラス6)

← ブック一覧 / ダッシュボード — タップで資産曲線とソースを展開。取引ありをequity順、無取引・引退は下。

局面推薦 種 passivbot深押し(帯-0.7%)進化118.498回/勝5/建玉74%/参加08/20
129.6381.46
# 外来シード: passivbot族の変種(実証済み勝ち筋の周辺探索 2026-08-25)
def signal(window, state):
    _exec = 'maker'
    closes = [b["c"] for b in window]
    def ema(vals, n):
        k = 2 / (n + 1)
        e = vals[0]
        for v in vals[1:]:
            e = v * k + e * (1 - k)
        return e
    e_fast = ema(closes[-120:], 30)
    e_slow = ema(closes[-120:], 90)
    if closes[-1] < min(e_fast, e_slow) * 0.993:
        return 1
    return 0
▽種 帯域×投げ売り合議進化110.51125回/勝45/建玉58%/参加08/14
120.6795.48
# 帯域×投げ売り合議シード: EMA帯の下×taker売り集中の時だけ拾う
def signal(window, state):
    _exec = 'maker'
    b = window[-1]
    closes = [x["c"] for x in window]
    def ema(vals, n):
        k = 2 / (n + 1)
        e = vals[0]
        for v in vals[1:]:
            e = v * k + e * (1 - k)
        return e
    e_fast = ema(closes[-120:], 30)
    e_slow = ema(closes[-120:], 90)
    tb = sum(x.get("tb", 0.0) for x in window[-10:])
    ts = sum(x.get("ts", 0.0) for x in window[-10:])
    ofi = (tb - ts) / max(tb + ts, 1e-9)
    if b["t1"] < -0.05:
        return -1
    dip = 0.997
    if b["t1"] < 0:
        dip = dip - 0.002
    if closes[-1] < min(e_fast, e_slow) * dip and ofi < -0.3:
        return 1
    if closes[-1] > max(e_fast, e_slow) * 1.004:
        return -1
    return 0
局面推薦 種 passivbot×リーダーガード進化107.7110回/勝9/建玉94%/参加09/06
117.7791.28
# 外来シード: passivbot族の変種(リーダー急落ガード)
def signal(window, state):
    _exec = 'maker'
    closes = [b["c"] for b in window]
    def ema(vals, n):
        k = 2 / (n + 1)
        e = vals[0]
        for v in vals[1:]:
            e = v * k + e * (1 - k)
        return e
    e_fast = ema(closes[-120:], 30)
    e_slow = ema(closes[-120:], 90)
    if closes[-1] >= min(e_fast, e_slow) * 0.997:
        return 0
    u = window[-1].get('u', 0.0)
    u15 = window[-15].get('u', 0.0)
    if u > 0 and u15 > 0 and u / u15 - 1 < -0.005:
        return 0
    return 1
局面推薦 種 passivbot高頻度(帯-0.15%進化107.5620回/勝29/建玉89%/参加08/20
117.6881.46
# 外来シード: passivbot族の変種(高回転)
def signal(window, state):
    _exec = 'maker'
    closes = [b["c"] for b in window]
    def ema(vals, n):
        k = 2 / (n + 1)
        e = vals[0]
        for v in vals[1:]:
            e = v * k + e * (1 - k)
        return e
    e_fast = ema(closes[-120:], 30)
    e_slow = ema(closes[-120:], 90)
    if closes[-1] < min(e_fast, e_slow) * 0.9985:
        return 1
    return 0
▽☆passivbot流サイクル進化104.327回/勝7/建玉94%/参加08/11
129.2581.46
# 外来シード: passivbot流 —— EMA帯の下に指値買い、マークアップで指値売り
# 原型(v8/Rust)はグリッドDCAで平均取得を下げるが、当エンジンは単一建玉のため
# 「初回エントリー+マークアップ利確」の周期のみを移植。損切りは置かず(sl=999ATR)
# 含み損は保有で耐える(原型と同じ思想。実現損失ゼロの代わりに含みDDを負う)
def signal(window, state):
    _exec = 'maker'
    closes = [b["c"] for b in window]
    def ema(vals, n):
        k = 2 / (n + 1)
        e = vals[0]
        for v in vals[1:]:
            e = v * k + e * (1 - k)
        return e
    e_fast = ema(closes[-120:], 30)
    e_slow = ema(closes[-120:], 90)
    band_lo = min(e_fast, e_slow) * 0.997
    if closes[-1] < band_lo:
        return 1
    return 0
局面推薦 種 passivbot×トレンド適格進化101.807回/勝10/建玉93%/参加08/23
111.3185.03
# 外来シード: passivbot族の変種(トレンド適格)
def signal(window, state):
    _exec = 'maker'
    closes = [b["c"] for b in window]
    def ema(vals, n):
        k = 2 / (n + 1)
        e = vals[0]
        for v in vals[1:]:
            e = v * k + e * (1 - k)
        return e
    sma60 = sum(closes[-60:]) / 60
    sma240 = sum(closes[-120:]) / 120   # WINDOW=150制約内の近似長期
    if sma60 < sma240 * 0.997:
        return 0
    e_fast = ema(closes[-120:], 30)
    e_slow = ema(closes[-120:], 90)
    if closes[-1] < min(e_fast, e_slow) * 0.997:
        return 1
    return 0
(旧)リーダー安定押し目v1進化99.722回/勝0/建玉0%/参加08/11
101.9091.60
# ☆リーダー安定押し目: 自板が投げ売りで急落・リーダーはほぼ無傷の瞬間だけ拾う
# 理論: フォロワー市場のローカルな投げ(需給イベント)はリーダー水準へ回帰する。
# 「押し目の質」をリーダーで判定する — lead-lag makerの核を最も直接に実装。
def signal(window, state):
    _exec = 'maker'
    b = window[-1]
    u = b.get('u', 0.0)
    if u <= 0 or window[-15]['c'] <= 0:
        return 0
    u15 = window[-15].get('u', 0.0)
    if u15 <= 0:
        return 0
    s = 0.0; n = 0
    for i in range(-120, 0):
        w = window[i]; uu = w.get('u', 0.0)
        if uu > 0:
            s += w['c'] / uu; n += 1
    if n < 60:
        return 0
    basis = b['c'] / (u * (s / n)) - 1
    if basis >= -0.0002:
        return -1                     # リーダー水準へ回帰したら手仕舞い
    local15 = b['c'] / window[-15]['c'] - 1
    leader15 = u / u15 - 1
    if local15 < -0.004 and leader15 > -0.001:
        return 1
    return 0
R1634 c4 AST変異(定数摂動・比較演算子の反転・論理演算子進化99.718回/勝1/建玉0%/参加08/11
100.4999.24
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 1
    slow = sum(closes[-30:]) / 32
    prev_fast = sum(closes[-19:-2]) / 4
    prev_slow = sum(closes[-6:-2]) / 57
    state['ref'] = state.get('ref') or window[-1]['c']
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-1:])) / 1 < sum((_x['c'] * _x['v'] for _x in window[-134:])) / max(sum((_x['v'] for _x in window[-245:])), 1.1879965443851408e-09) and sum((_x['c'] * _x['v'] for _x in window[-36:])) / max(sum((_x['v'] for _x in window[-23:])), 8.736749252072185e-10) > window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
R1676 c8 分岐を削除進化99.718回/勝1/建玉0%/参加08/11
100.4999.24
# 狙い: 分岐を削除
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 1
    slow = sum(closes[-30:]) / 32
    prev_fast = sum(closes[-19:-2]) / 4
    prev_slow = sum(closes[-6:-2]) / 57
    state['ref'] = state.get('ref') or window[-1]['c']
    state['peak'] = max(state.get('peak', 0.0), window[-1]['c'])
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-1:])) / 1 < sum((_x['c'] * _x['v'] for _x in window[-134:])) / max(sum((_x['v'] for _x in window[-245:])), 1.1879965443851408e-09) and sum((_x['c'] * _x['v'] for _x in window[-36:])) / max(sum((_x['v'] for _x in window[-23:])), 8.736749252072185e-10) > window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
種 lead-lag追随(taker)固定シード98.634回/勝0/建玉0%/参加08/11
100.5193.13
# 外来シード: lead-lag taker —— 乖離がコストを大きく超えるときだけ成行
def signal(window, state):
    c = [b["c"] for b in window]
    u = [b["u"] for b in window]
    if u[-1] <= 0 or u[-6] <= 0:
        return 0
    lead = u[-1] / u[-6] - 1
    lag = c[-1] / c[-6] - 1
    gap = lead - lag
    if gap > 0.005:
        return 1
    if gap < 0.0:
        return -1
    return 0
▽種 逆張りOFI(投げ拾い)進化98.42190回/勝66/建玉51%/参加08/14
119.7788.30
# 逆張りOFIシード: taker売りの投げ(ofi<閾値)+SMA下方乖離で指値買い
# ラボ実測(2026-08-14): eth TUNE+2.96%(32取引・勝率65%・DD4.3%) VALID+1.94%
# (VALID期間の市場は-1.34% → βでなくタイミング)。順張りOFIは全滅(-46〜-60%)
def signal(window, state):
    _exec = 'maker'
    b = window[-1]
    c = [x["c"] for x in window]
    tb = sum(x.get("tb", 0.0) for x in window[-10:])
    ts = sum(x.get("ts", 0.0) for x in window[-10:])
    tot = tb + ts
    if tot <= 0:
        return 0
    ofi = (tb - ts) / tot
    if b["t1"] < -0.05:
        return -1
    sma = sum(c[-30:]) / 30
    th = -0.5
    if b["t1"] < 0:
        th = th - 0.1
    if ofi < th and c[-1] < sma * 0.997:
        return 1
    if c[-1] > sma * 1.004:
        return -1
    return 0
▽☆リーダー安定押し目進化97.5342回/勝10/建玉1%/参加08/11
100.8890.28
# ☆リーダー安定押し目: 自板が投げ売りで急落・リーダーはほぼ無傷の瞬間だけ拾う
# 理論: フォロワー市場のローカルな投げ(需給イベント)はリーダー水準へ回帰する。
# 「押し目の質」をリーダーで判定する — lead-lag makerの核を最も直接に実装。
def signal(window, state):
    _exec = 'maker'
    b = window[-1]
    u = b.get('u', 0.0)
    if u <= 0 or window[-15]['c'] <= 0:
        return 0
    u15 = window[-15].get('u', 0.0)
    if u15 <= 0:
        return 0
    s = 0.0; n = 0
    for i in range(-120, 0):
        w = window[i]; uu = w.get('u', 0.0)
        if uu > 0:
            s += w['c'] / uu; n += 1
    if n < 60:
        return 0
    basis = b['c'] / (u * (s / n)) - 1
    if basis >= -0.0002:
        return -1                     # リーダー水準へ回帰したら手仕舞い
    local15 = b['c'] / window[-15]['c'] - 1
    leader15 = u / u15 - 1
    # 較正 2026-08-17: -0.4%/15分のローカル投げは実測で月数回しか起きず
    # 6日間0取引。-0.25%へ緩和(リーダー静穏条件は-0.15%へ)
    if local15 < -0.0025 and leader15 > -0.0015:
        return 1
    return 0
R1624 c5 AST変異(定数摂動・比較演算子の反転・論理演算子進化94.0723回/勝2/建玉0%/参加08/11
100.0094.03
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 32
    prev_fast = sum(closes[-12:-2]) / 9
    prev_slow = sum(closes[-26:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 7 < sum((_x['c'] * _x['v'] for _x in window[-134:])) / max(sum((_x['v'] for _x in window[-133:])), 1.1879965443851408e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 9.904214798045837e-10) > window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
▽☆基準回帰k30深押し進化93.9325回/勝4/建玉1%/参加08/11
103.4393.43
# 外来シード: 基準回帰maker 深押し版(系統マーカー bz_)
# k15版と同構造で、乖離要求を-0.30%に上げた低頻度・高単価型。
# 適応度のedge項(1取引純益の統計的下限/往復コスト)は取引を重ねるほど
# 下限が締まるため、「深い乖離だけを待つ」ことで1取引の期待値を太らせる。
def signal(window, state):
    _exec = 'maker'
    b = window[-1]
    u = b.get('u', 0.0)
    if u <= 0:
        return 0
    bz_s = 0.0
    bz_n = 0
    for i in range(-120, 0):
        w = window[i]
        uu = w.get('u', 0.0)
        if uu > 0:
            bz_s += w['c'] / uu
            bz_n += 1
    if bz_n < 60:
        return 0
    bz_basis = b['c'] / (u * (bz_s / bz_n)) - 1
    if bz_basis >= 0.0:
        return -1
    bz_k = 0.0030
    if window[-120]['c'] > 0 and b['c'] / window[-120]['c'] - 1 < -0.003:
        bz_k = 0.0045
    u10 = window[-10].get('u', 0.0)
    if u10 <= 0 or u / u10 - 1 < -0.003:
        return 0
    if bz_basis < -bz_k:
        return 1
    return 0
R1624 c8 AST変異(定数摂動・比較演算子の反転・論理演算子進化93.7921回/勝3/建玉1%/参加08/11
100.0093.79
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-26:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if prev_fast >= prev_slow and fast < slow and (sum((_x['l'] for _x in window[-8:])) / 7 < sum((_x['c'] * _x['v'] for _x in window[-126:])) / max(sum((_x['v'] for _x in window[-120:])), 1.3444666134566798e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) < window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
局面推薦 R3648 c25 外来シード素通し(pas進化89.73106回/勝31/建玉6%/参加08/27
101.0687.29
# 狙い: 外来シード素通し(passivbot深押し(帯-0.7%))
# 外来シード: passivbot族の変種(実証済み勝ち筋の周辺探索 2026-08-25)
def signal(window, state):
    _exec = 'maker'
    closes = [b["c"] for b in window]
    def ema(vals, n):
        k = 2 / (n + 1)
        e = vals[0]
        for v in vals[1:]:
            e = v * k + e * (1 - k)
        return e
    e_fast = ema(closes[-120:], 30)
    e_slow = ema(closes[-120:], 90)
    if closes[-1] < min(e_fast, e_slow) * 0.993:
        return 1
    return 0

R1623 c5 AST変異(定数摂動・比較演算子の反転・論理演算子進化88.2844回/勝3/建玉1%/参加08/11
100.2588.28
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-26:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 7 < sum((_x['c'] * _x['v'] for _x in window[-126:])) / max(sum((_x['v'] for _x in window[-120:])), 1.3444666134566798e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) > window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
R1614 c3 AST変異(定数摂動・比較演算子の反転・論理演算子進化87.5039回/勝1/建玉0%/参加08/11
100.0087.50
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-11:]) / 9
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-1]) / 8
    prev_slow = sum(closes[-29:-1]) / 30
    state['ref'] = state.get('ref') or window[-2]['c']
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 7 < sum((_x['c'] * _x['v'] for _x in window[-121:])) / max(sum((_x['v'] for _x in window[-120:])), 1.0929033761660757e-09) and sum((_x['c'] * _x['v'] for _x in window[-19:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) < window[-1]['l']) and (window[-2]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
▽R1605 c6 条件を厳しく/緩く進化87.0940回/勝0/建玉0%/参加08/11
100.0087.09
# 狙い: 条件を厳しく/緩く
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-31:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -1
    elif min((_x['l'] for _x in window[-8:])) < min((_x['l'] for _x in window[-14:])) or fast >= prev_fast:
        return -1
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 8 < sum((_x['c'] * _x['v'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) < window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
▽☆基準回帰k15進化86.99143回/勝41/建玉6%/参加08/11
105.2786.80
# 外来シード: 基準回帰maker(系統マーカー bz_)
# 理論: 価格発見はリーダー(Bybit perps)で起き、フォロワー現物は水準へ収斂する
# (cross-venue lead-lag/pairs回帰。2025-26の実証研究でも一貫)。
# bitbankがリーダー換算の適正値より安い時に指値買い=約定選択と意図が整合し、
# maker逆選択(モメンタム追い)の構造欠陥を回避する。
# 実測(2026-08-16, live40日): 前半4市場すべて正(+20〜+47bps/取引 t=1.2〜1.9)、
# 後半(下落レジーム)は負。段階ゲートを備えるが、レジーム適応は進化の仕事。
# 手仕舞いは収斂(価格状態)ベースでカウンタ不使用 → index_probe安全。
def signal(window, state):
    _exec = 'maker'
    b = window[-1]
    u = b.get('u', 0.0)
    if u <= 0:
        return 0
    # 適正比率: 過去120本の c/u 平均
    bz_s = 0.0
    bz_n = 0
    for i in range(-120, 0):
        w = window[i]
        uu = w.get('u', 0.0)
        if uu > 0:
            bz_s += w['c'] / uu
            bz_n += 1
    if bz_n < 60:
        return 0
    bz_fair = bz_s / bz_n
    bz_basis = b['c'] / (u * bz_fair) - 1
    # 収斂したら手仕舞い(指値売り)
    if bz_basis >= 0.0:
        return -1
    # 段階ゲート: 自板の中期(120分)下落中は要求を2倍
    bz_k = 0.0015
    if window[-120]['c'] > 0 and b['c'] / window[-120]['c'] - 1 < -0.003:
        bz_k = 0.0030
    # リーダー急落ガード: Bybitの10分リターンが-0.3%未満なら拾わない
    u10 = window[-10].get('u', 0.0)
    if u10 <= 0 or u / u10 - 1 < -0.003:
        return 0
    if bz_basis < -bz_k:
        return 1
    return 0
R1603 c8 AST変異(定数摂動・比較演算子の反転・論理演算子進化85.2552回/勝5/建玉1%/参加08/11
100.0085.25
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-11:]) / 10
    slow = sum(closes[-26:]) / 33
    prev_fast = sum(closes[-12:-2]) / 9
    prev_slow = sum(closes[-27:-1]) / 31
    state['ref'] = state.get('ref') or window[-1]['c']
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -1.0968230111592148
    elif min((_x['l'] for _x in window[-7:])) < min((_x['l'] for _x in window[-14:])):
        return -1
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 8 < sum((_x['c'] * _x['v'] for _x in window[-116:])) / max(sum((_x['v'] for _x in window[-120:])), 1.2226594083395402e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1.0838382905417296e-09) < window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
▽☆基準回帰×funding合議進化84.95179回/勝50/建玉7%/参加08/11
107.3884.50
# ☆基準回帰×funding合議: 割安(basis)とショート混雑(fr<=0)の合議
# 理論: 価格発見収斂(bz_)に、funding負=ショート過密(踏み上げ余地)を重ねる。
# fr正(ロング過密)のときは要求乖離を2倍に(段階ゲート)。
def signal(window, state):
    _exec = 'maker'
    b = window[-1]
    u = b.get('u', 0.0)
    if u <= 0:
        return 0
    s = 0.0; n = 0
    for i in range(-120, 0):
        w = window[i]; uu = w.get('u', 0.0)
        if uu > 0:
            s += w['c'] / uu; n += 1
    if n < 60:
        return 0
    basis = b['c'] / (u * (s / n)) - 1
    if basis >= 0.0:
        return -1
    k = 0.0015 if b.get('fr', 0.0) <= 0 else 0.0030
    u10 = window[-10].get('u', 0.0)
    if u10 <= 0 or u / u10 - 1 < -0.003:
        return 0
    if basis < -k:
        return 1
    return 0
R1600 c6 AST変異(定数摂動・比較演算子の反転・論理演算子進化84.8348回/勝2/建玉1%/参加08/11
100.0084.83
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-26:]) / 27
    prev_fast = sum(closes[-10:-2]) / 9
    prev_slow = sum(closes[-28:-1]) / 34
    state['ref'] = state.get('ref') or window[-2]['c']
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -0.648281424116069
    elif min((_x['l'] for _x in window[-9:])) < min((_x['l'] for _x in window[-12:])):
        return -0.9352648756111873
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-9:])) / 8 < sum((_x['c'] * _x['v'] for _x in window[-131:])) / max(sum((_x['v'] for _x in window[-128:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 9.114522781619574e-10) < window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
▽R1590 c1 else分岐を追加進化84.4151回/勝1/建玉0%/参加08/11
100.0084.41
# 狙い: else分岐を追加
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-31:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    state['peak'] = max(state.get('peak', 0.0), window[-1]['c'])
    if window[-1]['c'] < state.get('peak', 0.0) * 0.9877:
        state['peak'] = 0.0
        return -1
    elif not (window[-1]['v'] / max(sum((_x['v'] for _x in window[-30:])) / 30, 1e-09) > window[-1].get('fr', 0.0) and sum((_x['h'] - _x['l'] for _x in window[-5:])) / max(sum((_x['v'] for _x in window[-5:])), 1e-09) / max(sum((_x['h'] - _x['l'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09), 1e-09) < window[-1].get('u', 1.0) / max(window[-5].get('u', 1.0), 1e-09)):
        return -1
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -1
    elif min((_x['l'] for _x in window[-8:])) > min((_x['l'] for _x in window[-14:])):
        return -1
    if prev_fast <= prev_slow and fast > slow and (sum((_x['v'] for _x in window[-45:])) / 45 / max(sum((_x['v'] for _x in window[-60:])) / 60, 1e-09) >= prev_slow * 0.9513):
        return 1
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 8 > sum((_x['c'] * _x['v'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) < window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    if window[-1].get('u', 1.0) / max(window[-14].get('u', 1.0), 1e-09) <= (window[-1]['c'] - min((_x['l'] for _x in window[-120:]))) / 
R1603 c6 AST変異(定数摂動・比較演算子の反転・論理演算子進化83.9556回/勝1/建玉0%/参加08/11
100.0083.95
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-31:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -1
    elif min((_x['l'] for _x in window[-8:])) > min((_x['l'] for _x in window[-14:])):
        return -1
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 8 < sum((_x['c'] * _x['v'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) < window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
▽☆昇格 R1608 c8 AST変異(定数摂動・比較演算進化83.6166回/勝8/建玉1%/参加08/11
100.0083.43
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-31:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -1
    elif min((_x['l'] for _x in window[-8:])) < min((_x['l'] for _x in window[-14:])):
        return -1
    if prev_fast >= prev_slow and fast < slow and (sum((_x['l'] for _x in window[-8:])) / 8 < sum((_x['c'] * _x['v'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) > window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
R1607 c3 分岐を追加進化82.9258回/勝0/建玉0%/参加08/11
100.0082.92
# 狙い: 分岐を追加
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-31:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -1
    elif min((_x['l'] for _x in window[-8:])) > min((_x['l'] for _x in window[-14:])):
        return -1
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 8 < sum((_x['c'] * _x['v'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) < window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    if window[-1]['o'] <= window[-1]['l']:
        return -1
    return 0.0
▽☆三者合議進化81.18403回/勝110/建玉7%/参加08/11
99.5979.83
# ☆三者合議: 基準回帰 / lead-lag gap / EMA帯逆張り の2/3投票
# 理論: 独立性のある3つの正当なシグナル源の合議は単独より誤検出に強い。
def signal(window, state):
    _exec = 'maker'
    b = window[-1]
    c = [w['c'] for w in window]
    u = b.get('u', 0.0)
    vin = 0; vout = 0
    # 1) 基準回帰
    if u > 0:
        s = 0.0; n = 0
        for i in range(-120, 0):
            w = window[i]; uu = w.get('u', 0.0)
            if uu > 0:
                s += w['c'] / uu; n += 1
        if n >= 60:
            basis = b['c'] / (u * (s / n)) - 1
            if basis < -0.0015:
                vin += 1
            if basis >= 0.0:
                vout += 1
    # 2) lead-lag gap(6分)
    u6 = window[-6].get('u', 0.0)
    if u > 0 and u6 > 0 and c[-6] > 0:
        gap = (u / u6 - 1) - (c[-1] / c[-6] - 1)
        if gap > 0.0008:
            vin += 1
        if gap < -0.0002:
            vout += 1
    # 3) EMA帯逆張り(長期下向きは棄権)
    sma20 = sum(c[-20:]) / 20
    sma60 = sum(c[-60:]) / 60
    if sma20 >= sma60 * 0.9985:
        if c[-1] < sma20 * 0.999:
            vin += 1
        if c[-1] > sma20 * 1.001:
            vout += 1
    if vout >= 2:
        return -1
    if vin >= 2:
        return 1
    return 0
R1599 c4 AST変異(定数摂動・比較演算子の反転・論理演算子進化72.55102回/勝7/建玉2%/参加08/11
100.0072.55
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-31:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -1
    elif min((_x['l'] for _x in window[-8:])) < min((_x['l'] for _x in window[-14:])):
        return -1
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 8 < sum((_x['c'] * _x['v'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) < window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
R1603 c3 分岐を削除進化72.55102回/勝7/建玉2%/参加08/11
100.0072.55
# 狙い: 分岐を削除
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-31:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 8 < sum((_x['c'] * _x['v'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) < window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
局面推薦 種 passivbotトレーリング進化71.37308回/勝60/建玉70%/参加08/23
87.5570.27
# 外来シード: passivbot族の変種(トレーリング)
# 手仕舞いは価格状態ベースのラチェット(index_probe安全): 高値追跡→-1%で-1
def signal(window, state):
    _exec = 'maker'
    closes = [b["c"] for b in window]
    c = closes[-1]
    hi = state.get('pb_hi', c)
    hi = max(hi, c)
    state['pb_hi'] = hi
    if c < hi * 0.99:
        state['pb_hi'] = c            # リセットして再追跡
        return -1
    def ema(vals, n):
        k = 2 / (n + 1)
        e = vals[0]
        for v in vals[1:]:
            e = v * k + e * (1 - k)
        return e
    e_fast = ema(closes[-120:], 30)
    e_slow = ema(closes[-120:], 90)
    if c < min(e_fast, e_slow) * 0.997:
        return 1
    return 0
▽R1596 c2 分岐を削除進化68.89104回/勝2/建玉1%/参加08/11
100.0068.89
# 狙い: 分岐を削除
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-31:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -1
    elif min((_x['l'] for _x in window[-8:])) > min((_x['l'] for _x in window[-14:])):
        return -1
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 8 > sum((_x['c'] * _x['v'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) < window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
種 継続確認maker(qk_)シード66.05545回/勝153/建玉15%/参加08/11
115.1264.32
# 外来シード: 継続確認maker(系統マーカー qk_)
# 根拠(2026-08-14実測・live 40日・5市場):
#   bitbank 1分リターンの符号相関は全時間帯で +0.22〜+0.40(通常分)。
#   フォロワー市場がリーダー(Bybit)の動きを遅れて織り込む構造で、
#   Kim&Hansen(2026)のQH境界リバーサルはbitbankでは成立しない(逆に継続)。
#   3分連続陽線+30分上昇整合のロングは5市場8セル中7セルで正、XRPが最良。
# 設計: 保有は約15分(スプレッド0.1bp級・maker往復リベートで回収)、
#   長期下落圏では要求リターンを段階的に引き上げる(二値ゲート禁止の原則)
def signal(window, state):
    _exec = 'maker'
    qk_hold = state.get('qk_hold', 0)
    if qk_hold > 0:
        state['qk_hold'] = qk_hold - 1
        if qk_hold == 1:
            return -1              # 保有満了 -> 指値売りを置く
        return 0
    if not all(window[i]['c'] > window[i]['o'] for i in (-1, -2, -3)):
        return 0
    qk_need = 0.0
    if window[-1].get('t1', 0.0) < -0.04:
        qk_need = 0.0010
    base = window[-30]['c']
    if base <= 0:
        return 0
    if window[-1]['c'] / base - 1 <= qk_need:
        return 0
    state['qk_hold'] = 15          # 約15分保有
    return 1
R1607 c4 AST変異(定数摂動・比較演算子の反転・論理演算子進化65.15135回/勝5/建玉1%/参加08/11
100.0065.15
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-31:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -1
    elif min((_x['l'] for _x in window[-8:])) > min((_x['l'] for _x in window[-14:])):
        return -1
    if prev_fast <= prev_slow and fast < slow and (sum((_x['l'] for _x in window[-8:])) / 8 < sum((_x['c'] * _x['v'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) < window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
R1608 c1 入れ子を深く(returnを条件で分ける)進化62.18146回/勝3/建玉1%/参加08/11
100.0062.18
# 狙い: 入れ子を深く(returnを条件で分ける)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-31:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -1
    elif min((_x['l'] for _x in window[-8:])) < min((_x['l'] for _x in window[-14:])):
        return -1
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 8 < sum((_x['c'] * _x['v'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) < window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        if sum((_x['h'] - _x['l'] for _x in window[-8:])) / max(sum((_x['v'] for _x in window[-8:])), 1e-09) / max(sum((_x['h'] - _x['l'] for _x in window[-14:])) / max(sum((_x['v'] for _x in window[-14:])), 1e-09), 1e-09) > window[-1]['v'] / max(sum((_x['v'] for _x in window[-20:])) / 20, 1e-09) * 0.9378 or window[-1].get('tn', 0.0) / max(sum((_x.get('tn', 0.0) for _x in window[-90:])) / 90, 1e-09) > window[-1]['c'] / max(sum((_x['c'] for _x in window[-10:])) / 10, 1e-09) * 0.9987:
            return 1
        else:
            return -1
    return 0.0
R1605 c2 AST変異(定数摂動・比較演算子の反転・論理演算子進化61.22152回/勝5/建玉1%/参加08/11
99.9061.22
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-31:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -1
    elif min((_x['l'] for _x in window[-8:])) > min((_x['l'] for _x in window[-14:])):
        return -1
    if prev_fast <= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 8 < sum((_x['c'] * _x['v'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) < window[-1]['l']) and (window[-1]['dw'] >= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
▽種 maker BB下限拾い進化59.58731回/勝232/建玉17%/参加08/11
99.8759.42
# 外来シード: maker BB —— BB(40,2σ)下限割れで指値買い、中心線で指値売り
def signal(window, state):
    _exec = 'maker'
    closes = [b["c"] for b in window]
    n = 40
    mu = sum(closes[-n:]) / n
    var = sum((x - mu) ** 2 for x in closes[-n:]) / n
    sd = var ** 0.5
    c = closes[-1]
    if c < mu - 2 * sd:
        return 1
    if c > mu:
        return -1
    return 0
▽☆旗艦lead-lag+ガード進化56.761158回/勝282/建玉10%/参加08/11
101.4856.55
# 複合シード: lead-lag追随に、実測で判明した弱点への防御を内蔵
def signal(window, state):
    _exec = 'maker'
    c = [b["c"] for b in window]
    u = [b["u"] for b in window]
    if u[-1] <= 0 or u[-6] <= 0:
        return 0
    # 下落トレンドガード: 直近30分で-0.4%超の下げ = 逆選択地帯。買わず逃げる
    if c[-1] / c[-31] - 1 < -0.004:
        return -1
    # ボラフィルタ: 動きが死んでいるときはエッジがコストを跨げない
    rng = sum(abs(c[i] - c[i - 1]) for i in range(-30, 0)) / 30 / c[-1]
    if rng < 0.0002:
        return 0
    lead = u[-1] / u[-6] - 1
    lag = c[-1] / c[-6] - 1
    gap = lead - lag
    if gap > 0.0008:
        return 1
    if gap < -0.0002:
        return -1
    return 0
▽☆旗艦v2全文脈進化56.761158回/勝282/建玉10%/参加08/11
102.5256.55
# 複合シードv2: 旗艦に長期トレンド(t1)と資金調達率(fr)の文脈を追加
def signal(window, state):
    _exec = 'maker'
    b = window[-1]
    c = [x["c"] for x in window]
    u = [x["u"] for x in window]
    if u[-1] <= 0 or u[-6] <= 0:
        return 0
    # 深い長期下落圏(50日SMA比-8%以下)だけ買いの土俵から降りる。
    # 浅い下落圏では全面禁止ではなく「より強い乖離を要求」する段階ゲート
    # (二値ブロックだと局面次第で取引ゼロになり進化の素材にならない)
    if b["t1"] < -0.08:
        return -1
    if c[-1] / c[-31] - 1 < -0.004:
        return -1
    rng = sum(abs(c[i] - c[i - 1]) for i in range(-30, 0)) / 30 / c[-1]
    if rng < 0.0002:
        return 0
    need = 0.0008
    if b["t1"] < 0:
        need = 0.0012          # 長期下落圏では要求乖離を1.5倍に
    if b["fr"] > 0.0003:
        need = need * 1.5      # ロング過密でも同様に慎重化
    gap = (u[-1] / u[-6] - 1) - (c[-1] / c[-6] - 1)
    if gap > need:
        return 1
    if gap < -0.0002:
        return -1
    return 0
R1600 c2 AST変異(定数摂動・比較演算子の反転・論理演算子進化51.57209回/勝22/建玉5%/参加08/11
100.0051.57
# 狙い: AST変異(定数摂動・比較演算子の反転・論理演算子の入替)
def signal(window, state):
    closes = [b['c'] for b in window]
    fast = sum(closes[-10:]) / 10
    slow = sum(closes[-30:]) / 30
    prev_fast = sum(closes[-11:-2]) / 9
    prev_slow = sum(closes[-31:-1]) / 30
    state['ref'] = state.get('ref') or window[-1]['c']
    if window[-1]['c'] < state['ref'] * 0.9753:
        state['ref'] = window[-1]['c']
        return -1
    elif min((_x['l'] for _x in window[-8:])) < min((_x['l'] for _x in window[-14:])):
        return -1
    if prev_fast >= prev_slow and fast > slow and (sum((_x['l'] for _x in window[-8:])) / 8 > sum((_x['c'] * _x['v'] for _x in window[-120:])) / max(sum((_x['v'] for _x in window[-120:])), 1e-09) and sum((_x['c'] * _x['v'] for _x in window[-20:])) / max(sum((_x['v'] for _x in window[-20:])), 1e-09) > window[-1]['l']) and (window[-1]['dw'] <= window[-1].get('fr', 0.0)):
        return 1
    return 0.0
▽種 lead-lag追随(maker)進化45.141548回/勝368/建玉13%/参加08/11
101.3845.04
# 外来シード: lead-lag —— リーダー(u=Bybit同銘柄)が自板より先行して
# 上げたとき、追随の押し目を指値で拾う。u=0はデータ無しなので何もしない
def signal(window, state):
    _exec = 'maker'
    c = [b["c"] for b in window]
    u = [b["u"] for b in window]
    if u[-1] <= 0 or u[-6] <= 0:
        return 0
    lead = u[-1] / u[-6] - 1
    lag = c[-1] / c[-6] - 1
    gap = lead - lag
    if gap > 0.0008:
        return 1
    if gap < -0.0002:
        return -1
    return 0
▽☆maker中心回帰+下落ガード進化40.361190回/勝372/建玉20%/参加08/11
99.2139.99
# 複合シード: 逆張りmakerに長期トレンドガード(下向きなら逆張り禁止)
def signal(window, state):
    _exec = 'maker'
    c = [b["c"] for b in window]
    sma20 = sum(c[-20:]) / 20
    sma60 = sum(c[-60:]) / 60
    # 下落トレンドガード: 長期が下向きの逆張りは「落ちる板に指値」になる
    if sma20 < sma60 * 0.9985:
        return -1
    if c[-1] < sma20 * 0.999:
        return 1
    if c[-1] > sma20 * 1.001:
        return -1
    return 0
種 hlhb EMA5/10クロス+RSI50シード33.79357回/勝19/建玉5%/参加08/11
100.0033.79
# 外来シード: hlhb (freqtrade-strategies, GPL-3.0の論理を再表現)
def signal(window, state):
    closes = [b["c"] for b in window]
    tp = [(b["h"] + b["l"] + b["c"]) / 3 for b in window]
    def ema(vals, n):
        k = 2 / (n + 1)
        e = vals[0]
        for v in vals[1:]:
            e = v * k + e * (1 - k)
        return e
    e5, e10 = ema(tp[-40:], 5), ema(tp[-40:], 10)
    p5, p10 = ema(tp[-41:-1], 5), ema(tp[-41:-1], 10)
    # RSI(14)
    gains = losses = 1e-9
    for i in range(-14, 0):
        d = closes[i] - closes[i - 1]
        if d > 0: gains += d
        else: losses -= d
    rsi = 100 - 100 / (1 + gains / losses)
    # トレンド強度フィルタ(ADX>25の代替: 直近レンジに対する方向成分)
    rng = sum(b["h"] - b["l"] for b in window[-14:]) + 1e-9
    trend = abs(closes[-1] - closes[-15]) / rng
    if p5 <= p10 and e5 > e10 and rsi > 50 and trend > 0.25:
        return 1
    if p5 >= p10 and e5 < e10:
        return -1
    return 0
種 レジーム切替(ER判定)シード33.231690回/勝476/建玉36%/参加08/11
95.9832.65
# 複合シード: 効率比ER>0.35=トレンド(順張り+lead-lag確認)、以下=レンジ(逆張り)
def signal(window, state):
    _exec = 'maker'
    c = [b["c"] for b in window]
    u = [b["u"] for b in window]
    sma20 = sum(c[-20:]) / 20
    sma60 = sum(c[-60:]) / 60
    move = abs(c[-1] - c[-31])
    path = sum(abs(c[i] - c[i - 1]) for i in range(-30, 0)) + 1e-9
    er = move / path
    if er > 0.35:
        if u[-1] > 0 and u[-6] > 0 and sma20 > sma60 and u[-1] / u[-6] > 1:
            return 1
        if sma20 < sma60:
            return -1
    else:
        lo20 = min(b["l"] for b in window[-20:-1])
        if c[-1] < lo20 * 1.0005 and sma20 >= sma60 * 0.999:
            return 1
        if c[-1] > sma20 * 1.001:
            return -1
    return 0
▽種 maker中心回帰進化30.311579回/勝535/建玉34%/参加08/11
99.6330.16
# 外来シード: maker中心回帰 —— SMA20より下で指値買い、上抜けで指値売り
# taker往復0.34%では1分足の値幅を跨げない(公開モデル原型比較R1: 全モデル0取引)。
# makerはリベート(-0.02%)でコスト地形が反転する。損切りだけ成行(広め)
def signal(window, state):
    _exec = 'maker'
    closes = [b["c"] for b in window]
    sma = sum(closes[-20:]) / 20
    c = closes[-1]
    if c < sma * 0.999:
        return 1
    if c > sma * 1.001:
        return -1
    return 0
▽種 maker RSI往復進化27.231688回/勝492/建玉42%/参加08/11
99.7127.23
# 外来シード: maker RSI —— RSI(14)<40で指値買い、>60で指値売り
def signal(window, state):
    _exec = 'maker'
    closes = [b["c"] for b in window]
    gains = losses = 1e-9
    for i in range(-14, 0):
        d = closes[i] - closes[i - 1]
        if d > 0: gains += d
        else: losses -= d
    rsi = 100 - 100 / (1 + gains / losses)
    if rsi < 40:
        return 1
    if rsi > 60:
        return -1
    return 0
種 Strategy001 EMA20/50クロスシード16.34570回/勝49/建玉12%/参加08/11
99.4716.34
# 外来シード: Strategy001 (freqtrade-strategies, GPL-3.0の論理を再表現)
def signal(window, state):
    closes = [b["c"] for b in window]
    def ema(vals, n):
        k = 2 / (n + 1)
        e = vals[0]
        for v in vals[1:]:
            e = v * k + e * (1 - k)
        return e
    e20, e50 = ema(closes[-120:], 20), ema(closes[-120:], 50)
    p20, p50 = ema(closes[-121:-1], 20), ema(closes[-121:-1], 50)
    if p20 <= p50 and e20 > e50 and closes[-1] > e20:
        return 1
    if p20 >= p50 and e20 < e50:
        return -1
    return 0
種 Donchian 20/10 (タートル)シード2.411240回/勝87/建玉32%/参加08/11
100.202.41
# 外来シード: Donchian breakout (20本高値ブレイクで買い/10本安値で手仕舞い)
def signal(window, state):
    hh20 = max(b["h"] for b in window[-21:-1])
    ll10 = min(b["l"] for b in window[-11:-1])
    c = window[-1]["c"]
    if c > hh20:
        return 1
    if c < ll10:
        return -1
    return 0
種 Bollinger逆張り+RSIガードシード0.821438回/勝36/建玉11%/参加08/11
99.940.82
# 外来シード: Bandtastic (BB下限タッチ+RSI過売りで買い、中心線で手仕舞い)
def signal(window, state):
    closes = [b["c"] for b in window]
    n = 20
    mu = sum(closes[-n:]) / n
    var = sum((x - mu) ** 2 for x in closes[-n:]) / n
    sd = var ** 0.5
    gains = losses = 1e-9
    for i in range(-14, 0):
        d = closes[i] - closes[i - 1]
        if d > 0: gains += d
        else: losses -= d
    rsi = 100 - 100 / (1 + gains / losses)
    c = closes[-1]
    if c < mu - 2 * sd and rsi < 30:
        return 1
    if c > mu:
        return -1
    return 0
種 Supertrend(10,3)シード0.171997回/勝121/建玉37%/参加08/11
100.320.17
# 外来シード: Supertrend (ATRバンドのトレンド反転。stateで向きを保持)
def signal(window, state):
    n, mult = 10, 3.0
    trs = []
    for i in range(-n, 0):
        b, pb = window[i], window[i - 1]
        trs.append(max(b["h"] - b["l"], abs(b["h"] - pb["c"]),
                       abs(b["l"] - pb["c"])))
    atr = sum(trs) / n
    mid = (window[-1]["h"] + window[-1]["l"]) / 2
    up, dn = mid + mult * atr, mid - mult * atr
    c = window[-1]["c"]
    st = state.get("st_dir", 0)
    ub = min(state.get("st_ub", up), up) if st <= 0 else up
    lb = max(state.get("st_lb", dn), dn) if st >= 0 else dn
    if c > ub:
        new = 1
    elif c < lb:
        new = -1
    else:
        new = st
    state["st_ub"], state["st_lb"], state["st_dir"] = ub, lb, new
    if new == 1 and st != 1:
        return 1
    if new == -1 and st != -1:
        return -1
    return 0
種 RSI-2プルバックシード0.004057回/勝28/建玉17%/参加08/11
99.180.00
# 外来シード: Connors RSI-2 (長期上昇中の深押しを拾い、短期回復で手仕舞い)
def signal(window, state):
    closes = [b["c"] for b in window]
    sma_long = sum(closes[-120:]) / 120
    gains = losses = 1e-9
    for i in range(-2, 0):
        d = closes[i] - closes[i - 1]
        if d > 0: gains += d
        else: losses -= d
    rsi2 = 100 - 100 / (1 + gains / losses)
    sma5 = sum(closes[-5:]) / 5
    c = closes[-1]
    if c > sma_long and rsi2 < 10:
        return 1
    if c > sma5:
        return -1
    return 0
☆fundingスクイーズ固定☆10大100.000回/勝0/建玉0%/参加08/11
100.00100.00
# 文脈シード: 資金調達率マイナス=ショート過密。反発の初動で踏み上げに乗る
def signal(window, state):
    _exec = 'maker'
    b = window[-1]
    c = [x["c"] for x in window]
    if b["fr"] >= 0:
        # 偏りが解消したら降りる
        if c[-1] > sum(c[-10:]) / 10:
            return -1
        return 0
    sma10 = sum(c[-10:]) / 10
    sma30 = sum(c[-30:]) / 30
    if b["fr"] < -0.0001 and sma10 > sma30 and c[-1] > sma10:
        return 1
    if c[-1] < sma30 * 0.997:
        return -1
    return 0

更新: 2026-10-03 16:00 JST