python_寻找N字型下跌

目录

写在前面:

思路拆解:

代码:

验证:


写在前面:

1 由于日线骗线多,本文寻找N字型下跌形态在周线级别操作

2 N字型下跌形态,技术辅助寻找的点:

1)左连阴 + 连阳 + 右连阴

2)连阴 和 连阳 的K线个数要大于等于3

3)在连阴里面有一字或十字或T或倒T,可以,但不能有红

4)在连阳里面有一字或十字或T或倒T,可以,但不能有绿

思路拆解:

1 从优矿中下载前复权日数据,以“湖南投资 000548” 为例

2 从日数据中提取周数据

def m_000():columns_list = ['tradeDate', 'openPrice', 'highestPrice', 'lowestPrice', 'closePrice']pre_dir = r'E:/temp011/'file_path = pre_dir + '000548.xlsx'df = pd.read_excel(file_path,engine='openpyxl')df = df.loc[df['openPrice']>0].copy()df['o_date'] = pd.to_datetime(df['tradeDate'])week_group = df.resample('W-FRI', on='o_date')week_df = week_group.last()week_df['openPrice'] = week_group.first()['openPrice']week_df['lowestPrice'] = week_group.min()['lowestPrice']week_df['highestPrice'] = week_group.max()['highestPrice']week_df = week_df.loc[:, columns_list].copy()week_df.dropna(axis=0, how='any', subset=['closePrice'], inplace=True)week_df.to_excel(pre_dir + 'week.xlsx',engine='openpyxl')pass

3 思路

1)新增字段 row_i , 填充整型数列

2)新增字段 ext_1,标识阳线,阳线和收盘价开盘价一样的K线,记为1

3)新增字段 ext_2,标识阴线,阴线和收盘价开盘价一样的K线,记为1

4)将 ext_2 列每个数值与它的后一个数值相加,如果得数为2,说明相邻两个都为阴线

观察上图蓝色框、红色框、黄色框,都是连阴线,

ext_3 如果是 1 2 2,那这个1所在就是连阴线起始位置的前一个位置;

ext_3 如果是 2 2 1,那这个1所在就是连阴线结束位置

综上,

新增 yin_s,标识连阴线开始位置,连阴线开始位置,记为1

新增 yin_e,标识连阴线结束位置,连阴线结束位置,记为1

5) 为了方便说明,增加两个临时列,yin_s0,yin_e0, yin_s0=yin_s列的累加,yin_e0=yin_e列的累加,yin_s0和yin_e0的值正好是对应出现1的次数,也就是出现第几次的序号

蓝色框是第一次出现连阴,yin_s0和yin_e0的值为1;

红色框是第二次出现连阴,yin_s0和yin_e0的值为2;

黄色框是第三次出现连阴,yin_s0和yin_e0的值为3;

综上,

yin_s和yin_e 序号一样的对应位置,正好是一个连阴的起点位置和终点位置,由此,可以获得每个连阴线的位置

6)N字型下跌,为连阴+连阳+连阴,已经找出所有连阴的位置,因此,只要校验两两连阴之间是否为连阳即可

ext_1 ==1 则为阳,那在两个连阴之间的间隔K线对应的 ext_1都为1的话,那就是连阳,对应到panda就是 两个连阴之间 ext_1的累加和等于间隔数据个数,那就是连阳

代码:

# 周线N字下跌
def m_001():file_path = r'E:/temp011/week.xlsx'df = pd.read_excel(file_path,engine='openpyxl')df = df.loc[:,['tradeDate','openPrice','closePrice','highestPrice','lowestPrice']].copy()df['row_i'] = [i for i in range(len(df))]df['ext_0'] = df['closePrice']-df['openPrice']df['ext_1'] = 0 # 阳线df.loc[df['ext_0']>=0,'ext_1'] = 1df['ext_2'] = 0 # 阴线df.loc[df['ext_0']<=0,'ext_2'] = 1# 寻找连阴df['ext_3'] = df['ext_2'] + df['ext_2'].shift(-1)df['yin_s'] = 0 # 连阴开始位置df.loc[(df['ext_3']==1) & (df['ext_3'].shift(-1)==2) & (df['ext_3'].shift(-2)==2),'yin_s'] = 1df['yin_e'] = 0 # 连阴结束位置df.loc[(df['ext_3']==1) & (df['ext_3'].shift(1)==2) & (df['ext_3'].shift(2)==2),'yin_e'] = 1# temp sdf['yin_s0'] = df['yin_s'].cumsum()df['yin_e0'] = df['yin_e'].cumsum()# temp edf_s = df.loc[df['yin_s']==1].copy()df_e = df.loc[df['yin_e']==1].copy()df_s['row_i0'] = [i for i in range(len(df_s))]df_e['row_i0'] = [i for i in range(len(df_e))]df_s.reset_index(inplace=True)df_e.reset_index(inplace=True)s_max = len(df_s)-1e_max = len(df_e)-1res_list = []for i in range(len(df_e)):if (i+1)>s_max or i>e_max:breake_one = df_e.loc[df_e['row_i0']==i].copy()s_one = df_s.loc[df_s['row_i0']==(i+1)].copy()e_row = e_one.iloc[0]['row_i']s_row = s_one.iloc[0]['row_i']if s_row-e_row<4:continuedf_one = df.loc[(df['row_i']>e_row) & (df['row_i']<s_row)].copy()df_one.reset_index()df_one['sum'] = df_one['ext_1'].cumsum()if df_one.iloc[-1]['sum'] == len(df_one):# 连阳s_p = df_s.loc[df_s['row_i0']==i].iloc[0]['row_i']e_p = df_e.loc[df_e['row_i0']==(i+1)].iloc[0]['row_i']res_list.append([s_p,e_p])passpassprint(res_list)pass

 结果:[[828, 842], [888, 908]]

