前几天我发了一篇文章,里面提到用AI进行量化交易,很多朋友私下和我说他用AI写出来的策略在ptrade上面根本不能运行,错误百出。

其实AI还是好工具,只是这些朋友还没有用对方法。

想要AI能听你的话,按平台API写策略,你得掌握我今天分享的几个办法。

错误案例

首先我们来看看用AI写策略的反面教材

我相信大多数朋友都像图中这样,直接一句话甩给AI,让AI写

接下来我们把AI写的策略拿去ptrade上面回测运行,果不其然,无法运行

有人说那我继续让AI自己改可不可以呢?你可以试试看绝对会把你累死,改了100遍都不一定能改好

因为你这种方式从一开始就错了!后面再怎么改也是徒劳无功!

其实这也不能怪AI,你的指令就一句话:“写一个小市值策略”,太粗略了,给谁写都无法精准地写出来

想要AI写出有效的量化交易代码,你得做好以下工作。

AI写策略应该这么调教

基本逻辑

想要AI能理解你的意图,你得尽量说得详细

根据我多年的经验总结,要让AI写好一个量化策略,得经过以下几个流程:

需求解构

想让AI写策略得让AI知道你的需求具体是怎么样的

但是很多朋友自己其实对一些策略并不懂,

比如在上面的例子中,只知道小市值策略这个概念。不知道如何具体实现的

遇到这种情况你可以让AI先给一个具体方案,比如让他从监控标的,买卖规则等方面来阐述,如下图所示

可以看到AI给了我一个比较详细的小市值投资方案,那如果你有自己的想法,你就可以在此基础上修改,比如把里面的10%改成20%

策略构建

在明确需求后,我们就可以让AI写代码了

在这里有构建的一步就是要给AI看你的量化交易平台的资料,因为不同平台的量化函数是不同的

我经常用的是ptrade平台,所以我把ptrade的API文档给了AI,形成了资料库

这样AI写出来的代码才能符合平台规则,能运行的概率才会变大

接下来我们来输入提示词让AI写具体的代码,为了保险,代码中可以让AI强制参考资料库里面的文档写,并且再给他强调平台的编写规则和简单案例

就像教小孩一样,给了AI规则和参考他才能写出正确的代码

测试修正

AI写完后别急着用,可以让AI自己再检查一遍,扫描规避 API 误用与结构错误,修复大模型幻觉

经历过上面几轮的调教后我们得到以下代码:

# 小市值策略实现
# 选择A股市场中流通市值最低的前10%股票作为交易标的

def initialize(context):
    """
    初始化函数,设置全局变量和定时任务
    """
    g.stocks = []  # 存储每日筛选的股票池
    set_universe([])  # 初始化空股票池
    
    # 设置每日定时任务(14:50执行交易逻辑)
    run_daily(context, handle_data, time='14:50')

def before_trading_start(context, data):
    """
    盘前处理:每日9:10运行,筛选当日小市值标的
    """
    try:
        # 获取A股全量代码(带尾缀)
        ashare_list = get_Ashares()
        if not ashare_list:
            log.info("未获取到A股列表")
            return
        
        market_caps = []
        # 遍历股票计算流通市值
        for stock in ashare_list:
            # 获取行情快照(需要带尾缀的代码)
            snapshot = get_snapshot(stock)
            if not snapshot:
                continue
            
            # 获取流通股数和最新价(注意字段名称与文档一致)
            circulation_amount = snapshot.get('circulation_amount', 0)
            price = snapshot.get('price', 0)
            
            if circulation_amount <= 0 or price <= 0:
                continue
            
            # 计算流通市值
            market_caps.append((stock, price * circulation_amount))
        
        # 按流通市值升序排序
        market_caps.sort(key=lambda x: x[1])
        n = len(market_caps)
        # 确保至少选1只股票
        top_n = max(1, int(n * 0.1))
        g.stocks = [stock for stock, _ in market_caps[:top_n]]
        
        # 更新策略股票池(参数类型检查通过)
        set_universe(g.stocks)
        log.info("当日小市值股票池构建完成,共%d只" % len(g.stocks))
    
    except Exception as e:
        log.info("盘前处理异常:%s" % str(e))

def handle_data(context, data):
    """
    盘中处理:每日14:50执行交易逻辑
    """
    try:
        # 获取当前持仓(Portfolio对象属性检查通过)
        current_positions = context.portfolio.positions
        current_stocks = list(current_positions.keys())
        
        # 1. 卖出不在当日股票池的持仓
        for stock in current_stocks:
            if stock not in g.stocks:
                order_target(stock, 0)  # 使用命名参数
                log.info("卖出剔除股票:%s" % stock)
        
        # 2. 买入新入选股票
        if not g.stocks:
            return
            
        # 计算资金分配
        available_cash = context.portfolio.cash  # Portfolio属性检查通过
        if available_cash <= 0:
            return
            
        # 每只股票分配资金
        position_count = len(g.stocks)
        cash_per_stock = available_cash / position_count
        
        # 买入新股票
        for stock in g.stocks:
            if current_positions.get(stock) is None:
                order_value(stock, cash_per_stock)  # 使用命名参数
                log.info("新建仓股票:%s" % stock)
    
    except Exception as e:
        log.info("交易执行异常:%s" % str(e))

接下来我们把策略放到ptrade平台上去试试,结果还是报错了,原来是用的函数不支持回测

看不懂没关系,直接复制给AI,让他自己改

改完后,在ptrade上面就可以成功运行了,回测结果如下,仅供参考:

绩效优化与实战

上面的操作已经写出来了一个可以实际运行的代码,全程只花了半个小时左右,比你从头学起可节省太多时间了,要不怎么说AI是生产力呢

有了可以运行的代码可以通过回测或者模拟运行来看看效果,

在之后也可以持续对策略进行改进,比如把阈值10%进行修改

总之有新的思路和需求都可以按上面的方式交给AI去写,去优化

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