问题描述
/
解决方案
根据 ptrade 官方 API 文档,官方并未明确规定平台最多支持同时运行的策略数量上限。实际上,能够同时运行的独立策略数量通常取决于您所属券商的系统配置以及服务器的硬件资源(如 CPU、内存等)。建议您直接咨询开户券商以获取准确的平台级限制。
不过,如果您希望在 ptrade 中同时执行多种不同的交易逻辑,完全可以在同一个策略中通过多任务并行来实现,而无需创建多个独立的策略。ptrade 提供了强大的定时任务接口,允许您在单个策略中并发执行多个任务:
1. 使用 run_daily 实现多个日内定时任务
run_daily 函数可以在 initialize 阶段被多次设定,从而实现多个不同的定时任务。这对于需要在每天不同时间点执行不同逻辑的策略非常有用。
def initialize(context):
# 设定多个定时任务
run_daily(context, morning_task, time='09:35')
run_daily(context, afternoon_task, time='14:50')
g.security = '600570.SS'
set_universe(g.security)
def morning_task(context):
log.info("执行早盘逻辑")
# 早盘交易代码
def afternoon_task(context):
log.info("执行尾盘逻辑")
# 尾盘交易代码
def handle_data(context, data):
pass
2. 使用 run_interval 实现多个高频并行任务(仅交易模块)
在实盘交易中,run_interval 允许您以设定的时间间隔(秒级)周期性运行指定函数。该函数同样可以多次设定,并且会以多个线程并行运行。这非常适合需要同时监控多个高频信号的场景。
def initialize(context):
# 设定多个并行的高频任务
run_interval(context, strategy_a_logic, seconds=5)
run_interval(context, strategy_b_logic, seconds=10)
g.security = '600570.SS'
set_universe(g.security)
def strategy_a_logic(context):
log.info("执行策略A的高频逻辑")
# 策略A代码
def strategy_b_logic(context):
log.info("执行策略B的高频逻辑")
# 策略B代码
def handle_data(context, data):
pass
⚠️ 注意事项:
当使用 run_interval 开启多个线程并行运行时,请务必小心处理不同线程之间的逻辑关联和全局变量(如 g 对象)的读写冲突,避免因并发导致的数据异常或下单异常。