夜雨聆风学习资料网

ARTICLE · 1273126

ai交易量化套利系统开发实战与策略分析-下

ai交易量化套利系统开发实战与策略分析-下
接着说下文,下文主要说的是上服务器,实际跑起来的部分,核心观点在文章末尾,着急的,可以直接拉到最后看。

七、100U 实验方案:小资金试水的设计

7.1 为什么要先用 100U 试

代码改完了,参数调完了,回测也做了,下一步就是实盘。但直接上大资金太冒险,我决定先用 100U 做实验。

7.2 资金分配方案

方案设计:100U 总资金,分散到 5 个币种,每个币种 20U(现货 10U + 合约保证金 10U)。
币种
现货买入
合约保证金
合约名义敞口
单币种总占用
币种 A
10U
10U
10U(1倍杠杆)
20U
币种 B
10U
10U
10U
20U
币种 C
10U
10U
10U
20U
币种 D
10U
10U
10U
20U
币种 E
10U
10U
10U
20U
合计
50U
50U
-
100U
关键设计:现货和合约各占一半(POSITION_RATIO_PER_SYMBOL=0.5)。这样 1 倍杠杆下,合约保证金 = 名义敞口,Delta 完美中性。

7.3 实盘启用前的三道保险

为了防止误操作,我设计了三道安全开关:
开关
默认值
作用
DRY_RUN
true
只生成信号,不下单,记录虚拟持仓
ENABLE_LIVE_TRADING
false
即使 DRY_RUN=false 也不下单,只记录「会下单」日志
两者都为 true
-
才会真实下单
启用顺序:先 DRY_RUN=true 跑 1 周验证逻辑,再切到 DRY_RUN=false + ENABLE_LIVE_TRADING=false 跑 1 周观察「会下单」日志,最后才 ENABLE_LIVE_TRADING=true 真实下单。

八、代码核心思路:几个值得讲的设计

8.1 双重保险机制

前面提到的 DRY_RUN + ENABLE_LIVE_TRADING 双保险,是整个系统最重要的安全设计。核心思路是:任何一道开关没打开,都不会真实下单。

def _can_place_live_order() -> Tuple[bool, str]:

"""检查是否允许真实下单(双重保险)"""

if DRY_RUN:

return False,

"DRY_RUN=true (观察模式)"

if not ENABLE_LIVE_TRADING:

return False, "ENABLE_LIVE_TRADING=false (实盘禁用)"

return True, "

(代码较长,此处仅展示核心片段)

所有下单函数开头都调用这个检查,任何一道没过就直接返回模拟结果,不调用交易所 API。这样即使代码有 bug,也不会误下单。

8.2 失败回滚逻辑

套利开仓涉及现货和合约两笔下单,必须保证要么都成功,要么都失败。如果现货买成功了但合约开空失败,需要把现货卖回去(rollback)。

def execute_arb_open(spot_symbol, fut_symbol, position_value_usdt):    

1. 现货买入

spot_resp = _spot_buy_market(spot_symbol, position_value_usdt)

if not spot_resp:

return {"success": False, "error": "现货买入失败"}      

2. 合约做空(用现货实际成交数量,保证 Delta 中性)

(代码较长,此处仅展示核心片段)

这里有个细节:合约做空的数量必须等于现货实际成交数量,而不是计划数量。因为市价单的成交价会波动,实际买到的现货数量可能跟预期不完全一致。用实际成交数量才能保证真正的 Delta 中性。

8.3 全局累计统计

原本的代码有个问题:平仓后重开新仓,累计费率统计会重置。这意味着长期跑下来,你看不到真正的累计收益。
修法是加一个全局统计模块,跨平仓周期记录:

全局累计统计(跨平仓周期不重置) _global_accumulated_funding: Dict[str, float] = {}

{symbol: 累计费率}

_global_total_pnl: float = 0.0 _global_total_trades:

int = 0  def record_global_funding(symbol, funding_rate):     """每个结算周期调用一次"""

_global_accumulated_funding[symbol] += funding

(代码较长,此处仅展示核心片段)

这些数据持久化到 risk_state.json,重启容器也不丢。这样长期跑下来,能看到真实的累计收益和交易次数。

8.4 实盘前的准备步骤

实盘下单前,系统会自动执行一系列准备步骤,确保账户状态正确:
设置合约杠杆为 1 倍(防止误用高杠杆);
切换到单向持仓模式(避免 hedge mode 报错);
切换到逐仓模式(单仓爆仓不影响其他仓位);
检查最小名义价值(低于 5U 直接拒绝);
现货市价买入;
合约市价做空(用现货实际成交数量);
失败时自动回滚。
这些步骤在 DRY_RUN 模式下全部「假装成功」,不会真实调用 API。只有切到实盘模式才会真正执行。

九、AI 协作写代码的反思

9.1 AI 擅长什么

