返回列表 发布新帖

综合交易模型:自定义固收+ETF趋势择时策略,支持同花顺,qmt

1404 0
发表于 2024-10-19 20:37:49 | 显示全部楼层 阅读模式

程序目前支持自定义交易股票池,我自定义一个自定义固收+ETF趋势择时策略,我选择了市场年化比较高的ETF,固收选择了国债ETF,我单独开发了一个ETF分析框架,部分内容,分析框架用了统一 的分析的趋势模块

<pre class="public-DraftStyleDefault-pre" data-offset-key="du7fb-0-0"><pre class="Editable-styled" data-block="true" data-editor="am7s1" data-offset-key="du7fb-0-0"><div data-offset-key="du7fb-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="du7fb-0-0"><span data-text="true">def getindex**ysis_models_data(self,index_stock=['511010','515220','513100','501018','159937'], index_name=['国债ETF','煤炭ETF','纳斯达克','原油','黄金']): ''' 指数基金收益分析 '''

index_stock=['159915', '510300', '510500', '510050', '159902', '515220', '512880', '159865', '512660', '512290', '512720', '515880', '510230', '159996', '515210', '515170', '159967', '513330', '515030', '159995', '512170', '516020', '512800', '515000', '515260', '516800', '511010', '511260', '510900', '513500', '513100']

    #index_name=['创业板指ETF', '沪深300ETF', '中证500ETF', '上证50ETF', '中小板ETF', '煤炭ETF', '证券ETF', '养殖ETF', '军工ETF', '生物医药ETF', '计算机ETF', '通信ETF', '金融ETF', '家电ETF', '钢铁ETF', '食品饮料ETF', '创成长ETF', '恒生互联网ETF', '新能源车ETF', '芯片ETF', '医疗ETF', '化工ETF', '银行ETF', '科技ETF', '电子ETF', '智能制造ETF', '国债ETF', '十年国债ETF', 'H股ETF', '标普500ETF', '纳指100ETF']
    #最新价
    price_list=[]
    #涨跌幅
    zdf_list=[]
    #5年涨跌幅
    year_5_zdf_list=[]
    #3年
    year_3_zdf_list=[]
    #2年
    year_2_zdf_list=[]
    #1年
    year_1_zdf_list=[]
    #6个月
    moth_6_zdf_list=[]
    #3个月
    moth_3_zdf_list=[]
    #1个月
    moth_1_zdf_list=[]
    df=pd.DataFrame()
    for i in tqdm(range(len(index_stock))):
        try:
            stock=index_stock[i]
            hist=self.data.get_hist_data_em(start_date='20160101',stock=stock,limit=100000000000)
            price=hist['close'].tolist()[-1]
            price_list.append(price)
            zdf=hist['涨跌幅'].tolist()[-1]
            zdf_list.append(zdf)
            year_5_zdf=hist[-1250:]['close'].pct_change().cumsum().tolist()[-1]
            year_5_zdf_list.append(year_5_zdf)
            year_3_zdf=hist[-750:]['close'].pct_change().cumsum().tolist()[-1]
            year_3_zdf_list.append(year_3_zdf)
            year_2_zdf=hist[-500:]['close'].pct_change().cumsum().tolist()[-1]
            year_2_zdf_list.append(year_2_zdf)
            year_1_zdf=hist[-250:]['close'].pct_change().cumsum().tolist()[-1]
            year_1_zdf_list.append(year_1_zdf)
            moth_6_zdf=hist[-120:]['close'].pct_change().cumsum().tolist()[-1]
            moth_6_zdf_list.append(moth_6_zdf)
            moth_3_zdf=hist[-60:]['close'].pct_change().cumsum().tolist()[-1]
            moth_3_zdf_list.append(moth_3_zdf)
            moth_1_zdf=hist[-20:]['close'].pct_change().cumsum().tolist()[-1]
            moth_1_zdf_list.append(moth_1_zdf)
        except:
            #最新价
            print(stock,"失败")
            price_list.append(0)
            #涨跌幅
            zdf_list.append(0)
            #5年涨跌幅
            year_5_zdf_list.append(0)
            #3年
            year_3_zdf_list.append(0)
            #2年
            year_2_zdf_list.append(0)
            #1年
            year_1_zdf_list.append(0)
            #6个月
            moth_6_zdf_list.append(0)
            #3个月
            moth_3_zdf_list.append(0)
            #1个月
            moth_1_zdf_list.append(0)
    df['ETF代码']=index_stock
    df['ETF名称']=index_name
    df['最新价']=price_list
    df['涨跌幅']=zdf_list
    df['1个月涨跌幅']=moth_1_zdf_list
    df['3个月涨跌幅']=moth_3_zdf_list
    df['6个月涨跌幅']=moth_6_zdf_list
    df['1年涨跌幅']=year_1_zdf_list
    df['2年涨跌幅']=year_2_zdf_list
    df['3年涨跌幅']=year_3_zdf_list
    df['5年涨跌幅']=year_5_zdf_list
    df['涨跌幅']=df['涨跌幅'].apply(lambda x:str(round(x*100,2))+'%')
    df['1个月涨跌幅']=df['1个月涨跌幅'].apply(lambda x:str(round(x*100,2))+'%')
    df['3个月涨跌幅']=df['3个月涨跌幅'].apply(lambda x:str(round(x*100,2))+'%')
    df['6个月涨跌幅']=df['6个月涨跌幅'].apply(lambda x:str(round(x*100,2))+'%')
    df['1年涨跌幅']=df['1年涨跌幅'].apply(lambda x:str(round(x*100,2))+'%')
    df['2年涨跌幅']=df['2年涨跌幅'].apply(lambda x:str(round(x*100,2))+'%')
    df['3年涨跌幅']=df['3年涨跌幅'].apply(lambda x:str(round(x*100,2))+'%')
    df['5年涨跌幅']=df['5年涨跌幅'].apply(lambda x:str(round(x*100,2))+'%')
    df=df[['ETF代码','ETF名称','1个月涨跌幅','3个月涨跌幅','6个月涨跌幅',
            '1年涨跌幅','2年涨跌幅','3年涨跌幅','5年涨跌幅']]
    #df.to_excel(r'ETF数据.xlsx')
    return df</span></span></div></pre></pre>

