添加布林带择时策略有多便捷!股票量化分析工具QTYX-V2.4.7
前言
布林帶通道(Bollinger Bands)是非常經(jīng)典的技術(shù)指標(biāo),常用于研判市場(chǎng)中長(zhǎng)期運(yùn)動(dòng)趨勢(shì)。
比如我們以[350,?2,2]?這組長(zhǎng)線參數(shù)來(lái)繪制恒瑞醫(yī)藥、貴州茅臺(tái)10年行情走勢(shì)的布林帶通道,如下所示:
不少星球?qū)W員向我發(fā)起了支持布林帶通道策略的需求。其實(shí)在QTYX量化分析系統(tǒng)中支持這個(gè)策略還是非常容易的,于是我們升級(jí)了版本至V2.4.7來(lái)支持這個(gè)策略。
如何實(shí)現(xiàn)策略
布林帶通道的應(yīng)用網(wǎng)上介紹了很多,比如股價(jià)突破上軌為超買(mǎi),跌破上軌為超賣(mài)等等,此處不再贅述。這里主要介紹下如何在QTYX中添加布林帶通道策略。
我們看到圖上布林帶通道由三條軌道線組成,分別是上軌?、中軌和下軌。中軌線是N日移動(dòng)平均線(MA),上軌線和下軌線分別是中軌線的正負(fù)N倍標(biāo)準(zhǔn)差。
布林帶通道的計(jì)算可以直接使用talib的接口:
upper, middle, lower = talib.BBANDS(close, timeperiod=20, nbdevup=2, nbdevdn=2, matype=0)根據(jù)收盤(pán)數(shù)據(jù)可以計(jì)算出一個(gè)通道軌跡值,upper為上限,lower為下限,middle為平均位置。
調(diào)用參數(shù):
-
close:收盤(pán)價(jià)
-
timeperiod:計(jì)算的周期,通常選擇20天
-
nbdevup:上限價(jià)格相對(duì)于周期內(nèi)標(biāo)準(zhǔn)偏差的倍數(shù),取值越大,則上限越大,通道越寬
-
nbdevdn:下限價(jià)格相對(duì)于周期內(nèi)標(biāo)準(zhǔn)偏差的倍數(shù),取值越大,則下限越大,通道越寬
-
matype:平均值計(jì)算方法,用于設(shè)定哪種類(lèi)型的MA。0=SMA, 1=EMA, 2=WMA, 3=DEMA, 4=TEMA, 5=TRIMA, 6=KAMA, 7=MAMA, 8=T3 (Default=SMA)
在/QTYX/StrategyGath/StrategyGath.py的Base_Strategy_Group類(lèi)中添加策略代碼,如下所示:
@staticmethod def get_bbands_signal(stock_dat, period = 20, nup = 2, ndn = 2):# 布林帶通道突破 買(mǎi)入/賣(mài)出信號(hào)stock_dat['H_line'], stock_dat['M_line'], stock_dat['L_line'] = talib.BBANDS(stock_dat.Close, timeperiod=period,nbdevup=nup, nbdevdn=ndn, matype=0)# 當(dāng)天收盤(pán)價(jià)穿越昨天通道頂部 第二天買(mǎi)入股票buy_index = stock_dat[stock_dat.Close > stock_dat.H_line].index# 當(dāng)天收盤(pán)價(jià)跌破昨天通道底部 第二天賣(mài)出股票sell_index = stock_dat[stock_dat.Close < stock_dat.L_line].indexstock_dat.loc[buy_index, 'Signal'] = 1stock_dat.loc[sell_index, 'Signal'] = -1stock_dat['Signal'] = stock_dat.Signal.shift(1) # 當(dāng)天出信號(hào)則第二天買(mǎi)入# print(stock_dat[stock_dat['signal'].notna()])stock_dat['Signal'].fillna(method='ffill', inplace=True) # 與前面元素值保持一致stock_dat['Signal'].fillna(value=-1, inplace=True) # 序列最前面幾個(gè)NaN值用-1填充return?stock_dat策略的關(guān)鍵是得到買(mǎi)賣(mài)信號(hào)序列。比如將買(mǎi)入當(dāng)天的 Signal 值設(shè)置為 1,將賣(mài)出當(dāng)天的 Signal設(shè)置為?1。
然后在QTYX/MainlyGui/ElementGui/DefTreelist.py的colleges中注冊(cè)接口:
colleges = {u'經(jīng)典策略': [{u'名稱(chēng)': u'N日突破', u'標(biāo)識(shí)': u'趨勢(shì)', '函數(shù)': u'已定義', 'define': "get_ndays_signal"},{u'名稱(chēng)': u'ATR止盈止損', u'標(biāo)識(shí)': u'趨勢(shì)', '函數(shù)': u'已定義', 'define': "get_ndays_atr_signal"},{u'名稱(chēng)': u'布林帶突破', u'標(biāo)識(shí)': u'趨勢(shì)', '函數(shù)': u'已定義', 'define': "get_bbands_signal"}],u'自定義策略': [{u'名稱(chēng)': u'yx-zl-1', u'標(biāo)識(shí)': u'綜合', '函數(shù)': u'未定義'},{u'名稱(chēng)': u'yx-zl-2', u'標(biāo)識(shí)': u'趨勢(shì)', '函數(shù)': u'未定義'},{u'名稱(chēng)': u'yx-zl-3', u'標(biāo)識(shí)': u'波動(dòng)', '函數(shù)': u'未定義'}],u'衍生指標(biāo)': [{u'名稱(chēng)': u'均線交叉', u'標(biāo)識(shí)': u'cross', '函數(shù)': u'已定義'},{u'名稱(chēng)': u'跳空缺口', u'標(biāo)識(shí)': u'jump', '函數(shù)': u'已定義'},{u'名稱(chēng)': u'黃金分割', u'標(biāo)識(shí)': u'fibonacci', '函數(shù)': u'已定義'}],u'K線形態(tài)': [{u'名稱(chēng)': u'烏云蓋頂', u'標(biāo)識(shí)': u'CDLDARKCLOUDCOVER', '函數(shù)': u'已定義'},{u'名稱(chēng)': u'三只烏鴉', u'標(biāo)識(shí)': u'CDL3BLACKCROWS', '函數(shù)': u'已定義'},{u'名稱(chēng)': u'十字星', u'標(biāo)識(shí)': u'CDLDOJISTAR', '函數(shù)': u'已定義'},{u'名稱(chēng)': u'錘頭', u'標(biāo)識(shí)': u'CDLHAMMER', '函數(shù)': u'已定義'},{u'名稱(chēng)': u'射擊之星', u'標(biāo)識(shí)': u'CDLSHOOTINGSTAR', '函數(shù)': u'已定義'}] }這樣就把策略添加到QTYX系統(tǒng)中了,可以看到布林帶策略已經(jīng)在界面的策略列表中了。
回測(cè)時(shí)只要點(diǎn)擊左邊樹(shù)形控件的策略名稱(chēng),選中的策略就生效了!
使用talib庫(kù)設(shè)計(jì)擇時(shí)策略原來(lái)這么方便!
同樣地,按這個(gè)思路我們可以基于均線、MACD、KDJ、RSI、OBV……以及多指標(biāo)組合,設(shè)計(jì)出各式各樣的策略。
因?yàn)槲覀冎苯釉诒镜氐腜ython環(huán)境下編程,只要生成出買(mǎi)賣(mài)信號(hào)序列即可,編寫(xiě)的邏輯過(guò)程可以任意發(fā)揮,非常靈活,而且不存在黑盒子!
說(shuō)明
1. 我們會(huì)把完整的源碼上傳到知識(shí)星球《玩轉(zhuǎn)股票量化交易》中,幫助小伙伴們更好地掌握這個(gè)方法。
2. 想要加入知識(shí)星球《玩轉(zhuǎn)股票量化交易》的小伙伴記得先微信call我獲取福利!
添加布林帶擇時(shí)策略有多便捷!股票量化分析工具QTYX-V2.4.7???????
???????
總結(jié)
以上是生活随笔為你收集整理的添加布林带择时策略有多便捷!股票量化分析工具QTYX-V2.4.7的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小程序源码:后台版本趣味测试微信小程序源
- 下一篇: 百度SEO发包快排解密