策略验证_卖出口诀_三线相约下山前景不同乐观

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

目录

解说

策略代码

结果


解说

        所谓“三线相约下山,前景不容乐观”,是指股价高位时,移动均线5日、10日、20日三线都一起有向下的走向,且5日线和10日线分别向下交叉20日均线。这是典型见顶信号,表明短中长线均不看好后市。

         出现“三线相约下山,前景不容乐观”的形态后,股票投资者需遵循以下操作原则。

        1)出现在上升行情末期时,下跌空间较大。出现在整理行情的波段顶部时,是短线高抛低吸做差价的好机会,当然新手需要更加谨慎。

        2)三线必须靠得较近扭在一起本形态才成立,且靠得越近有效性越高,其中有一条隔得较远时则非本形态。

提示:如该形态出现在股市剧烈震荡行情中,可采用“高抛低吸”的策略。但是对于新股民而言,不便参与,需谨慎对待。

策略代码

import pandas as pd
import math
import talib

def caculate_factor(df,code):
    ori_column = df.columns.values.tolist()
    if code == 'RSI':
        df['rsi'] = talib.RSI(df['closePrice'], timeperiod=14)
        ori_column.append('rsi')
    if code == 'OBV':
        df['obv'] = talib.OBV(df['closePrice'],df['turnoverVol'])
        ori_column.append('obv')
    if code == 'MACD':
        df['DIFF'], df['DEA'], df['MACD'] = talib.MACD(df['closePrice'], fastperiod=12, slowperiod=26, signalperiod=9)
        ori_column.append('DIFF')
        ori_column.append('DEA')
        ori_column.append('MACD')
        pass
    if code == 'KDJ':
        df['kdj_k'], df['kdj_d'] = talib.STOCH(df['highestPrice'], df['lowestPrice'], df['closePrice'], fastk_period=5,
                                               slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)
        df['kdj_j'] = 3 * df['kdj_k'] - 2 * df['kdj_d']
        ori_column.append('kdj_k')
        ori_column.append('kdj_d')
        ori_column.append('kdj_j')
        pass
    if code == 'SAR':
        df['sar'] = talib.SAR(df['highestPrice'], df['lowestPrice'])

        ori_column.append('sar')
        pass
    if code == 'VOL':
        df['vol5'] = talib.MA(df['turnoverVol'], timeperiod=5)
        df['vol10'] = talib.MA(df['turnoverVol'], timeperiod=10)

        ori_column.append('vol5')
        ori_column.append('vol10')
        pass
    if code == 'PSY':
        df['ext_0'] = df['closePrice'] - df['closePrice'].shift(1)
        df['ext_1'] = 0
        df.loc[df['ext_0'] > 0, 'ext_1'] = 1
        df['ext_2'] = df['ext_1'].rolling(window=12).sum()
        df['psy'] = (df['ext_2'] / 12.0) * 100
        ori_column.append('psy')
        pass
    if code == 'ARBR':
        df['h_o'] = df['highestPrice'] - df['openPrice']
        df['o_l'] = df['openPrice'] - df['lowestPrice']
        df['h_o_sum'] = df['h_o'].rolling(window=26).sum()
        df['o_l_sum'] = df['o_l'].rolling(window=26).sum()
        df['ar'] = (df['h_o_sum'] / df['o_l_sum']) * 100
        df['h_c'] = df['highestPrice'] - df['closePrice']
        df['c_l'] = df['closePrice'] - df['lowestPrice']
        df['h_c_sum'] = df['h_c'].rolling(window=26).sum()
        df['c_l_sum'] = df['c_l'].rolling(window=26).sum()
        df['br'] = (df['h_c_sum'] / df['c_l_sum']) * 100
        ori_column.append('ar')
        ori_column.append('br')
        pass
    if code == 'CR':
        df['m_price'] = (df['highestPrice'] + df['lowestPrice']) / 2
        df['h_m'] = df['highestPrice'] - df['m_price'].shift(1)
        df['m_l'] = df['m_price'].shift(1) - df['lowestPrice']
        df['h_m_sum'] = df['h_m'].rolling(window=26).sum()
        df['m_l_sum'] = df['m_l'].rolling(window=26).sum()
        df['cr'] = (df['h_m_sum'] / df['m_l_sum']) * 100
        df['ma1'] = talib.MA(df['cr'], timeperiod=5)
        df['ma2'] = talib.MA(df['cr'], timeperiod=10)
        df['ma3'] = talib.MA(df['cr'], timeperiod=20)
        ori_column.append('cr')
        ori_column.append('ma1')
        ori_column.append('ma2')
        ori_column.append('ma3')
        pass
    if code == 'EMV':
        df['a'] = (df['highestPrice'] + df['lowestPrice']) / 2
        df['b'] = (df['highestPrice'].shift(1) + df['lowestPrice'].shift(1)) / 2
        df['c'] = df['highestPrice'] - df['lowestPrice']
        df['em'] = (df['a'] - df['b']) * df['c'] / df['turnoverValue']
        df['emv'] = df['em'].rolling(window=14).sum()
        df['emva'] = talib.MA(df['emv'], timeperiod=9)

        ori_column.append('em')
        ori_column.append('emv')
        ori_column.append('emva')
        pass
    if code == 'BOLL':
        df['upper'], df['mid'], df['lower'] = talib.BBANDS(df['closePrice'], timeperiod=20, nbdevup=2, nbdevdn=2,
                                                           matype=0)
        ori_column.append('upper')
        ori_column.append('mid')
        ori_column.append('lower')
        pass
    if code == 'TRIX':
        df['trix'] = talib.TRIX(df['closePrice'], timeperiod=12)
        df['trma'] = talib.MA(df['trix'], timeperiod=20)

        ori_column.append('trix')
        ori_column.append('trma')
        pass
    if code == 'DMA':
        df['ma10'] = talib.MA(df['closePrice'], timeperiod=10)
        df['ma50'] = talib.MA(df['closePrice'], timeperiod=50)
        df['ddd'] = df['ma10'] - df['ma50']
        df['ama'] = talib.MA(df['ddd'], timeperiod=10)

        ori_column.append('ddd')
        ori_column.append('ama')
        pass
    if code == 'BIAS':
        df['ma6'] = talib.MA(df['closePrice'], timeperiod=6)
        df['ma12'] = talib.MA(df['closePrice'], timeperiod=12)
        df['ma24'] = talib.MA(df['closePrice'], timeperiod=24)
        df['bias'] = ((df['closePrice'] - df['ma6']) / df['ma6']) * 100
        df['bias2'] = ((df['closePrice'] - df['ma12']) / df['ma12']) * 100
        df['bias3'] = ((df['closePrice'] - df['ma24']) / df['ma24']) * 100

        ori_column.append('bias')
        ori_column.append('bias2')
        ori_column.append('bias3')
        pass
    if code == 'CCI':
        df['cci'] = talib.CCI(df['highestPrice'], df['lowestPrice'], df['closePrice'], timeperiod=14)
        ori_column.append('cci')
        pass
    if code == 'W%R':
        n = 10
        df['h_10'] = df['highestPrice'].rolling(window=n).max()
        df['l_10'] = df['lowestPrice'].rolling(window=n).min()
        df['wr10'] = ((df['h_10'] - df['closePrice']) / (df['h_10'] - df['l_10'])) * 100
        n2 = 6
        df['h_6'] = df['highestPrice'].rolling(window=n2).max()
        df['l_6'] = df['lowestPrice'].rolling(window=n2).min()
        df['wr6'] = ((df['h_6'] - df['closePrice']) / (df['h_6'] - df['l_6'])) * 100
        ori_column.append('wr10')
        ori_column.append('wr6')
        pass
    if code == 'ROC':
        df['roc'] = talib.ROC(df['closePrice'], timeperiod=12)
        df['rocma'] = talib.MA(df['roc'], timeperiod=6)

        ori_column.append('roc')
        ori_column.append('rocma')
        pass
    if code == 'DMI':
        df['pdi'] = talib.PLUS_DI(df['highestPrice'], df['lowestPrice'], df['closePrice'], timeperiod=14)
        df['mdi'] = talib.MINUS_DI(df['highestPrice'], df['lowestPrice'], df['closePrice'], timeperiod=14)
        df['adx'] = talib.ADX(df['highestPrice'], df['lowestPrice'], df['closePrice'], timeperiod=6)
        df['adxr'] = talib.ADXR(df['highestPrice'], df['lowestPrice'], df['closePrice'], timeperiod=6)

        ori_column.append('pdi')
        ori_column.append('mdi')
        ori_column.append('adx')
        ori_column.append('adxr')
        pass
    if code == 'ma5':
        df['ma5'] = talib.MA(df['closePrice'], timeperiod=5)
        ori_column.append('ma5')
        pass

    if code == 'ma10':
        df['ma10'] = talib.MA(df['closePrice'], timeperiod=10)
        ori_column.append('ma10')
        pass
    if code == 'ma20':
        df['ma20'] = talib.MA(df['closePrice'], timeperiod=20)
        ori_column.append('ma20')
        pass
    res_df = df.loc[:,ori_column].copy()
    return res_df

结果

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值