蚂蚁量化 发布于2025-09-27
回复 78
浏览 8550
186
与上个版本 [国庆节献礼:实例说明“白马攻防”策略](https://www.joinquant.com/view/community/detail/51b35b6e7299bde1585129d413edf5ee) 相比较,有以下改进:
改进零:
加入了 网友 @ 罗伯特A 的动量过滤,这个过滤逻辑上有道理,实际也有提高
### 克隆自聚宽文章:https://www.joinquant.com/post/57818
### 标题:白马攻防策略的一点改进
### 作者:罗伯特A
改进一:
策略改成日运行daily_run,策略启动时,首先追溯220*3天,滚动得到最新的市场温度,空仓就立即买入建仓,不是空仓就判断是否换月,换月时就调仓。
```
run_daily(filter_before_open, time='8:00', reference_security='000300.XSHG')
run_daily(adjust_position, time='9:45', reference_security='000300.XSHG')
。。。。。。
def track_back_market_temp(context):# 数据回滚两年判断市场温度
long_index300 = list(attribute_history('000300.XSHG', 220 * 3, '1d', ('close'), df=False)['close'])
g.market_temperature = 'cold'
for back_day in range(220, len(long_index300)):
index300 = long_index300[back_day - 220:back_day]
market_height = (mean(index300[-5:]) - min(index300)) / (max(index300) - min(index300))
if market_height < 0.20:
g.market_temperature = "cold"
elif market_height > 0.90: # 这里前面笔误写成0.80了
g.market_temperature = "hot"
elif max(index300[-60:]) / min(index300) > 1.20:
g.market_temperature = "warm"
```
改进二:
闲置资金买入低风险ETF组合
```
g.low_risk_ETFs = ['563020.XSHG', '159926.XSHE', '511010.XSHG'] #股票池为{}时,买入低风险ETF组合: 1.低波红利,2,国债ETF1,国债ETF2
```
改进三:
交易信息发微信,一月一次交易,手动即可。微信内容样板:
```
调仓时间 2012-04-05 09:45:00
-卖出 601333.XSHG 广深铁路
-买入 601390.XSHG 中国中铁
-买入 000825.XSHE 太钢不锈
- 最新持仓:
601186.XSHG 中国铁建 52300股
601390.XSHG 中国中铁 86500股
000825.XSHE 太钢不锈 58600股
```
改进四:
部分想实盘的网友说,账户资金少,策略一些股价高的股票买不进来。
办法1:策略增加了股价高价限制,只要你将模拟资金设置成你自己的账户自己额度,股价就会自动限制你不能买入的股票。
办法2:或者你把 context.portfolio.total_value 直接替换成你的投入金额
```
(current_data[stock].last_price>round(context.portfolio.total_value*0.95/g.buy_stock_count/100,2)) or # 股价限高
```
改进五:
日志显示,简单清晰
```
========今日股票池: ['601390.XSHG', '601186.XSHG', '000825.XSHE'] ===========
2012-04-05 08:00:00 - INFO - 601390.XSHG 中国中铁
2012-04-05 08:00:00 - INFO - 601186.XSHG 中国铁建 持仓
2012-04-05 08:00:00 - INFO - 000825.XSHE 太钢不锈
2012-04-05 08:00:00 - INFO - -
2012-04-05 09:45:00 - INFO - 调仓时间 2012-04-05 09:45:00
2012-04-05 09:45:00 - INFO - -卖出 601333.XSHG 广深铁路
2012-04-05 09:45:00 - INFO - -买入 601390.XSHG 中国中铁
2012-04-05 09:45:00 - INFO - -买入 000825.XSHE 太钢不锈
2012-04-05 09:45:00 - INFO - -
2012-04-05 09:45:00 - INFO - - 最新持仓:
2012-04-05 09:45:00 - INFO - 601186.XSHG 中国铁建 52300股
2012-04-05 09:45:00 - INFO - 601390.XSHG 中国中铁 86500股
2012-04-05 09:45:00 - INFO - 000825.XSHE 太钢不锈 58600股
```
改进六:
精简冗余代码,策略不到200行,运行起来飞快
对这个策略,网友如果有其它点子,请讲给我听,我们一起来升级它。
###V2-->更新成V2.1版
看来网友对这个策略是相当认真的,指出了两个问题:
1. 问题一:
g.low_risk_ETFs = ['563020.XSHG', '159926.XSHE', '511010.XSHG'] #股票池为{}时,买入 1.低波红利,2,国债ETF1,国债ETF2
'159926.XSHE', 是场外国债基金,JQ没有数据,删除掉,改成
g.low_risk_ETFs = ['563020.XSHG', '511010.XSHG'] #股票池为{}时,买入 1.低波红利,2,国债ETF
2. 问题二:
run_daily(filter_before_open, time='8:00', reference_security='000300.XSHG')
这个股票过滤函数中用到了current_data[stock].day_open,而实际在8:00钟是不应该取到值的未来数据,改成9:35执行过滤:
run_daily(filter_before_open, time='9:35', reference_security='000300.XSHG')
虽然这个问题目前没有影响到结果,但未来说不定哪天股票开盘涨停就出现问题了。谢谢网友@饮水思源1 指正。
以上问题已经更新成白马股攻防转换策略V2.1版,下载不重复扣分,积分不够的朋友下载附件。
评论
@eigload 我实盘策略之一,你自己决断。
2025-09-27
@蚂蚁量化 大神实盘了哪几个
2025-09-27
老师,我有个问题想请教一下,市场从冷暖热对应的选股指标是越来越严,这个是怎么得出呢?
2025-09-28
@一块烂牛排 你忽略了市场从冷暖热对应的选股指标pb和cash_flow是越来越松的。就是说,冷的时候,市场更注重公司当下实在的价值(pb,cash_flow),热的时候,更市场看重未来的增长(increase of profit etc.)。
2025-09-28
大佬,有没有必要开放创业板和科创板啊。
2025-09-28
@Meikosama0409 不用开,你看,代码过滤了这些市场的股票
(stock.startswith('30')) or # 创业
(stock.startswith('68')) or # 科创
(stock.startswith('8')) or # 北交
(stock.startswith('4')) # 北交
2025-09-28
@1797学习一下试试 多谢支持
2025-09-28
@狼行天下之天下敛财 多谢支持
2025-09-28