这次协作下来,AI 在这几个方面确实帮上忙了:
1. 快速定位代码 bug。比如给 None 变量赋值、调用方参数不匹配这类问题,AI 几秒就能扫出来。
2. 系统性梳理问题清单。AI 不会只看一个点,它会顺着调用链往上爬,把相关问题都列出来。比如发现 PnL 计算 bug 后,会去查所有用到 PnL 的地方。
3. 生成测试用例。让 AI 写测试脚本验证逻辑,比手动跑快多了。比如 1x vs 2x 对比回测,AI 半小时就写完了。

9.2 AI 不擅长什么

但也有几个明显的短板:
1. 上下文记忆差。我让它看 A 目录的代码,它可能跑去看 B 目录。我之前说过的约束条件,几轮对话后就忘了。必须反复重申。
2. 对真实 API 行为不了解。比如 Content-Type 头、newOrderRespType 参数、持仓模式切换这些,AI 写的代码在 DRY_RUN 模式下都「能跑」,但真实调用 API 时会报错。这些坑只有实盘才能发现。
3. 会犯常识性错误。最典型的是把风险率 19.88 理解成 19.88%。这种错误看起来低级,但如果用户没发现,可能做出完全错误的决策。

9.3 协作的正确姿势

总结几条经验:
1. 明确告诉 AI 当前在看什么。不要说「分析一下代码」,要说「分析 /path/to/arb.py 这个套利策略代码」。路径越具体,AI 越不容易跑偏。
2. 关键数字要自己复核。AI 算账很快,但容易把单位搞错(百分比 vs USDT)。关键决策前自己再用计算器过一遍。
3. 多轮 review 比一次写完重要。AI 写完代码,别急着用。让它自己 review 一遍,再让人工 review 一遍,再让它做语法检查。三轮下来,大部分低级 bug 都能发现。
4. DRY_RUN 模式不能替代实盘测试。DRY_RUN 验证的是「逻辑正确性」,不是「API 兼容性」。实盘启用前,必须接受「第一次实盘可能会报错」的现实,准备好手动处理。

十、未来展望与风险提示

10.1 收益预期

基于 4 天实测数据外推,三种场景下的年化预测:
场景
概率
年化收益
90天净收益
假设
乐观
20%
+40%
+1000U
当前费率持续
中性
50%
+20%
+520U
费率回归均值
保守
30%
+5-10%
+156U
费率分化+极端行情
加权期望
-
+19.5%
+519U
-
需要强调:这些预测基于短期数据,实际收益取决于市场环境。资金费率会随市场情绪变化,过去 4 天的高费率不代表未来。

10.2 主要风险

1. 收益集中度风险。当前 5 个币种中,SNDK 贡献了 65% 的收益。如果这个币种费率回归均值,整体收益会大幅下滑。建议增加币种分散度。
2. 极端行情风险。Delta 中性理论上对冲了价差风险,但极端行情下(比如单日 ±20%),滑点和流动性问题可能导致对冲失效。
3. API 故障风险。自动化系统依赖交易所 API。如果 API 故障或限频,可能错过开平仓时机。需要有手动干预的预案。
4. 政策风险。不同地区对加密货币交易的监管政策不同,需要关注当地法规。本文不构成任何投资建议。

结语

这次从「交易所的一张套利截图」到「自己写一套量化系统」的过程,前前后后聊了几十轮,改了三轮代码,做了对比回测,最后还要用 100U 小心试水。
写这篇文章的目的,不是鼓励大家都去自己写量化系统——实际上,对大多数人来说,用现成的方案可能更划算。我只是想展示:当一个普通人坐下来认真对待一件事,借助 AI 的力量,能做到什么程度。
过程中 AI 犯过错(把风险率理解错、看错代码目录、API 接口细节没考虑到),我也犯过错(没说清楚路径、没复核关键数字)。但通过多轮 review 和实测验证,最终还是把一套能跑的系统搭起来了。
技术本身是中性的。套利策略也好,量化系统也好,都是工具。工具能赚钱也能亏钱,关键看用它的人是否理解它在做什么。
希望这篇文章对你有启发。如果你也在做类似的事情,欢迎交流。

我的建议

