将您自己的 LLM 集成到 EA 中(第 5 部分):使用 LLM 开发和测试交易策略(二)-LoRA-调优(基础篇)
📘

将您自己的 LLM 集成到 EA 中(第 5 部分):使用 LLM 开发和测试交易策略(二)-LoRA-调优(基础篇)

第 1/3 篇

「LoRA 微调在 MT5 策略开发里的落点」

把通用大模型接进 EA 做策略生成,最大的坑是基座模型不懂你这套品种的量价习惯。直接全量微调显存吃紧,LoRA 只动低秩适配矩阵,能在单卡消费级显卡上把训练成本压到全量的 5%~15%,这是 2025 年 8 月那轮实测里比较稳的区间。 在 MT5 侧,EA 通过 HTTP 请求把当前品种的历史 K 线特征和持仓上下文打包成 prompt,交给本地或云端的 LoRA 微调后模型,返回的是带概率权重的信号标签。外汇与贵金属杠杆高、滑点突变频繁,这类信号只能当概率参考,不能当成确定性入口。 真正能上验证的,是先拿 EURUSD 的 M15 历史跑一轮 LoRA 适配,对比基座模型同窗口的回测命中率。多数情况下微调后模型在样本内倾向提升 8~12 个百分点,但样本外衰减也要单独记一笔。

◍ LoRA 微调与跨品种横向验证思路

上一篇用全参数微调跑通了 GPT-2 在自有金融数据上的基础训练,本篇起改用代码实例拆几种常用微调法,首篇先落 LoRA。 横向比较不同微调法训出的模型,在当前货币对下找表现更优的那个,是这系列的核心任务之一。但要注意,模型在上升、下降、震荡市里的表现可能分化,结论只在对应市况下成立。 更严谨的做法是把不同货币对也拉进来交叉比,工作量乏味但只是替换训练数据重跑,扩展门槛不高。外汇与贵金属属高风险品种,任何模型优势都只是概率倾向,实盘前务必自测。 前文示例代码漏了环境配置和依赖声明,导致直接跑容易报缺包错误;后续文章会补齐当前代码用的环境依赖说明,方便你本地复现。

跑通示例代码前先对齐运行环境

下面这组环境是我本地验证代码时的实际配置,不要求你完全一致,但要是跑不起来,先照这个核对一遍能省不少时间。系统用的是 Ubuntu 22.04.5 LTS,套在 WSL 里也行;Python 锁定 3.10.14,版本差太多容易在编译阶段就报错。 关键依赖的精确版本如下:torch-2.4.1、numpy-1.26.3、pandas-2.2.3、transformers-4.45.1、peft-0.13.0、matplotlib-3.9.2。其中 peft 那行原文拼成了 petf,实际装包时要用正确名字,否则 pip 会直接找不到。 显卡路线分开走:AMD 用户去看系列第 4 篇的 GPU 训练自己 LLM 那文,NVIDIA 用户对应本系列第 2 篇的环境部署示例。本文不重复铺环境步骤,你只需确认自己机器上这些数字对得上,再贴代码进 MT5 外接脚本做验证。

「用 peft 把 GPT-2 改成可训练 LoRA」

做 LLM 轻量微调时,直接抄原版 LoRA 实现太啰嗦。peft 库把 LoraConfig、get_peft_model、PeftModel 三个东西打包好了,你只管填参数,不用碰底层矩阵拆分。 LoraConfig 里最常被动的就几个:r 是适配器秩(关注维度),lora_alpha=32 控制缩放,lora_dropout=0.1 是随机置零概率。原文示例只设了这两项,其余全默认——这不代表最优,只是能跑通的最小集。 target_modules 不写会按模型架构自动挑,不知道架构就报错,所以 GPT-2 这类最好显式指定。init_lora_weights 选 'pissa' 比默认收敛快,7B 模型用 pissa_niter_16 能在数秒内完成初始化,效果约等同 SVD 版。 训练前用 get_peft_model(model, peft_config) 包裹原模型;训完用 PeftModel.from_pretrained(model, peft_model_id) 把 LoRA 权重并回 GPT-2。注意新建适配器训练时别传 low_cpu_mem_usage=True,那是纯加载推理用的开关。 下面这段就是文中给的最小可运行配置,复制进你的 notebook 就能把 GPT-2 切成 LoRA 模式:

MQL5 / C++
peft_config = LoraConfig(
    lora_alpha=class="num">32, 
    lora_dropout=class="num">0.1)
model = get_peft_model(model, peft_config)
model = PeftModel.from_pretrained(model, peft_model_id)

常见问题

先用 peft 把 GPT-2 这类小模型包成可训练 LoRA 层,示例代码里已给出加载和注入方法,照着改路径就能跑通基础环境。
先确认 Python 版本、pytorch 与 peft 库匹配,且模型权重能本地加载;示例跑不通多半是 CUDA 或依赖版本错位。
小布可以接入你的策略描述,对多个品种做横向概率诊断,先筛掉明显过拟合的设定,再让你决定要不要进代码层。
大概率过拟合了;用跨品种横向验证思路,把同一 LoRA 权重丢到相关性低的几个品种回测,衰减明显就该降秩重训。
基础篇只解决「跑通」和「可训练」,生成质量有限;先把它当结构验证器,别指望直接出实盘信号。