avatar of ianzeng123 ianzeng123
关注 私信
2
关注
460
关注者

TradFi 品种上线:自适应网格策略

创建于: 2026-05-15 11:21:55, 更新于: 2026-05-18 16:52:00
comments   0
hits   6

TradFi 品种上线:自适应网格策略

前言:为什么不做币种,要做 TradFi?

做过币圈网格的人都有过同一个噩梦:网格刚建好,价格一泻千里,仓位全线套牢,追保证金或直接爆仓。币圈的魅力在于涨跌幅没有上限,但这正是网格策略最大的敌人——网格天生是为震荡而生的,单边行情会让它满盘皆输。

那有没有一类资产,既保留足够的日内波动让网格频繁触发,又不会动不动来一波 30%、50% 的暴力拉升或踩踏?答案就是 TradFi 品种。

TradFi(传统金融)衍生品,包括标普 500、纳斯达克、黄金、原油、外汇等传统资产的永续合约,背后有真实的基本面锚定。股票指数受企业盈利、美联储政策约束,大宗商品受供需关系左右,外汇汇率则由两个主权经济体之间的相对关系决定。这些资产不会无缘无故在一夜之间涨 5 倍,也不会因为一条推文崩掉 80%。它们的价格有”重力”——短期可以震荡,但长期会向基本面回归。

这种特性和网格策略几乎是天作之合:日内有 1% 到 3% 的正常波动,足以让格子反复被触发;极端行情下也不会把网格彻底打穿,给止损和资金管理留下足够的缓冲空间。本策略正是建立在这个逻辑之上——自动扫描所有 TradFi 品种,找出当前波动最活跃的几个,在它们身上构建循环网格,并在波动结构发生变化时自动完成品种轮换。


背景:币圈交易所悄悄上线了一批新品种

近两年,OKX、Bitget 等头部币圈交易所悄悄上线了大量 TradFi 永续合约产品,覆盖范围从美股指数(标普 500、纳斯达克 100)、个股(苹果、英伟达、特斯拉),到大宗商品(黄金、原油、天然气),再到外汇(欧元、日元)。简单说,你现在可以在币圈交易所里直接炒美股、炒黄金、炒外汇,7×24 小时不间断,还可以加杠杆。

这件事对量化交易者意义重大。一方面,这些品种继承了传统金融资产的基本面属性,价格不会无端暴涨暴跌;另一方面,它们在币圈交易所上挂牌,沿用的是永续合约的交易结构,流动性充足,手续费透明,API 接口和普通币种完全一致,可以无缝接入量化策略。

换句话说,这批产品打开了一个新的套利空间:用炒币的基础设施,去做传统金融资产的震荡套利。本策略正是为这个场景量身定制的——用程序自动筛选其中波动最活跃的品种,在上面跑网格,吃震荡的钱。


一、选品逻辑:只选波动最大的品种

网格能不能赚钱,60% 的胜负在选品。选对了品种,格子每天被触发十几次,利润自然积累;选错了品种,格子挂出去一周纹丝不动,资金趴着不动还占用保证金。

本策略的选品标准只有一个维度:过去 N 根日线的平均日振幅。

波动得分 = Σ [ (High_i − Low_i) / Close_i × 100 ] / N

代码实现如下,逻辑一目了然:

def score_symbol(info):
    bars = exchange.GetRecords(info["sym"], PERIOD_D1, KLINE_COUNT + 2)
    if not bars or len(bars) < 3:
        return None
    bars = bars[-KLINE_COUNT:]
    atr_pcts = [(b["High"] - b["Low"]) / b["Close"] * 100 for b in bars if b["Close"] > 0]
    avg_atr = sum(atr_pcts) / len(atr_pcts)
    # 日均振幅必须至少是格间距的 1.5 倍,否则直接剔除
    if avg_atr < GRID_RATIO * 100 * 1.5:
        return None
    return {"sym": info["sym"], "atr": round(avg_atr, 3), "price": bars[-1]["Close"]}

