策略验证_买入口诀_双管齐下买进不怕

news2024/9/22 7:23:01

写在前面:
1. 本文中提到的“股票策略校验工具”的具体使用操作请查看该博文;
2. 文中知识内容来自书籍《同花顺炒股软件从入门到精通》
3. 本系列文章是用来学习技法,文中所得内容都仅仅只是作为演示功能使用

目录

解说

策略代码

结果


解说

        所谓“双管齐下”形态是由两条并列的长下影小实体组成。股价下跌到低位后,如果连续出现两条长下影小实体的K线,且下影线的最低点较为接近,称为“双管齐下”。它像两条长钢管扎向地下,使地基坚实可靠。该形态的出现,表明股价已进入了底部,或者离底部已经不远了,中长线投资者可开始建仓,短线也可以介入,后市获利一般可靠。

        出现“双管齐下” 的形态后,股票投资者需遵循以下操作原则。

        1)双管齐下形态可在底部行情中出现,也可在顶部行情和下降行情图中出现。在顶部行情或下降途中出现时,显示的多为卖出信号,极个别情况出现反弹走势,但多数是昙花一现,很难做出差价,最好不要介入。相反地,如果在底部行情出现,显示的均是买入信号,股票投资者可以放心地进行买入操作。

        2)“双管齐下”形态中两条K线的下影长度一般要达到K线实体部分的1倍以上,少于这一比率,有效性会降低。另外,对该图线两个低点之间的距离也有一定要求,一般来说,两者间的差距不能超过1%,而且越接近越好,过大的差距会影响判断的准确性。如果股票出现“双管齐下”形态,股民在这时买入股票,都可获得相当大的收益。

        3)如果个别股票在底部或在下降途中,连续出现多条长下影小实体的K线,其低点也十分接近,这种情况也可按“双管齐下”进行操作,只是取其下影低点最为接近的两条K线作为“双管齐下”的对象就行。

        4)在个别情况下,“双管齐下”形态出现后,股价有时会出现不涨反跌的走势,此时千万不要割肉出逃,应耐心守候。股价经过短暂的调整后,会反转向上,恢复正常走势,最终仍能获利。如果买进时的心态不够稳定,一遇到下跌走势就卖出股票,操作心态就会变得越来越坏,取胜的概率就会越来越低。

策略代码

自定义:

#
买入点第二根K线后一个交易日
取买入点后第三个交易日的收盘价,如果涨跌幅为正,定义为胜
def excute_strategy(base_data,data_dir):
    '''
    买入口诀 - 双管齐下,买进不怕
    解析:
    1. 两条并列的长下影小实体组成,且下影线的最低点较为接近
    2. 下影长度一般要达到实体的1倍以上
    3. 两个低点之间的差距不超过1%
    自定义:
    1. 检查买进后,第三日的收盘价,如果收盘价比买进收盘价大,说明有效
    2. 胜率 = 有效的次数/总次数
    3. 买进时点 =》 双管齐下出现后下一交易日
    4. 小实体 =》 实体长度是昨日收盘价的0.5%到1.5%之间
    5. 差距不超过1% =》 两者最低价差值小于K线整体长度的1%
    只计算最近两年的数据
    :param base_data:股票代码与股票简称 键值对
    :param data_dir:股票日数据文件所在目录
    :return:
    '''
    import pandas as pd
    import numpy as np
    import talib,os
    from datetime import datetime
    from dateutil.relativedelta import relativedelta

    def res_pre_two_year_first_day():
        pre_year_day = (datetime.now() - relativedelta(years=2)).strftime('%Y-%m-%d')
        return pre_year_day
    caculate_start_date_str = res_pre_two_year_first_day()

    dailydata_file_list = os.listdir(data_dir)

    total_count = 0
    total_win = 0
    check_count = 0
    list_list = []
    detail_map = {}
    for item in dailydata_file_list:
        item_arr = item.split('.')
        ticker = item_arr[0]
        secName = base_data[ticker]
        file_path = data_dir + item
        df = pd.read_csv(file_path,encoding='utf-8')
        # 删除停牌的数据
        df = df.loc[df['openPrice'] > 0].copy()
        df['o_date'] = df['tradeDate']
        df['o_date'] = pd.to_datetime(df['o_date'])
        df = df.loc[df['o_date'] >= caculate_start_date_str].copy()
        # 保存未复权收盘价数据
        df['close'] = df['closePrice']
        # 计算前复权数据
        df['openPrice'] = df['openPrice'] * df['accumAdjFactor']
        df['closePrice'] = df['closePrice'] * df['accumAdjFactor']
        df['highestPrice'] = df['highestPrice'] * df['accumAdjFactor']
        df['lowestPrice'] = df['lowestPrice'] * df['accumAdjFactor']

        if len(df)<=0:
            continue

        # 开始计算
        df.reset_index(inplace=True)
        df['i_row'] = [i for i in range(len(df))]
        df['body_length'] = abs(df['closePrice']-df['openPrice'])
        df['small_body'] = 0
        df.loc[(df['body_length']/df['closePrice'].shift(1)>0.005) & (df['body_length']/df['closePrice'].shift(1)<0.015),'small_body'] = 1
        df['bottom_shadow_length'] = 0
        df.loc[df['openPrice']>df['closePrice'],'bottom_shadow_length'] = df['closePrice'] - df['lowestPrice']
        df.loc[df['openPrice']<=df['closePrice'],'bottom_shadow_length'] = df['openPrice'] - df['lowestPrice']

        df['long_bottom_shadow'] = 0
        df.loc[df['bottom_shadow_length']/df['body_length']>1,'long_bottom_shadow'] = 1
        df['two_have'] = 0
        df.loc[(df['small_body']==1) & (df['long_bottom_shadow']==1),'two_have'] = 1
        df['two_sort_yeah'] = 0
        df.loc[(df['two_have']==1) & (df['two_have'].shift(1)==1),'two_sort_yeah'] = 1
        df['final_yeah'] = 0
        df.loc[(df['two_sort_yeah']==1) & (abs(df['lowestPrice']-df['lowestPrice'].shift(1))/(df['highestPrice']-df['lowestPrice'])<=0.01),'final_yeah'] = 1

        df['three_chg'] = round(((df['close'].shift(-3) - df['close'])/df['close'])*100,4)
        df['three_after_close'] = df['close'].shift(-3)

        df_target = df.loc[df['final_yeah']==1].copy()

        node_count = 0
        node_win = 0
        duration_list = []
        table_list = []
        i_row_list = df_target['i_row'].values.tolist()
        for i,row0 in enumerate(i_row_list):
            row = row0 + 1
            if row >= len(df):
                continue
            date_str = df.iloc[row]['tradeDate']
            cur_close = df.iloc[row]['close']
            three_after_close = df.iloc[row]['three_after_close']
            three_chg = df.iloc[row]['three_chg']

            table_list.append([
                i,date_str,cur_close,three_after_close,three_chg
            ])
            duration_list.append([row-2,row+3])
            node_count += 1
            if three_chg>0:
                node_win +=1
            pass

        list_list.append({
            'ticker':ticker,
            'secName':secName,
            'count':node_count,
            'win':0 if node_count<=0 else round((node_win/node_count)*100,2)
        })
        detail_map[ticker] = {
            'table_list': table_list,
            'duration_list': duration_list
        }

        total_count += node_count
        total_win += node_win
        check_count += 1
        pass
    df = pd.DataFrame(list_list)

    results_data = {
        'check_count':check_count,
        'total_count':total_count,
        'total_win':0 if total_count<=0 else round((total_win/total_count)*100,2),
        'start_date_str':caculate_start_date_str,
        'df':df,
        'detail_map':detail_map
    }
    return results_data