自定义交易股票池支持,etf,可转债,股票,自定义交易股票池只需要证券代码

<pre class="public-DraftStyleDefault-pre" data-offset-key="84k47-0-0"><pre class="Editable-styled" data-block="true" data-editor="am7s1" data-offset-key="84k47-0-0"><div data-offset-key="84k47-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="84k47-0-0"><span data-text="true">证券代码 名称 511010 国债ETF 515220 煤炭ETF 513100 纳斯达克 501018 原油 159937 黄金

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

我们对组合进行分析8年的数据,支持自定义ETF

<pre class="public-DraftStyleDefault-pre" data-offset-key="dfcbk-0-0"><pre class="Editable-styled" data-block="true" data-editor="am7s1" data-offset-key="dfcbk-0-0"><div data-offset-key="dfcbk-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="dfcbk-0-0"><span data-text="true"> ETF代码 ETF名称 1个月涨跌幅 3个月涨跌幅 6个月涨跌幅 1年涨跌幅 2年涨跌幅 3年涨跌幅 5年涨跌幅 0 511010 国债ETF 0.04% -0.0% 0.57% 2.4% 5.58% 8.78% 14.88% 1 515220 煤炭ETF 9.99% 9.72% 17.92% 6.51% 43.71% 106.45% 123.28% 2 513100 纳斯达克 3.35% 1.06% 9.45% 31.31% 14.12% 37.21% 97.63% 3 501018 原油 -5.62% -4.66% 11.96% -2.42% 38.8% 101.92% 11.86% 4 159937 黄金 0.07% 2.36% 5.25% 15.88% 21.94% 16.87% 57.34%

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

组合的分析

年华9%差不多,程序还有趋势交易

交易配置选择交易系统,支持同花顺qmt,比他qmt

<pre class="public-DraftStyleDefault-pre" data-offset-key="9miu3-0-0"><pre class="Editable-styled" data-block="true" data-editor="am7s1" data-offset-key="9miu3-0-0"><div data-offset-key="9miu3-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="9miu3-0-0"><span data-text="true">"交易系统设置":"*****", "交易系统选择":"ths/qmt", "交易系统":"qmt", "交易品种":"fund", "交易品种说明":["stock","fund","bond","全部"], "同花顺下单路径":"C:/同花顺软件/同花顺/xiadan.exe", "识别软件安装位置":"C:/Program Files/Tesseract-OCR/tesseract", "qmt路径":"D:/国金QMT交易端模拟/userdata_mini", "qmt账户":"55009640", "qmt账户类型":"STOCK", "证券公司交易设置":"兼容老牌证券公司可转债1手为单位", "是否开启特殊证券公司交易设置":"否",</span></span></div></pre></pre>

选择交易品种比如我们选择基金,fund

<pre class="public-DraftStyleDefault-pre" data-offset-key="8q404-0-0"><pre class="Editable-styled" data-block="true" data-editor="am7s1" data-offset-key="8q404-0-0"><div data-offset-key="8q404-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="8q404-0-0"><span data-text="true">"交易品种":"fund", "交易品种说明":["stock","fund","bond","全部"],</span></span></div></pre></pre>

选择交易策略比如自定义股票池

<pre class="public-DraftStyleDefault-pre" data-offset-key="9j7re-0-0"><pre class="Editable-styled" data-block="true" data-editor="am7s1" data-offset-key="9j7re-0-0"><div data-offset-key="9j7re-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="9j7re-0-0"><span data-text="true">"自定义交易":"****", "自定义运行函数设置":"自定义运行函数说明,运行类型有定时和循环,只需要把自定义模块的函数名称放在下面**", "目前设置说明":"早上交易人气,下午做概念,2个策略的间隔长,干扰小,手动更新数据是最后一个策略的", "自定义函数运行类型":["定时"], "自定义函数模块运行时间":["09:45"], "自定义函数":["run_customize_trading_strategies"],</span></span></div></pre></pre>

