办公问答网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 94|回复: 2

干货全拿走-用ExcelVBA做多策略自定义量价估值市值特征 ...

[复制链接]

1

主题

6

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2023-1-15 21:06:12 | 显示全部楼层 |阅读模式
2023年1月14日:更新一下之前的股票下载器,目前把相关制作过程已经新录制成了教学视频(PS:不是产品演示视频!),感兴趣的同学可以访问B站链接:https://www.bilibili.com/video/BV15A411f7s9/
<hr/>之前做了一个选股器模型,具体可以看这篇文章:
但是,但是,感觉之前的还是有很大提升空间的,一是指标太少,二是回测和选股都不方便。所以趁着年前的机会,来了次彻彻底底的升级!之前的只能说是模块,现在的才是真真正正的系统!新系统演示可以看:
因为找不到满意的选股器,我自己用Excel做了一个多策略自定义量价估值市值特征选股及回测系统_哔哩哔哩_bilibili
这边在知乎就写一些从底层逻辑开始搭建的心路历程以及部分代码吧,供学习交流。
这个软件是我原创的一个选股工具,主要就是为了方便自己选股和优化策略。和市面上网站上面的选股器的不同是,市面上的选股器,只会根据你的选股参数,告诉你一个结果,你无法验证你的选股策略如何,不知道如何优化。即便具备回测功能的选股网站,告诉你的也只是一个答案,很难去看每一步的交易步骤。如果要实现更高级的功能,比如显示每个交易步骤,自定义卖出点,添加很多自定义参数等,就要收取高昂费用,而且即便这样,还是有很多选股的参数达不到自己想要的设置自由度。所以自己写了这个工具。目前我关心的几个选股策略是可以实现的,主要是根据量价走势选股(如选出低位反转、或者稳定上涨股)、交易动能和情绪选股以及小市值低估值策略选股等。最后,它不全能,但是实用,赚钱不需要多么眼花缭乱的功能,简单实用硬道理。
在上架这个产品前,我自己已经经过了多轮的回测,确定了几个比较不错的策略,在软件中内置了分享。当然用户也可以自己修改参数。主要介绍如下(具体参数设置可在软件内部查看):
回测周期2018-2022年,选出股票固定每个只卖100股。每次选出来持仓成本不超过1万元。
选股原则1-低位缩量反转放量策略(下跌仍保持低换手的股票,反转时一般大涨,这个策略注意,如果买入后没走出趋势,就要止盈止损)
选股周期60天,卖点60天后:
回测结果1:76笔交易-共盈利3954
选股原则2-稳定放量上升策略(抓上升趋势然后快速退出,大肉吃不到,但是能喝汤,风险小)
选股周期20天,卖点10天后
回测结果2: 51笔交易-共盈利2295
选股原则3-小市值低估值策略(低市值加上一些情绪(股价上冲)选股)
选股周期60天,卖点60天后
回测结果3:16笔交易-共盈利1104



策略2的回测盈亏数据透视图表



支持参数(在标黄区域内可自定义更改数值,用户根据不同的参数组合,可以自己开发策略)




搭建的难点感觉一个是选股指标的构建,另外一个就是和数据源的耦合关联,怎么去调用要梳理清楚不能混乱,而且还要兼容回测的功能。
选股模块核心代码如下(以选股器第三个指标为例,选股器都是多段这种代码的叠加):
Sub H3() '收盘价涨幅大于X%的天数超过Y
'On Error Resume Next
RowNumber = i + 6
'If IsNumeric(ThisWorkbook.Worksheets("涨跌幅%").Cells(RowNumber, p).Value) = False Then FilterYes = False
If FilterYes = False Then Exit Sub '这个代表有其余的筛选条件已经不满足了,那么检测当前的是否满足就没有意义了,直接退出
FilterYes = False
VariableX = ThisWorkbook.Worksheets("选股器").Range("D3").Value
VariableY = ThisWorkbook.Worksheets("选股器").Range("E3").Value
Dim DaysCount As Integer
DaysCount = 0
ColumnEnd = 3 + ThisWorkbook.Worksheets("选股器").Range("B1").Value
With ThisWorkbook.Worksheets("涨跌幅%")
For p = 3 To ColumnEnd
If IsNumeric(ThisWorkbook.Worksheets("开盘价").Cells(RowNumber, p).Value) And ThisWorkbook.Worksheets("开盘价").Cells(RowNumber, p).Value <> "" Then '这里用开盘价而不是涨跌幅判定,是因为即便当天没有行情,也会有涨跌幅数据,不能用来判断数据有无
   If .Cells(RowNumber, p).Value * 100 >= VariableX Then '数据下载的为百分比,所以要乘以100进行换算
   DaysCount = DaysCount + 1
   End If
Else
End If
Next
End With
If DaysCount >= VariableY Then
FilterYes = True
Else
FilterYes = False
End If
FilterCount = FilterCount + 1
End Sub
如要获取源程序,可以访问(高能预警,恰饭所需,付费下载):https://item.taobao.com/item.htm?ft=t&id=696212678483
回复

使用道具 举报

1

主题

11

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2025-7-8 05:47:28 | 显示全部楼层
众里寻他千百度,蓦然回首在这里!
回复

使用道具 举报

2

主题

8

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2025-8-24 12:14:35 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|办公问答网

GMT+8, 2025-9-14 14:49 , Processed in 0.102449 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Templated By 【未来科技 www.veikei.com】设计

快速回复 返回顶部 返回列表