结果

 本文校验的数据是随机抽取的81个股票

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【正点原子FPGA连载】 第一章 MPSoC简介 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第一章 MPSoC简介…

【Loadrunner】学习loadrunner——Controller与Analysis的使用(三)

文章目录1.controller的使用1.1.创建场景的方式1.2.页面的介绍1.3.场景的设置1.2.1.设置初始化1.2.2.设置启动机制1.2.3.设置性能测试脚本的执行时间1.2.4.设置虚拟用户推出机制1.3.场景的运行1.4.场景的运行方式1.4.1.按照场景的方式运行1.4.2.按照group运行2.analysis的使用2…

[数据结构] 图---图的邻接矩阵存储方式模拟实现,包括BFS广度优先遍历和DFS深度优先遍历(上)

图的邻接矩阵存储1&#xff09;邻接矩阵表示法相关概念实现基础框架Graph_matrix构造函数实现基础操作获取某一顶点的下标添加边打印邻接矩阵2&#xff09;BFS广度优先遍历3&#xff09;DFS深度优先遍历4&#xff09;最小生成树之克鲁斯卡尔算法5&#xff09;最小生成树之普里姆…

毕业设计opencv 图像识别 指纹识别 - python

文章目录0 前言1 课题背景2 效果展示3 具体实现3.1 图像对比过滤3.2 图像二值化3.3 图像侵蚀细化3.4 图像增强3.5 特征点检测4 OpenCV5 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往…

365天深度学习训练营-第6周:好莱坞明星识别

目录 一、前言 二、我的环境 三、代码实现 四、损失函数 1. binary_crossentropy&#xff08;对数损失函数&#xff09; 2. categorical_crossentropy&#xff08;多分类的对数损失函数&#xff09; 3. sparse_categorical_crossentropy&#xff08;稀疏性多分类的对数损…

关于编辑器QScintilla(Scintilla)词法分析器工作原理的分析(实现注释区分)

入门&#xff0c;首先看我这两篇博客&#xff1a;关于QScintilla库的入门大全https://biao2488890051.blog.csdn.net/article/details/126798996?spm1001.2014.3001.5502 正式开始&#xff0c;先来看看词法分析器和编辑器的关系&#xff1a; &#xff08;注意&#xff1a;如果…

李宏毅机器学习作业6-使用GAN生成动漫人物脸

