一. 前言
关注我的小伙伴应该都知道 ,最近我一直在做一款开源的 Python 桌面端应用 : 不当韭菜。
这款应用的核心是 : 仓位控制 + 风险告警 , 同时具有一定的推荐功能。
现阶段这款应用已经到了最后的调试阶段 ,所以准备把其中的逻辑和大家分享一下
,看看大家有没有好的想法。
这一篇主要是用来分享其中三大模块之一 : 推荐模块-=成交量。 (PS : 后续还有成交价等其他模块)
二. 推荐模块的思路
2.1 关于策略引擎
策略引擎的逻辑不复杂 ,引擎里面会有很多策略类 ,在每个类里面通过元数据配置信息来判断处理的数据范围
python
class BaseStrategy(ABC):
@abstractmethod
def analyze(self, trade_info: List[StrategyStockDay]) -> RiskAssessment:
"""
核心分析方法,子类必须实现该方法
:param trade_info: 股票交易信息
:return: 分析结果,通常是一个策略评分或结论
"""
pass
@abstractmethod
def strategyConfig(self) -> StrategyInfoMetadata:
"""
配置策略的参数,子类必须实现该方法
:return: 返回一个字典,包含策略的配置信息
"""
pass
一般情况下 ,一个元数据长这样 :
python
@dataclass
class StrategyInfoMetadata:
# 策略 Code
strategy_code: str
# 策略可读名称
strategy_name: str
"""
- 策略分组 (风险 / 机会)
- 0 : 风险型策略
- 1 : 关注型策略
- 9 :前置处理
"""
strategy_group: StrategyGroup
# 备用
strategy_type: StrategyType
# 策略分析的天数
analysis_day: int
# 策略等级 :等级越高,分数比例越高
strategy_level: int
"""
S1 : 在每个策略类里面都会返回一个 Config 元数据
S2 : 其中会通过 strategy_group 和 strategy_type 来对策略进行描述
- GROUP : 风险/ 关注
- TYPE : 交易量 / 交易价 / 消息面 / 时间节点
S3 : analysis_day 表示该条策略接收多少天的数据
S4 : strategy_level 用来描述最终的得分
"""
def strategyConfig(self) -> dict:
"""
返回策略的配置
"""
return StrategyInfoMetadata(
strategy_code="three_days_volume_increase",
strategy_name="成交量连续放大",
strategy_group=StrategyGroup.ATTENTION,
strategy_type=StrategyType.VOLUME,
analysis_day=3,
strategy_level=2,
)
三. 言归正传 ,直接来看策略
成交量怎么界定 ?
成交量是衡量股票行情的重要指标 ,不管是长线的角度还是短线的角度 ,股价波动大 ,成交量的波动一定大 :
- 成交量涨 不等于 股票涨
- 但是成交量明显变化 ,一定说明这个股票关注变多 ,关注 等于 机会
3.1 策略一 : 短期
成交量大幅变化
python
class ThreeDaysVolumeIncreaseStrategy(BaseStrategy):
"""
连续3天成交量放大策略,成交量逐日增加
"""
def analyze(self, trade_info_list: List[StrategyStockDay]) -> RiskAssessment:
"""
分析过去3天的成交量是否连续放大
"""
node_point = 0
description = ""
# 确保至少有3天的交易数据
if len(trade_info_list) >= 3:
# 检查过去3天的成交量是否连续放大
for i in range(2, len(trade_info_list)):
# 检查当前天成交量是否大于前一天的成交量
if trade_info_list[i].vol > trade_info_list[i - 1].vol:
node_point += 2 # 每天成交量放大得分 +2
description += f"第{i}天:与前一天相比,交易量增加. "
# 如果当天成交量比前两天放大幅度较大,得分 +6
if trade_info_list[i].vol > trade_info_list[i - 1].vol * 1.5:
node_point += 6
description += f"第{i}天:与前一天相比,交易量增加了50%以上. "
return RiskAssessment(
stock_code=trade_info_list[0].stock_code,
description=description,
config=self.strategyConfig(),
node_point=node_point,
)
def strategyConfig(self) -> dict:
"""
返回策略的配置
"""
return StrategyInfoMetadata(
strategy_code="three_days_volume_increase",
strategy_name="成交量连续放大",
strategy_group=StrategyGroup.ATTENTION,
strategy_type=StrategyType.VOLUME,
analysis_day=3,
strategy_level=2,
)
- 思路 : 分析3天数据
- 如果成交量大于前一天 ,则给 2 分
- 如果成交量大幅变化(超过50%) ,则给 6 分
- 解决瓶颈 : 这段代码解决的是短期的问题 ,当触发的时候可能已经启动了
3.2 策略二 : 成交量平均曲线发生变化
python
class SixDaysVolumeComparisonStrategy(BaseStrategy):
"""
6天成交量对比策略,后三天总成交量大于前三天时计分。
"""
def analyze(self, trade_info_list: List[StrategyStockDay]) -> RiskAssessment:
"""
分析6天的成交量对比,计算评分。
"""
node_point = 0
description = ""
# 确保至少有6天的交易数据
if len(trade_info_list) >= 6:
# 计算前三天和后三天的成交量总和
volume_first_three_days = sum(day.vol for day in trade_info_list[:3])
volume_last_three_days = sum(day.vol for day in trade_info_list[3:6])
if volume_last_three_days > volume_first_three_days:
node_point += 1 # 后三天总量大于前三天,加1分
increase_percentage = (
(volume_last_three_days - volume_first_three_days)
/ volume_first_three_days
) * 100
description += "后三天的成交量总和大于前三天总和,得1分。"
# 每多5%,多加2分
additional_points = int(increase_percentage // 5) * 2
node_point += additional_points
description += f" 成交量增加了{increase_percentage:.2f}%,额外得{additional_points}分。"
return RiskAssessment(
stock_code=trade_info_list[0].stock_code,
description=description,
config=self.strategyConfig(),
node_point=node_point,
)
def strategyConfig(self) -> StrategyInfoMetadata:
"""
返回策略的配置
"""
return StrategyInfoMetadata(
strategy_code="six_days_volume_comparison",
strategy_name="6天成交量对比",
strategy_group=StrategyGroup.ATTENTION,
strategy_type=StrategyType.VOLUME,
analysis_day=6,
strategy_level=3,
)
- 总结 : 统计6天的成交量 ,3天为一组 ,如果后三天的总和 大于 前3天 ,则加1分 ,每多5% ,多给2分
- 就像前面说的 ,成交量放大并不表示一定涨 ,如下
四. 使用的方式
❗❗❗ 基于成交量 ,我们就可以得到股票的推荐指标 :
👉👉👉 当然,这个模块还在打磨中
总结
- 成交量变化意味着要开始关注这个股票了,
后续寻找是否有机会
!!! 成交量在推荐板块的作用其实比较少
,更重要的是风险板块 ,这一个下一期来看!!!
❓ 系列计划 :
- 推荐模块 - 成交价
- 推荐模块 - 时间节点
- 风险模块 - 成交量
- 风险模块 - 成交价
- 风险模块 - 时间节点
- 风险模块 - 消息面
- 其他源码模块一览
- 项目发布 (2025-01)
❗ 加个盾 :
先说明 ,我不是专业
的金融领域的人 ,上面的策略也只是一次次被毒打过程中发现可以关注的一些信息,目的也只是为了让操作的时候有更多的信息参考。
不能保证准确或者专业
,所以行业大佬勿喷 ,只是韭菜的抱团取暖而已!!
兄弟们如果有相关心得 ,欢迎在评论里面提出来 ,整合到项目里面,预计年前能发布一个可用的应用出来。
❤️❤️❤️ 有兴趣的也可以 Star 一下
另外 : 求票求票啊 ,兄弟们
最后的最后 ❤️❤️❤️👇👇👇
- 👈 欢迎关注 ,超200篇优质文章,未来持续高质量输出 🎉🎉
- 🔥🔥🔥 系列文章集合,高并发,源码应有尽有 👍👍
- 走过路过不要错过 ,知识无价还不收钱 ❗❗