框架的策略,我给了自定义策略模块

<pre class="public-DraftStyleDefault-pre" data-offset-key="lh6j-0-0"><pre class="Editable-styled" data-block="true" data-editor="am7s1" data-offset-key="lh6j-0-0"><div data-offset-key="lh6j-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="lh6j-0-0"><span data-text="true">"模型策略":{ "get_wencai_buy_data":"问财买入股票", "get_wencai_sell_data":"问财卖出股票", "get_dfcf_zh_buy_stock":"东方财富自选股买入", "get_dfcf_zh_sell_stock":"东方财富自选股卖出", "run_bond_cov_rend_strategy":"可转债趋势轮动策略", "run_limit_trading_strategy":"涨停板策略", "run_etf_trend_strategy":"etf趋势轮动策略", "run_bond_cov_popularity_strategy":"可转债人气策略", "run_stock_sentiment_strategy":"股票人气策略", "run_bond_cov_custom_factor_rotation":"可转债自定义因子轮动策略", "run_bond_cov_hot_concept_strategy":"可转债热门概念策略", "run_micro_stock_cap_trend_trading":"微盘股趋势轮动策略", "run_tdx_yj_trader_func_1":"通达信警告交易函数1", "run_tdx_trader_stock_buy":"通达信自选股买入", "run_tdx_trader_stock_sell":"通达信自选股卖出", "get_connect_trader_data":"合并交易数据", "run_joinquant_trader_strategy_get_simultaneous_stock_hold_models":"聚宽跟单持股模式", "run_joinquant_trader_strategy_get_simultaneous_transaction_models":"聚宽跟单成交模式", "run_customize_trading_strategies":"自定义交易股票池" },</span></span></div></pre></pre>

选择资金分析默认比如我们选择金额,程序回自动计算

<pre class="public-DraftStyleDefault-pre" data-offset-key="62uia-0-0"><pre class="Editable-styled" data-block="true" data-editor="am7s1" data-offset-key="62uia-0-0"><div data-offset-key="62uia-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="62uia-0-0"><span data-text="true">资金管理模块说明":"程序默认管理方式有数量/资金", "资金分配设置":"交易数量设置数量和金额,利用可转债最低单位位设置条件,股票在基础数据10,etf100,值调整持有限制,持股限制", "交易模式":"金额", "固定交易资金":5000, "持有金额限制":5000, "固定交易数量":10, "持有限制":10, "持股限制":10,</span></span></div></pre></pre>

设置自定义趋势

<pre class="public-DraftStyleDefault-pre" data-offset-key="cgloa-0-0"><pre class="Editable-styled" data-block="true" data-editor="am7s1" data-offset-key="cgloa-0-0"><div data-offset-key="cgloa-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="cgloa-0-0"><span data-text="true">"自定义交易品种交易":"自定义交易类型比如股票,可转债,etf***", "自定义交易品种跌破N日均线卖出":5, "自定义交易品种持有分数":50, "买入前N":5,</span></span></div></pre></pre>

运行user_def_models更新数据

<pre class="public-DraftStyleDefault-pre" data-offset-key="6fbej-0-0"><pre class="Editable-styled" data-block="true" data-editor="am7s1" data-offset-key="6fbej-0-0"><div data-offset-key="6fbej-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span data-offset-key="6fbej-0-0"><span data-text="true">持仓数量: 25 Empty DataFrame Columns: [账号类型, 资金账号, 证券代码, 股票余额, 可用余额, 成本价, 市值, 选择] Index: [] 剔除黑名单** Empty DataFrame Columns: [账号类型, 资金账号, 证券代码, 股票余额, 可用余额, 成本价, 市值, 选择, 黑名单] Index: [] 账号类型 资金账户 可用金额 冻结金额 持仓市值 总资产 0 2 55009640 19953010.19 0.0 50569.73 20003577.92 自定义交易股票池**** 证券代码 名称 0 511010 国债ETF 1 515220 煤炭ETF 2 513100 纳斯达克 3 501018 原油 4 159937 黄金 证券代码 名称 持股检查 跌破均线 均线得分 1 515220 煤炭ETF 没有持股 不是 75 0 511010 国债ETF 没有持股 不是 50 4 159937 黄金 没有持股 不是 50 买入***** 证券代码 名称 持股检查 跌破均线 均线得分 选择 交易状态 0 515220 煤炭ETF 没有持股 不是 75 持股不足 未买 1 511010 国债ETF 没有持股 不是 50 持股不足 未买 2 159937 黄金 没有持股 不是 50 持股不足 未买 PS C:\Users\Admin\Desktop\综合自定义交易系统v5.4.3加入了自定义交易,检查了数据></span></span></div></pre></pre>

我们可以发行自定义5个交易股票池,但是买入的结构只有3个,符合程序就会买入,不断轮动

运行trader_strategy.py 开启交易

运行的效果

买入 的效果,自动计算分配资金

下单的结果,周末不能交易

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

回复

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

客服专线

400-080-8112

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