理论部分参考&#xff1a;​李宏毅机器学习——对抗生成网络&#xff08;GAN&#xff09;_iwill323的博客-CSDN博客 目录 任务和数据集 评价方法 FID AFD (Anime face detection) rate DCGAN和WGAN 代码 导包 建立数据集 显示一些图片 模型设置 生成器 判别器 权…

火山引擎:数字化时代,如何给金融业注入“内容活水”?

数字化&#xff0c;已经成为中国经济的一架强劲发动机。 工业和信息化部统计显示&#xff0c;中国数字经济规模从2012年的11万亿元增长到2021年的超45万亿元&#xff0c;排名世界第二&#xff0c;数字经济占国内生产总值比重由21.6%提升至39.8%。 数据&#xff0c;是数字化的…

git可视化工具-idea插件使用

上一篇文章说了git的命令行操作&#xff0c;是不是还沉浸在命令行在指间跳跃的兴奋中&#xff0c;这一篇再说一说在idea中如何使用git&#xff0c;会让人更兴奋了&#xff0c;也许你会认为这会是最好用的方式的。我想说这只是最好用的方式之一。 1.功能入口 当我们在idea里想使…

键盘输入语句和位运算

键盘输入语句键盘输入语句案例&#xff1a;可以从控制台接收用户信息&#xff0c;【姓名&#xff0c;年龄&#xff0c;薪水】进制介绍案例&#xff1a;输出 二&#xff0c;十&#xff0c;八&#xff0c;十六进制的数据位运算原码、反码、补码位运算符java 中有 7 个位运算(&…

数字工业 弹性安全丨2022 Fortinet工业互联网安全发展峰会成功举办

随着数字化转型的持续推进&#xff0c;工业互联网的作用和地位日益加强。而 OT 安全作为工业互联网体系不可或缺的部分&#xff0c;虽然受到越来越多企业的关注&#xff0c;但仍然面临着多方面的挑战。11月16日&#xff0c;一年一度的 OT 安全盛会——2022 Fortinet工业互联网安…

算法设计与分析 SCAU11091 最优自然数分解问题(优先做)

11091 最优自然数分解问题&#xff08;优先做&#xff09; 时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC;VC;JAVA Description 问题描述&#xff1a;设n是一个正整数。 &#xff08;1&#xff09;现在将n分解为若干个互不相同的自然…

【毕业设计】电影评论情感分析 - GRU 深度学习

文章目录0 前言1 项目介绍2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测5 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&#xff01; &#x1f525; 对毕设有任何疑问都可以问学…

手机拍照模糊怎么办?拍摄低像素照片如何修复清晰?

相信有很多人在用手机拍摄照片时自认为应该非常精美&#xff0c;拍完后却发现它模糊不清&#xff01;最终遗憾地错过了精彩的瞬间&#xff0c;令人非常遗憾&#xff01;虽然手机不是专业的摄像机&#xff0c;拍摄时模糊在所难免。但是我们可以在前期尽量避免拍摄的照片模糊&…

感冒了吃抗生素有用吗?

点击蓝字 &#xff5c;关注我们 2023年《科学世界》杂志全年订阅现已开启。 现在订阅&#xff0c;立享7.5折&#xff0c;并赠送经典科普图书《从一到无穷大》。通过文末链接&#xff0c;即可登录“科学世界”微店订购。抗生素&#xff0c;简单地说就是杀死细菌的药物。更准确地…

从源码上看,RocketMQ 5.0 跟 RocketMQ 4.x相比增加了哪几个模块

今天来介绍一下 RocketMQ 5.0 源码上的变化。 RocketMQ 5.0 是一个里程碑式的版本&#xff0c;经历了近 5 年的打磨&#xff0c;代码变更达到 60%。 首先看一下源码中模块的变化&#xff0c;如下图&#xff1a; 从图中可以看到&#xff0c;RocketMQ 5.0 主要增加了 4 个模块儿…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园生活互助平台06qe4

对于即将毕业或者即将做课设的同学而言&#xff0c;由于经验的欠缺&#xff0c;面临的第一个难题就是选题&#xff0c;确定好题目之后便是开题报告&#xff0c;如果选题首先看自己学习那些技术&#xff0c;不同技术适合做不同的产品&#xff0c;比如自己会些简单的Java语言&…

DataScience:KNIME工具的简介、安装、使用方法之详细攻略

DataScience&#xff1a;KNIME工具的简介、安装、使用方法之详细攻略 目录 KNIME的简介—数据挖掘与分析工具 1、KNIME软件如何帮助您的数据分析? 1.1、Create 1.2、Productionize 2、KNIME Analytics Platform 3、KNIME Hub KNIME的安装 KNIME的使用方法 1、构建第一…

[附源码]java毕业设计领导干部听课评课管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【深入浅出Spring6】第四期——实例化Bean和Bean的生命周期

一、获取 Bean Spring 提供了多种实例化Bean的方式&#xff1a;【只是表现形式不同&#xff0c;底层都是通过构造方法创建对象的】 通过构造方法实例化 【最简单的方式直接声明bean】通过简单工厂模式实例化 【定义一个简单模式工厂&#xff0c;然后通过工厂的静态方法获得Bea…