3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
完全可以实现。在 ptrade 量化平台中,虽然 set_universe 接口本身接收的是一个股票代码列表(list),但你可以利用 Python 强大的文件处理能力(如标准库或 pandas),结合 ptrade 提供的 get_research_path() 函数,从外部文件(如 CSV、TXT)中读取股票代码并动态生成该列表,从而实现股票池的文件化配置。
假设你在 ptrade 的研究环境中上传了一个名为 my_stocks.csv 的文件,文件内容包含一列股票代码(例如表头为 code)。
import pandas as pd
import os
def initialize(context):
# 获取研究环境的根目录路径
research_path = get_research_path()
file_path = os.path.join(research_path, 'my_stocks.csv')
try:
# 使用 pandas 读取 CSV 文件
df = pd.read_csv(file_path)
# 假设 CSV 中有一列名为 'code',将其转换为 list
stock_list = df['code'].tolist()
# 将读取到的股票列表设置为策略股票池
g.security = stock_list
set_universe(g.security)
log.info(f"成功从文件加载股票池,共 {len(g.security)} 只股票。")
except Exception as e:
log.error(f"读取股票池文件失败: {e}")
# 失败时的降级处理,设置默认股票池
g.security = ['600570.SS']
set_universe(g.security)
def handle_data(context, data):
# 策略逻辑处理
pass
如果你的股票代码保存在一个简单的文本文件 stocks.txt 中,每行一个代码:
import os
def initialize(context):
research_path = get_research_path()
file_path = os.path.join(research_path, 'stocks.txt')
stock_list = []
try:
with open(file_path, 'r', encoding='utf-8') as f:
for line in f:
code = line.strip()
if code: # 过滤空行
stock_list.append(code)
g.security = stock_list
set_universe(g.security)
log.info(f"成功从 TXT 加载股票池: {g.security}")
except Exception as e:
log.error(f"读取 TXT 文件失败: {e}")
def handle_data(context, data):
pass
get_research_path() 获取基础路径,以确保在回测和交易环境中都能正确找到你上传的文件。600570.SS、000001.SZ),以符合 ptrade 的 API 规范。try...except 异常处理逻辑(如上例所示),防止因文件丢失或格式错误导致策略直接崩溃。before_trading_start 或通过 run_daily 定时触发的函数中,然后再次调用 set_universe() 更新。