即,有两个N字型下跌,第一个起点row_i=828,结束row_i=842;第二个起点row_i=888,结束row_i=908

验证:

第一个 2010年9月10日 到 2010年12月10日

 

第二个 2011年11月11日 到 2012年3月30日

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GoLong的学习之路(番外)如何使用依赖注入工具:wire

我为什么要直接写番外呢&#xff1f;其原因很简单。项目中会使用&#xff0c;其实在这里大家就可以写一些项目来了。 依赖注入的工具本质思想其实都大差不差。无非控制反转和依赖注入。 文章目录 控制反转为什么需要依赖注入工具 wire的概念提供者&#xff08;provider&#x…

开放式耳机能保护听力吗?开放式耳机有哪些优缺点?

先说答案&#xff0c;开放式耳机是可以保护听力的&#xff01; 想要了解开放式耳机是否能保护听力&#xff0c;就要先知道什么是开放式耳机&#xff0c;开放式耳机是一种无需入耳&#xff0c;并且使用时不会堵塞耳道&#xff0c;也不会隔绝外界声音的蓝牙耳机。 一、开放式耳…

Leetcode刷题详解——组合

1. 题目链接&#xff1a;77. 组合 2. 题目描述&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[…

性能测试知多少---了解前端性能

我的上一篇博文中讲到了响应时间&#xff0c;我们在做性能测试时&#xff0c;能过工具可以屏蔽客户端呈现时间&#xff0c;通过局域网的高宽带可以忽略数据传输速度的障碍。这并不是说他们不会对系统造成性能影响。相反&#xff0c;从用户的感受来看&#xff0c;虽然传输速度受…

深度学习_9_图片分类数据集

散装代码&#xff1a; import matplotlib.pyplot as plt import torch import torchvision from torch.utils import data from torchvision import transforms from d2l import torch as d2ld2l.use_svg_display()# 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式…

pix2tex - LaTeX OCR 安装使用记录

系列文章目录 文章目录 系列文章目录前言一、安装二、使用三、少侠请留步&#xff0c;点赞、收藏、关注 前言 项目地址&#xff1a;这儿 一、安装 版本要求 Python: 3.7 PyTorch: >1.7.1 安装&#xff1a;pip install "pix2tex[gui]" 注意&#xff1a;Pyside6…

领域认知智能走向落地,B端企业还缺些啥?

大模型如何为我所用&#xff1f; 这是当下B端众多企业都在深入思考的一个问题。今年以来&#xff0c;大模型在办公、对话、搜索等领域所展现出的强大能力&#xff0c;让越来越多B端企业意识到大模型对于业务的巨大价值。 因此&#xff0c;领域认知智能迅速成为B端企业关注的焦…

2-爬虫-代理池搭建、代理池使用(搭建django后端测试)、爬取某视频网站、爬取某视频网站、bs4介绍和遍历文档树

1 代理池搭建 2 代理池使用 2.1 搭建django后端测试 3 爬取某视频网站 4爬取某视频网站 5 bs4介绍和遍历文档树 1 代理池搭建 # ip代理-每个设备都会有自己的IP地址-电脑有ip地址---》访问一个网站---》访问太频繁---》封ip-收费&#xff1a;靠谱稳定--提供api-免费&#xff…

Apache Doris (五十二): Doris Join类型 - Broadcast Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. Broadcast Join原理

freertos多任务

以前我们都是一个任务&#xff0c;假设现在我们创建三个任务,项目工程在上一节网盘 #include "stm32f10x.h" // Device header #include "freertos.h" #include "task.h" #include "usart.h"TaskHandle_t myTaskHan…

Codeforces Round 906 (Div. 2--ABC)

A.Doremys Paint 3 题目 一个元素全为整数的数组&#xff0c;如果满足相邻两个元素和相同&#xff0c;我们就认定此数组is good。给定一个长度为n的数组a&#xff0c;可以任意改变元素顺序&#xff0c;判定数组a是否is good。 输入 首行t测试数据数量&#xff0c; 每组数据…

新一代构建工具Vite-xyphf

一、什么vite? vite:是一款思维比较前卫而且先进的构建工具,他解决了一些webpack解决不了的问题——在开发环境下可以实现按需编译&#xff0c;加快了开发速度。而在生产环境下&#xff0c;它使用Rollup进行打包&#xff0c;提供更好的tree-shaking、代码压缩和性能优化&…