第273页 · 预计6页
以下为简化版核心代码,可直接运行,包含数据获取、四维评分、每日回测三个核心模块,参数可自行调整。
import tushare as ts
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# 初始化Tushare
pro = ts.pro_api('你的token')
# ========== 1. 获取基础行情数据 ==========
def get_stock_data(ts_code, start_date, end_date):
df = pro.daily(ts_code=ts_code, start_date=start_date, end_date=end_date)
df = df.sort_values('trade_date').reset_index(drop=True)
# 计算252日回撤
df['high_252d'] = df['high'].rolling(252, min_periods=60).max()
df['retrace'] = (df['close'] - df['high_252d']) / df['high_252d']
return df
# ========== 2. 简化四维评分 ==========
def calc_four_dim_score(df, date_idx):
row = df.loc[date_idx]
score = 0
# 技术面:超跌得分(15%权重)
retrace = abs(row['retrace'])
if retrace < 0.15:
tech_score = 0
else:
tech_score = min(100, max(0, (retrace - 0.15) / 0.3 * 100))
score += 0.15 * tech_score
# 基本面:营收增速(简化版,20%权重)
# 实际使用请接入财务数据,这里示例用波动率替代演示
fund_score = min(100, max(0, 50 + row['pct_chg'] * 2))
score += 0.2 * fund_score
# 资金面:量价配合(简化版,25%权重)
vol_ratio = row['vol'] / df['vol'].iloc[date_idx-20:date_idx].mean()
money_score = min(100, max(0, vol_ratio * 30))
score += 0.25 * money_score
# 产业面:示例默认60分,实际使用接入赛道标签(40%权重)
industry_score = 60
score += 0.4 * industry_score
return score
# ========== 3. 简单回测主循环 ==========
def simple_backtest(ts_code, start_date, end_date, initial_cash=100000):
df = get_stock_data(ts_code, start_date, end_date)
cash = initial_cash
shares = 0
nav_list = []
for i in range(252, len(df)):
date = df.loc[i, 'trade_date']
close = df.loc[i, 'close']
# 计算前一日评分,决定次日买卖
prev_score = calc_four_dim_score(df, i-1)
# 买入条件:评分>60且无持仓
if prev_score > 60 and shares == 0:
shares = int(cash / close / 100) * 100
cost = shares * close * 1.00025 # 买入成本
cash -= cost
# 卖出条件:评分<50且有持仓
elif prev_score < 50 and shares > 0:
amount = shares * close * 0.99975 # 卖出扣除成本
cash += amount
shares = 0
# 计算当日净值
nav = cash + shares * close
nav_list.append({'date': date, 'nav': nav})
return pd.DataFrame(nav_list)
# 示例运行
if __name__ == '__main__':
result = simple_backtest('000001.SZ', '20200101', '20231231')
print(result.tail())
注:以上为最小演示代码,完整产业标签、资金流向、财务数据、交易规则、风控熔断模块,可访问intoquant.com获取完整版。
⚠️ 风险提示:本书内容仅为量化研究与知识分享,不构成任何投资建议。套利交易存在基差、费率、流动性、平台与极端行情等风险,历史表现不代表未来收益。投资有风险,入市需谨慎,请自主决策、量力而行。
💡 键盘 ←/→ 翻章 · T 键切换目录