方案阶段:自己写的时候,1个方法,先找在线ai问思路,然后根据ai给出的建议,提出各种刁钻问题,从各种角度,当然找不到,你就让ai左右互搏,让他自己说这个思路的问题,最后让他确定一套看起来至少是最稳妥的方案,如果你还不放心,可以再换一个平台,用刚才A的方案,让B去审核,给出反对意见,然后用反对意见,再去反问A为啥没有考虑到。这样的话,方案就会越来越稳妥。但是不建议过于互搏,因为太浪费时间,也不合理,他们最后可能会根据你的方案,给出完全没有任何风险的方案,但是这个方案,一点价值也没有,因为根本就是完美主义,市场上,根本不会出现完全满足对应条件的行情。所以差不多就行。
代码阶段:不知道咋写,就让他先根据github上的代码库,找一些示例,然后再写,其中调用部分平台的部分,可以让他去直接找交易所的帮助文档+接口文档,避免写错,导致浪费你时间,我之前就遇到过经典盘接口,他写的是最新的统一账户接口,导致实际的下单,会提示账户没权限之类的,让我浪费时间看自己账户问题。写完代码,一定要让ai进行代码检查,做各种基础的检查-比如变量名/函数名前后一致,代码导入模块,路径是否存在等等,这些问题,你不会代码的话,也不碍事,你可以让ai把常见的代码错误,都挨个排查一下,是否存在问题,他自己会想办法去查,另外就是做单元测试和集成测试,以及流程性的测试了。你不懂,就让他做各种测试。他也会做,大不了,也是左右互搏,换一个平台的模型,让他分析一个完整的项目代码包,找出来问题。这里还是推荐大家,用在线的平台,https://zchat.z.ai/,质谱官方的,免费,而且可以出1个完整的代码文件包,方便的很,deepseek网页端只能看1个文件,而且不能输出文件,只能输出内容,不合适一套代码分析。太费劲。
实盘阶段:
我的建议第一阶段是,前期不提供api key,直接让代码跑,这样会暴露很多基础的代码语法错误,因为ai再牛逼,也有百密一疏的情况,如果直接上直接的真实账户,就会出现各种奇葩问题,我遇到的有很多情况,比如一个币对,无限开仓、一堆仓位,平仓剩余渣渣,导致不能看新仓位,当天的日熔断触发了,但是代码有bug,还是继续开仓亏损等等。所以第一阶段,先找基础代码错误。
第二阶段,让ai把每一行代码,都写上日志,我说的比较夸张,因为前期ai排查问题,会反复的找不同的代码文件,联系上下文,分析那个地方的代码写的不对,但是有的时候,日志打印的不全,ai就会乱猜,乱分析,导致浪费时间。
第三阶段,让ai写一个模拟单模式,也就是不实际下单,但是走相关的代码逻辑,目的就是完整的走完一遍流程,避免有些奇葩代码写的有问题,你走实盘,就会触发这些隐藏的坑,模拟下单执行几天后,再走实盘。
第四阶段,真正实盘,把key提供后,真实账户,只放很少的资金,不是为了赚钱,只是为了验证实盘的钱,走完相关流程是否有问题。这个阶段,每天都要去服务器拉相关的日志文件,让ai去对日志进行分析,有哪些异常,有问题,及时处理发新代码。
第五个阶段,实盘小资金,确认,代码逻辑没啥问题了,但是盈利不稳定,继续把相关的交易行情的数据,让ai获取后,阶段性的复盘,分析,怎么改进。
第六个阶段,真正的盈利模式,从实际的小额资金,已经完全验证没有问题了,开始阶段性放入大额资金,但是需要注意,这个阶段,也是阶梯式的,比如你前期100u跑通了,再加,不要一步到位上10000u,先来300、500的,稳定一段时间后,再说。一点点加,但是需要注意的是,有的时候,你的盈利或者亏损,不一定是代码或者策略问题,有可能只是单纯的行情问题,如果你不懂这一点,就盲目的修改策略,或者放大资金,很容易,出现反向的行情,导致大额亏损。
状态问题:最后说点题外话,因为国内白天的时候,相关的行情一般波动很小,大部分出现行情的时候,都是晚上10点以后才开始,甚至是凌晨3-7点的时候,所以,搞这个很耽误睡眠。经常半夜还在想这个咋搞,所以,要有心理准备。我是折腾了半年,现在有点麻了。
最后了,相关的gitee上的代码,这套代码,我一个字没有自己写,都是ai写的代码,我看着哪里不顺眼,就让ai改的。大家随便下载,随便玩,我现在实盘跑的就是这套,但是还没有看到准确的盈利曲线,我觉得一般,但是整体代码逻辑没啥明显的bug,你可以喂给ai,让ai分析一下,有没有啥隐藏问题,再用。觉得不错,给star一下,虽然star不发钱,但是吹牛逼响亮啊。哈哈哈

https://gitee.com/qiudoumasi/binance_arbitrage


附录:关键术语解释

术语
通俗解释
Delta 中性
现货和合约数量相等、方向相反,价格涨跌互相抵消
资金费率
合约市场每 8 小时结算一次的费用,正费率时空头收钱
1 倍杠杆
合约保证金 = 名义敞口,没有放大
2 倍杠杆
合约保证金 = 名义敞口的一半,放大 2 倍
逐仓模式
每个仓位的保证金独立,单仓爆仓不影响其他仓位
全仓模式
所有仓位共用保证金,一损俱损
单向持仓
同一个合约只能持有一个方向(多或空)
双向持仓
同一个合约可以同时持有多和空两个方向
Maker 单
挂单等成交,手续费低
Taker 单
立即成交,手续费高
滑点
下单价格和实际成交价格的差异
minNotional
交易所规定的最小下单金额,通常 5U
DRY_RUN
模拟模式,只生成信号不真实下单
回滚
操作失败时撤销已执行的部分,恢复到操作前状态

相关学习资料