返回列表 发布新帖

综合交易模型:W底识别,支持股债基,提供源代码

1221 0
发表于 2024-10-19 20:40:33 | 显示全部楼层 阅读模式

最近在写形态分析,目前综合交易模型还支持行业概念,行业成分股等

行业成分股分析识别游戏

文化传媒

分析的原理

双重底是经典的形态选股策略,市场认可度比较高。要准确的实现双重底,还是需要一定的计算量,根据算法的灵活度越大,计算量越大。

算法自定义词汇说明:

  1. 以实际交易日期为X横坐标,某只股票的价格为Y纵坐标; 2. 一个交易日,就会出现一条K线。以当前需要回测的日期为终点,往历史时间选择一个大区间N天;
  2. 将大区间一分为二,简化处理,两个小区间完全相等,分别包含N/2条K线。命名为:可变化区间1,可变化区间2,简称区间1,区间2.

算法实现过程:

<pre class="public-DraftStyleDefault-pre" data-offset-key="146qn-0-0"><pre class="Editable-styled" data-block="true" data-editor="en50e" data-offset-key="146qn-0-0"><div data-offset-key="146qn-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="146qn-0-0"><span data-text="true"># 1. 找区间1的极小值,为左底

2. 找区间2的极小值,为右底

3. 找左底与右底之间区域的极大值

4. 比较左底与右底的涨幅,是否相差<3%

5. 比较左底与右底的macd值,是否形成底背离

6. 终点日期收盘价,是否突破颈线位

以下条件可选

7. 比较左底与右底的成交额,是否左底成交额>右底成交额

8. 比较左底与极大值之间涨跌幅,是否>N%(判断颈线位幅度)

9. 比较左底与右底之间,是否出现过涨停(判断股性活跃程度)

10. 其他</span></span></div></pre></pre>

里面有一个参数n可用选择不同的时间一般40-60

程序分析的效果比如股票 002368

对比同花顺

可转债

123205

对比同花顺

etf基金

159869

对比同花顺

长周期比如120日

结果

调用例子的源代码

<pre class="public-DraftStyleDefault-pre" data-offset-key="lju9-0-0"><pre class="Editable-styled" data-block="true" data-editor="en50e" data-offset-key="lju9-0-0"><div data-offset-key="lju9-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="lju9-0-0"><span data-text="true">#统一数据接口,支持股票,可转债,etf from trader_tool.unification_data import unification_data data=unification_data(trader_tool='qmt') data=data.get_unification_data()

行业板块数据

东方财富

from stock_industry_data.stock_industry_em_data import stock_industry_em_data

同花顺行业数据

from stock_industry_data.stock_industry_ths_data import stock_industry_ths_data industry_data=stock_industry_em_data()

形态分析

from stock_pattern_recognition.stock_pattern_recognition import stock_pattern_recognition

获取数据

通达信数据

from trader_tool.tdx_data import tdx_data tdx_data=tdx_data() tdx_data.connect()

股票

stock='002368' df=data.get_hist_data_em(stock=stock)

show显示分析结果股票

models=stock_pattern_recognition(df=df,show=True,name=stock) print(models.get_stock_w_bottom(n=120))

可转债

stock='123205' df=data.get_hist_data_em(stock=stock)

show显示分析结果股票

models=stock_pattern_recognition(df=df,show=True,name=stock) print(models.get_stock_w_bottom(n=120))

ETF

stock='159869' df=data.get_hist_data_em(stock=stock)

show显示分析结果股票

models=stock_pattern_recognition(df=df,show=True,name=stock) print(models.get_stock_w_bottom(n=120))

</span></span></div></pre></pre>

综合交易模型计算的源代码

<pre class="public-DraftStyleDefault-pre" data-offset-key="2ge7u-0-0"><pre class="Editable-styled" data-block="true" data-editor="en50e" data-offset-key="2ge7u-0-0"><div data-offset-key="2ge7u-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="2ge7u-0-0"><span data-text="true">def get_stock_w_bottom(self,n=60): ''' W底 n整数