策略会定期扫描全部 TradFi 品种并排名,选出振幅最高的 TOP_N 个持仓。准入门槛的设计非常关键:日均振幅必须至少是格间距的 1.5 倍,否则价格一天可能连一个格子都穿不过,直接剔除,避免资金趴在毫无效率的品种上空耗保证金。

品种的识别也需要特别处理。发明者平台上 TradFi 品种通过 instCategory 字段与普通加密货币区分:

def scan_tradfi():
    markets = exchange.GetMarkets()
    for sym, mkt in markets.items():
        if not sym.endswith("USDT.swap"):
            continue
        info = mkt.get("Info") or {}
        # instCategory != 1 才是 TradFi 品种
        if int(info.get("instCategory", 1)) == 1:
            continue
        result.append({"sym": sym, "base": base, "cat": cat})

二、网格结构:低买高卖,循环套利

TradFi 品种上线:自适应网格策略

在选定品种上,以当前价为中心,向上下各延伸一定比例,按固定间距等比切分格子。低于当前价的每一格挂一张买单,等待价格回落成交。

网格的建立核心代码如下:

def build_grid(sym, price):
    low  = price * (1 - LOWER_RANGE)
    high = price * (1 + LOWER_RANGE)
    # 等比切格
    grids, p = [], low
    while p <= high * 1.001:
        grids.append(round(p, g_states[sym]["pp"]))
        p = p * (1 + GRID_RATIO)

    for i in range(len(grids) - 1):
        buy_p, sell_p = grids[i], grids[i + 1]
        if buy_p < price:
            oid = buy_open(sym, buy_p, GRID_VALUE)  # 低于现价直接挂买单
            g["status"] = "pending_buy" if oid else "skip"
        else:
            g["status"] = "above"  # 高于现价暂不挂单,等价格回落

网格同步是策略运行的核心循环,负责检查每格的订单状态并作出响应:

def sync(sym):
    for g in grids:
        if g["status"] == "pending_buy":
            s, deal, avgp = check_order(g["buy_oid"])
            if s == "filled":
                # 买单成交 → 立即挂止盈单
                oid = sell_close(sym, g["sp"], ct)
                g["status"] = "pending_sell"

        elif g["status"] == "pending_sell":
            s, deal, avgp = check_order(g["sell_oid"])
            if s == "filled":
                # 止盈成交 → 计算利润,重新挂买单,循环
                profit = g["ct"] * cv * (avgp - g["fp"])
                g_total_profit += profit
                oid = buy_open(sym, g["bp"], GRID_VALUE)
                g["status"] = "pending_buy"

运行逻辑清晰:价格下穿格子触发买入,价格上穿上一格触发止盈,止盈后原位重挂买单,周而复始。挂单撤回、止盈单异常等情况均有自动检测与补单机制,策略不会因偶发订单异常中断运行。


三、智能换仓:把资金始终留在最活跃的品种上

TradFi 品种上线:自适应网格策略

TradFi 品种的波动节奏会随宏观事件、财报季、政策变化而转移。某段时间黄金最活跃,过一阵可能变成原油或者标普期货。固定死一个品种跑网格,迟早会遇到那个品种进入低波动期、格子一周都不动的困境。

本策略每隔固定小时数(默认 48 小时)重新对全部 TradFi 品种评分排名,判断是否需要替换当前持仓品种。为了避免因微小差异频繁换仓带来的手续费损耗,引入了磁滞机制:

def needs_rebalance(new_selected):
    cur_scores = {s["sym"]: s["atr"] for s in g_score_log if s["sym"] in g_active}
    for s in new_selected:
        if s["sym"] in g_active:
            continue
        weakest_atr = min(cur_scores.values())
        threshold = weakest_atr * (1 + HYSTERESIS)  # 必须高出 20% 才触发换仓
        if s["atr"] >= threshold:
            Log(f"{s['base']} ATR={s['atr']:.2f}% > 阈值={threshold:.2f}%,触发换仓")
        else:
            Log(f"{s['base']} ATR={s['atr']:.2f}% < 阈值={threshold:.2f}%,磁滞保持")

