写一个可以在聚宽运行的量化选股回测代码
时间: 2023-12-03 11:44:01 浏览: 201
C#量化交易示例代码 支持回测对于刚开始做量化交易的人说很难
以下是一个简单的量化选股回测代码,使用了聚宽的Python SDK和jqdatasdk包。
```python
# 导入聚宽SDK和jqdatasdk包
import jqdatasdk as jq
from jqdatasdk import *
from jqlib.technical_analysis import *
# 初始化聚宽
auth('账号', '密码')
# 选取回测时间段
start_date = '2010-01-01'
end_date = '2021-09-30'
# 选股条件
def select_stocks(context):
# 获取所有股票的基本信息
all_stocks = get_all_securities(types=['stock'], date=context.current_dt)
# 筛选出市值在前100的股票
top100 = all_stocks.sort_values(by='total_mv', ascending=False).iloc[:100]
# 获取这些股票的历史价格数据
prices = get_price(top100.index.tolist(), start_date, end_date, fields=['open', 'close', 'high', 'low'])
# 计算股票的5日均线和20日均线
ma5 = MA(prices['close'], 5)
ma20 = MA(prices['close'], 20)
# 筛选出5日均线在20日均线上方的股票
selected_stocks = ma5 > ma20
return selected_stocks
# 回测
def backtest(context):
# 获取回测时间段内的所有交易日
trading_days = get_trade_days(start_date=start_date, end_date=end_date)
# 初始化资金
cash = 1000000
# 初始化持仓
positions = {}
# 开始回测
for dt in trading_days:
# 设置当前日期
set_benchmark('000300.XSHG')
set_date(dt)
# 获取当日符合选股条件的股票
selected_stocks = select_stocks(context)
# 卖出不符合选股条件的股票
for stock in positions.keys():
if stock not in selected_stocks:
order_target(stock, 0)
del positions[stock]
# 买入符合选股条件的股票
available_cash = cash
for stock in selected_stocks.index.tolist():
if stock not in positions.keys():
if available_cash > 0:
price = get_price(stock, start_date=dt, end_date=dt, fields=['open'])['open'][0]
if price * 100 < available_cash:
order(stock, 100)
positions[stock] = 100
available_cash -= price * 100
# 计算总资产
total_value = available_cash
for stock in positions.keys():
price = get_price(stock, start_date=dt, end_date=dt, fields=['close'])['close'][0]
total_value += price * positions[stock]
# 记录日志
log.info('Date: %s, Total Value: %.2f' % (dt.strftime('%Y-%m-%d'), total_value))
# 运行回测
backtest({'current_dt': start_date})
```
上述代码中,我们首先初始化聚宽并选取了回测时间段。然后定义了一个选股条件函数`select_stocks()`,该函数筛选出市值在前100的股票,并且股票的5日均线在20日均线上方。接着,我们定义了一个回测函数`backtest()`,该函数在每个交易日开始时调用`select_stocks()`函数选取符合条件的股票,并且卖出不符合条件的股票,买入符合条件的股票。最后,我们运行了回测函数并记录了每个交易日的总资产。
请注意,上述代码仅供参考,实际的量化选股回测策略需要根据实际情况进行调整和优化。
阅读全文