不当韭菜1.0 :我设计,GPT 代写了几个股票关注策略(成交量),看看好不好用

一. 前言

关注我的小伙伴应该都知道 ,最近我一直在做一款开源的 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 一下

AntMonitor

另外 : 求票求票啊 ,兄弟们

掘金2024年度人气创作者打榜中,快来帮我打榜吧~

最后的最后 ❤️❤️❤️👇👇👇

相关推荐
JM_life13 分钟前
你的第一个博客-第一弹
python
No0d1es29 分钟前
GESP CCF python二级编程等级考试认证真题 2024年12月
开发语言·python·青少年编程·gesp·ccf·二级
无奈ieq34 分钟前
Scala快速入门+示例
开发语言·后端·scala
大霞上仙1 小时前
selenium 在已打开浏览器上继续调试
python·selenium·测试工具
CodeClimb1 小时前
【华为OD-E卷-开心消消乐 100分(python、java、c++、js、c)】
java·python·华为od
Eiceblue1 小时前
Python拆分Excel - 将工作簿或工作表拆分为多个文件
开发语言·python·excel
Linux运维技术栈2 小时前
Python字符串及正则表达式(十一):正则表达式、使用re模块实现正则表达式操作
开发语言·python·正则表达式
hshpy2 小时前
To use only local configuration in your Spring Boot application
java·spring boot·后端
梧桐树04292 小时前
python:正则表达式
数据库·python·正则表达式
小码编匠2 小时前
.NET 下 RabbitMQ 队列、死信队列、延时队列及小应用
后端·c#·.net