写在前面:
1. 本文中提到的“K线形态查看工具”的具体使用操作请查看该博文;
2. K线形体所处背景,诸如处在上升趋势、下降趋势、盘整等,背景内容在K线形态策略代码中没有体现;
3. 文中知识内容来自书籍《K线技术分析》by邱立波。
目录
跳空下跌三颗星出现在连续下跌的过程中,三根小阴线与前一根K线留有一个向下跳空缺口,且开盘价和收盘价处在差不多的价格区域。

1)出现在连续下跌的过程中。
2)由三根开盘价和收盘价都处在差不多价格位置的小阴线组成。
3)三根小阴线和前一根K线有一个向下的跳空缺口。
跳空下跌三颗星是见底信号。
跳空下跌三颗星出现在下跌趋势中,先收出一根阴线,预示下跌仍在持续。然后连续三天收出小阴线,但股价或指数却没有跌下去,表明空方的气力将竭,难以继续对多方行使统治权,预示市场可能正在筑底,是见底信号。
该形态不是买入信号,股价或指数是否见底,仍需后市的走势验证。而且收出跳空下跌三颗星形态时,股价或指数依然处在下降趋势当中,未有任何实质性的改变,故交易者只可密切关注,不能盲目买进。
有一些交易者认为,股价或指数见底时买入,很显然比趋势已经确立,正处在上涨途中时买入价格更低,利润更大。但他们忽略了一个很重要的问题:趋势技术分析所得出的结论都只是一种概率。所谓的见底或见顶信号,仅仅表明概率上的大小。同时,由于交易者分析的交易周期长短不同,以及同一时期大盘和行业板块长期趋势的影响,这种概率并非是一成不变。所以K线发出见底信号,交易者不必马上介入。
但是基于风险控制的原因,股价收出见顶信号的K线形态,交易者可以立即减仓或清仓。
- def excute_strategy(daily_file_path):
- '''
- 名称:跳空下跌三颗星
- 识别:
- 1. 由三根开盘价和收盘价都处在差不多价格位置的小阴线组成
- 2. 三根小阴线和前一根K线有一个向下的跳空缺口
- 自定义:
- 1. 开处在差不多价格位置 =》参差不超过1%
- 前置条件:计算时间区间 2021-01-01 到 2022-01-01
- :param daily_file_path: 股票日数据文件路径
- :return:
- '''
- import pandas as pd
- import os
-
- start_date_str = '2022-01-01'
- end_date_str = '2023-01-01'
- df = pd.read_csv(daily_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'] >= start_date_str) & (df['o_date']<=end_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']
-
- # 开始计算
- df['type'] = 0
- df.loc[df['closePrice'] >= df['openPrice'], 'type'] = 1
- df.loc[df['closePrice'] < df['openPrice'], 'type'] = -1
-
- df['body_length'] = abs(df['closePrice']-df['openPrice'])
-
- df['small_body_type'] = 0
- df.loc[(df['type']==-1) & (df['body_length']/df['closePrice'].shift(1)>0.005) & (df['body_length']/df['closePrice'].shift(1)<0.015),'small_body_type'] = 1
- df['three_yeah'] = 0
- df.loc[(df['small_body_type']==1) & (df['small_body_type'].shift(-1)==1) & (df['small_body_type'].shift(-2)==1),'three_yeah'] = 1
- df['gap_yeah'] = 0
- df.loc[(df['three_yeah']==1) & (df['type'].shift(1)==1) & (df['openPrice'].shift(1)-df['openPrice']>0),'gap_yeah'] = 1
- df.loc[(df['three_yeah']==1) & (df['type'].shift(1)==-1) & (df['closePrice'].shift(1)-df['openPrice']>0),'gap_yeah'] = 1
-
- df['signal'] = 0
- df['signal_name'] = ''
- cenci_len = 0.01
- df.loc[(df['gap_yeah']==1) & ((abs(df['openPrice']-df['openPrice'].shift(-1)))/df['body_length']
abs(df['openPrice']-df['openPrice'].shift(-2)))/df['body_length']'signal'] = 1 - df.loc[(df['gap_yeah']==1) & ((abs(df['closePrice']-df['closePrice'].shift(-1)))/df['body_length']
abs(df['closePrice']-df['closePrice'].shift(-2)))/df['body_length']'signal'] = 1 -
- file_name = os.path.basename(daily_file_path)
- title_str = file_name.split('.')[0]
-
- line_data = {
- 'title_str':title_str,
- 'whole_header':['日期','收','开','高','低'],
- 'whole_df':df,
- 'whole_pd_header':['tradeDate','closePrice','openPrice','highestPrice','lowestPrice'],
- 'start_date_str':start_date_str,
- 'end_date_str':end_date_str,
- 'signal_type':'duration',
- 'duration_len':[-1],
- 'temp':len(df.loc[df['signal']==1])
- }
- return line_data