只有当新候选品种的日均振幅比当前最弱持仓品种高出 20% 以上,才真正触发换仓。换仓流程为:先撤掉旧品种的全部挂单,平掉所有持仓,再在新品种上重新建立完整的网格,整个过程自动完成。


四、关键参数说明

– TOP_N 控制同时持有的品种数量,默认为 3,即资金同时分散在波动最高的 3 个品种上。 – GRID_RATIO 是格间距比例,默认 1.5%,代表每格的止盈幅度。 – GRID_VALUE 是每格固定投入的 USDT 金额,默认 50,不随价格高低调整。 – LOWER_RANGE 决定网格覆盖的价格范围,默认当前价上下各 10%。 – REBALANCE_HOURS 是换仓评估周期,默认 48 小时。 – HYSTERESIS 是磁滞阈值,默认 20%,防止频繁换仓。 – LEVERAGE 是杠杆倍数,建议不超过 3 倍。 – STOP_LOSS_RATIO 是全局止损线,账户亏损超过该比例时自动平仓停止,默认 30%。 – KLINE_COUNT 是评分用的日线根数,默认取过去 20 根。 – EXCLUDE_SYMBOLS 是黑名单,填入不希望策略触碰的品种代码,多个用逗号分隔。


五、风险控制

全局止损是策略的最后一道防线,当账户权益亏损超过初始值的设定比例时,自动撤单、平仓并停止所有后续操作:

def check_stop():
    acc = exchange.GetAccount()
    loss = (g_init_equity - acc.Equity) / g_init_equity
    if loss >= STOP_LOSS_RATIO:
        Log(f"触发止损!亏损={loss*100:.1f}% → 全部平仓停止")
        for sym in list(g_active):
            close_all(sym)
        g_state = "STOP"

选品阶段的准入过滤剔除了波动不足的品种,确保进入策略的每一个品种都有足够的日内振幅驱动网格运转。黑名单机制允许手动排除流动性差、点差异常或行为不稳定的品种。所有下单的价格和数量均严格对齐交易所的精度要求,从源头消除因精度不符导致的拒单问题。各品种资金平均分配,单一品种的亏损不会牵连整体仓位结构。


六、适用行情与注意事项

本策略在震荡行情中表现最佳。当目标品种在区间内反复横跳时,格子被高频触发,收益随时间线性积累,策略几乎不需要人工介入。

需要注意的是,若价格持续单边下行并跌穿网格下边界,所有买单将被套牢,需等待价格回归或触发全局止损。部分 TradFi 品种在非交易时段(如美股休市期间)流动性大幅下降,挂单可能长时间无法成交,属于正常现象。格间距 GRID_RATIO 的设置应参考目标品种的日均振幅,建议控制在日均振幅的 1312 之间,太大则触发频率低,太小则手续费侵蚀利润。杠杆建议保持在 3 倍以内,过高的杠杆在极端行情下会加速亏损,在止损触发前已难以控制。


结语

本策略的核心逻辑可以用一句话概括:把资金始终放在波动最大的 TradFi 品种上,让网格做时间的朋友。选品、建格、换仓、风控四个模块环环相扣,全程自动运行。TradFi 品种的基本面属性提供了价格不会无限偏移的底层保障,而程序化的波动率筛选则确保资金始终配置在效率最高的品种上。参数设置合理时,策略可以在多数市场环境下产生稳定的网格收益,同时通过止损和磁滞机制将下行风险控制在可接受范围内。


本文为发明者量化平台原创策略说明,仅供学习交流,不构成任何投资建议。

相关推荐