回測+問題
由bq2wgfv4创建,最终由bq2wgfv4 被浏览 6 用户
\
回測
夏普值(Sharpe Ratio)
夏普值= (R_p - R_f ) / sigma_p
| R_p | 投资组合平均收益 |
|---|---|
| R_f | 无风险利率(如国债) |
| sigma_p | 收益的波动率(标准差) |
回測: 2020-01-01 - 2025-12-29
Original
m6:
expr:
c_pct_rank(total_market_cap) as score
expr_filters:
--turn>0.05
net_profit_ttm > 0
pe_ttm > 0
m4
倉位 score_field: score ASC
score_field="""score""", or score_field="""score ASC”””,
(小市值)
m4
持倉股票數量 hold_count: 60
(Change to 60 from 10)
持倉股票數量 hold_count:80
(Performance dropped)
m5
rebalance_period_days = 5
(Changed to 5 from 3)
rebalance_period_days: 10 days (performance dropped)
\
問題
下列代碼似乎沒有作用。如何起作用?
SELECT -- 在这里输入因子表达式 -- DAI SQL 算子/函数: https://bigquant.com/wiki/doc/dai-PLSbc1SbZX#h-%E5%87%BD%E6%95%B0 -- 数据&字段: 数据文档 https://bigquant.com/data/home
-- 计算收益率:这里示例使用常见的“收益率 = 当前 / 过去 - 1”
--m_lag(close, 90) / close AS return_90,
--m_lag(close, 30) / close AS return_30,
close / m_lag(close, 90) - 1 AS return_90,
close / m_lag(close, 30) - 1 AS return_30,
close / m_lag(close, 1) - 1 AS return_1,
-- 下划线开始命名的列是中间变量, 不会在最终结果输出 (e.g. _rank_return_90)
c_pct_rank(return_90) AS pct_rank_return_90,
c_pct_rank(return_30) AS pct_rank_return_30,
c_rank(volume) AS rank_volume,
-- 日期和股票代码
date, instrument
FROM -- 预计算因子 cn_stock_bar1d https://bigquant.com/data/datasources/cn_stock_bar1d cn_stock_factors -- SQL 模式不会自动join输入数据源, 可以根据需要自由灵活的使用 -- JOIN input_1 USING(date, instrument) WHERE -- WHERE 过滤, 在窗口等计算算子之前执行 -- 剔除ST股票 st_status = 0
QUALIFY -- QUALIFY 过滤, 在窗口等计算算子之后执行, 比如 m_lag(close, 3) AS close_3, 对于 close_3 的过滤需要放到这里 -- 去掉有空值的行 --COLUMNS(*) IS NOT NULL AND return_90 IS NOT NULL AND return_30 IS NOT NULL
--c_pct_rank = 0.0:在当天全市场里几乎最小
--c_pct_rank = 0.5:大概在当天中位数
--c_pct_rank = 0.9:超过当天约 90% 的股票(处在前 10%)
--c_pct_rank = 1.0:当天几乎最大
AND pct_rank_return_90 > 0.2 -- 90日收益率当天前20%
AND pct_rank_return_30 > 0.9 -- 30日收益率在当天前10%(短期很强)
-- 按日期和股票代码排序, 从小到大 ORDER BY date, instrument