1. 找区间1的极小值,为左底

    # 2. 找区间2的极小值,为右底
    # 3. 找左底与右底之间区域的极大值
    # 4. 比较左底与右底的涨幅,是否相差<3%
    # 5. 比较左底与右底的macd值,是否形成底背离
    # 6. 终点日期收盘价,是否突破颈线位
    # 以下条件可选
    # 7. 比较左底与右底的成交额,是否左底成交额>右底成交额
    # 8. 比较左底与极大值之间涨跌幅,是否>N%(判断颈线位幅度)
    # 9. 比较左底与右底之间,是否出现过涨停(判断股性活跃程度)
    # 10. 其他
    算法自定义词汇说明:
    1. 以实际交易日期为X横坐标,某只股票的价格为Y纵坐标;
    2. 一个交易日,就会出现一条K线。以当前需要回测的日期为终点,往历史时间选择一个大区间N天;
    3. 将大区间一分为二,简化处理,两个小区间完全相等,分别包含N/2条K线。命名为:可变化区间1,可变化区间2,简称区间1,区间2.
    ————————————————
    '''
    try:
        #一半的数据
        n_2=int(n/2)
        #最近N天
        df=self.df[-n:]
        #价格列表
        close_list=df['close'].tolist()
        #开始的价格
        open_price=close_list[0]
        #现在的价格
        last_price=close_list[-1]
        #左边的数据
        left_df=df[-n:-n_2]
        #右边的数据
        right_df=df[-n_2:]
        # 1. 找区间1的极小值,为左底
        #左边的最小值
        left_min_value=min(left_df['close'].tolist())
        #最小值的位置
        left_min_value_index=close_list.index(left_min_value)
        # 2. 找区间2的极小值,为右底
        #右边的最小值
        right_min_value=min(right_df['close'].tolist())
        #右边最小值的位置
        right_min_value_index=close_list.index(right_min_value)
        # 3. 找左底与右底之间区域的极大值
        #中间最大的价格,是否突破颈线位
        middle_max_value=max(df[left_min_value_index:right_min_value_index]['close'].tolist())
        # 4. 比较左底与右底的涨幅,是否相差<3%,不同周期不一样
        up_and_down=((right_min_value-left_min_value)/left_min_value)*100
        # 5. 比较左底与右底的macd值,是否形成底背离
        # 6. 终点日期收盘价,是否突破颈线位
        break_through=''
        if last_price>=middle_max_value:
            break_through=True
        else:
            break_through=False
        # 以下条件可选
        # 7. 比较左底与右底的成交额,是否左底成交额>右底成交额
        left_volume=left_df['volume'].sum()
        right_volume=right_df['volume'].sum()
        trading_volume=''
        if left_volume>=right_volume:
            trading_volume=True
        else:
            trading_volume=False
        # 8. 比较左底与极大值之间涨跌幅,是否>N%(判断颈线位幅度)
        # 9. 比较左底与右底之间,是否出现过涨停(判断股性活跃程度)
        df['涨停']=df['涨跌幅'].apply(lambda x: '涨停' if round(x)==10 else '不涨停')
        limt_stats=''
        if df[df['涨停']=='涨停'].shape[0]>0:
            limt_stats=True
        else:
            limt_stats=False
        #目前颈线位核限制价格的涨跌幅
        mid_return=((last_price-middle_max_value)/middle_max_value)*100
        #通用我w底,其他的条件可以自己价
        #绘制突破
        if self.show==True:
            w_list=[]
            for i in close_list:
                if i in [open_price,last_price,left_min_value,right_min_value,middle_max_value]:
                    w_list.append(i)
                else:
                    w_list.append(None)
            self.plot_kline_figure(df=df,name_list=['底','线'],data_type=['点','线'],data_list=[w_list,middle_max_value,df['close'].tolist()])
        else:
            pass
        if left_min_value<=right_min_value and mid_return>=3:
            return True
        else:
            return False
    except:
        return False</span></span></div></pre></pre>

源代码+交易模型领取、QMT开通、策略分享、问题答疑,评论区留言或私信。

回复

您需要登录后才可以回帖 登录 | 立即注册

客服专线

400-080-8112

用思考的速度交易,用真诚的态度合作,我们是认真的!
  • 关注公众号
  • 添加微信客服
Copyright © 2001-2025 迅投QMT社区 版权所有 All Rights Reserved. 蜀ICP备19002686号-2
关灯 快速发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表