量化技術分析應用

做者: 阿布html

阿布量化版權全部 未經容許 禁止轉載python

abu量化系統github地址(歡迎+star) git

本節ipython notebookgithub

量化交易的最大優點即爲經過計算機強大的運算能力,在市場廣度分析上佔有絕對優點,經過歷史規律的總結,在規律的基礎上發現機率優點,造成良好投機優點,量化交易離不開技術分析,本節將主要示例一些經常使用的技術分析在abupy中的接口實現。算法

將abupy內置沙盒數據中美股,A股,港股市場中的symbol都列出來,稍後繪製這些symbol的阻力線,支持線:微信

us_choice_symbols = ['usTSLA', 'usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usWUBA', 'usVIPS']
cn_choice_symbols = ['002230', '300104', '300059', '601766', '600085', '600036', '600809', '000002', '002594', '002739']
hk_choice_symbols = ['hk03333', 'hk00700', 'hk02333', 'hk01359', 'hk00656', 'hk03888', 'hk02318']複製代碼

1. 阻力線,支撐線自動繪製

對趨勢技術分析很熟悉的朋友們對上升趨勢線,降低趨勢線,阻力線, 支撐線這些概念很熟悉,可是從理論出發,很難有兩我的畫出的線是徹底同樣的,即便是一我的不一樣的時候去畫也會有精度的偏差,使用數據分析本身畫出趨勢與阻力是對量化分析的最根本詮釋,人對數據的敏感度必定不如死的機器,由於人是有感情的,也許你會畫出本身想要的趨勢線阻力線來騙本身,再堅持一下立刻就阻力了就上去了等等,快交給機器吧!別本身畫了!機器學習

封裝一個函數默認繪製usTSLA的趨勢線,主要將AbuTLine中繪製阻力線,支撐線的函數進行封裝,代碼以下所示:函數

def plot_trend(symbol='usTSLA', n_folds=1, only_last=False, how='both', show_step=False):
    n_folds = int(n_folds)
    # 獲取symbol的n_folds年數據
    kl = ABuSymbolPd.make_kl_df(symbol, n_folds=n_folds)
    # 構造技術線對象
    kl_tl = tl.AbuTLine(kl.close, 'kl')
    if how == 'support':
        # 只繪製支持線
        kl_tl.show_support_trend(only_last=only_last, show=True, show_step=show_step)
    elif how == 'resistance':
        # 只繪製阻力線
        kl_tl.show_resistance_trend(only_last=only_last, show=True, show_step=show_step)
    else:
        # 支持線和阻力線都繪製
        kl_tl.show_support_resistance_trend(only_last=only_last, show=True, show_step=show_step)
plot_trend()複製代碼

上面的函數繪製了tsla一年中的支撐線和阻力線,因爲一年內會存在可能會存在多條阻力線,以及多條支撐線,有些支撐線也已經明顯破位,好比上面淺藍色那根早期的支撐線,還有黃色的早期阻力線,若是隻想繪製最近的阻力線和支持線,可使用only_last參數,以下所示,最近的阻力線紅色,最近的支持線藍色,能夠發現兩根線立刻就要相交了:oop

plot_trend(only_last=True)複製代碼

abupy中阻力線,支撐線基本繪製原理以下所示:學習

  • 首先分析原始曲線的最佳擬合次數,根據最佳擬合次數對曲線進行多項式擬合,
  • 擬合後的函數經過bfgs算法尋找阻力位支撐位,即過濾篩選出趨勢關鍵骨架點
  • 對趨勢關鍵骨架點經過聚類算法(kmean)以及方差最優計算,獲取最終的兩個關鍵點,兩點繪製阻力線或者支撐線

下面經過參數show_step爲True將繪製阻力線,支撐線的中間分析步驟進行繪製,以下所示:

  • 下第一圖即爲根據最佳擬合次數對曲線獲得的擬合函數,經過bfgs算法濾篩選出趨勢關鍵骨架點
  • 下第二圖經過聚類算法以及方差最優計算出的聚類結果,不一樣的顏色表明不一樣的聚類簇
  • 下第三圖找到支撐線最終的兩個關鍵點,兩點繪製支撐線
  • 下第四圖找到阻力線最終的兩個關鍵點,兩點繪製阻力線

更多實現細節請閱讀源代碼AbuTLine以及ABuTLExecute

plot_trend(only_last=True, show_step=True)複製代碼

下面嘗試繪製其它symbol的趨勢線,一個個參數換太麻煩了,使用ipywidgets進行交互,以下所示:

from ipywidgets import interact, Checkbox 


symbol_range = us_choice_symbols + cn_choice_symbols + hk_choice_symbols
n_folds_range =  [1, 2, 3, 4, 5, 6]
only_last_check = Checkbox(False)
show_step_check = Checkbox(False)
how_range = ['both', 'support', 'resistance']

_ = interact(plot_trend, symbol=symbol_range, n_folds=n_folds_range, 
             only_last=only_last_check, how=how_range, show_step=show_step_check)複製代碼

經過阻力線,支撐線的肯定,能夠實現均值回覆類型的擇時策略,好比在支撐線位置買入股票,以後在阻力線位置賣出股票。

可是並不建議像上面這種簡單實現,由於阻力線和支撐線的肯定自己即存在很大分歧,即在本節初始說的,很難有兩我的畫出的線是徹底同樣的,即便是一我的不一樣的時候去畫也會有精度的偏差,使用程序去繪製的好處是規避感情,人去繪製很容易繪製出本身但願的走勢,看上去好像還挺有道理。

建議的使用方式是相似閥值支持度的方式,好比在一個均值回覆策略中:使用黃金分割線的0.382附近作爲初始檢測買入點,這時候能夠同時度量一下如今是否一樣處在支撐線附近,且離阻力線足夠遠,同時作爲買入條件,也能夠再並上其它條件,造成一個苛刻的買入策略,即買入條件爲:

  1. 黃金分割線的0.382附近
  2. 支撐線附近
  3. 離阻力線足夠遠
  4. .....................
  5. .....................

量化分析的最大長處便是經過計算機強大的運算能力,在廣度上佔有絕對優點,即若是是傳統人腦的分析方式上述方法是行不通的,由於人的能力範圍內所能涉及的交易目標數量有限,上述苛刻條件可能致使交易者很長時間無交易可作,但經過量化交易能夠在短期內完成對不一樣市場的不一樣交易目標分析,林子大了什麼鳥都有,必定會有符合條件的買入目標。

在以後的章節會使用阻力線和支撐線編寫一個完整的擇時選股策略,,請關注公衆號的更新提醒。

2. 跳空技術分析

跳空缺口是指股價開盤價高於昨天的最高價或低於昨天的最低價,使K線圖出現空檔的現象。

  • 普通缺口:特色就是很快被回補,價格在幾天以內就會回補
  • 突破缺口:當價格和成交量伴隨跳空(向上或者向下)跳出震盪區,則預示着新趨勢的造成
  • 衰竭缺口:缺口沒有很快回補,走勢也反覆無常,最終慢慢的回補缺口,預示着市場走勢將可能劇烈的反轉

本節只從使用的角度出發,示例abupy中的跳空統計分析接口的使用:

tsla_df = ABuSymbolPd.make_kl_df('usTSLA')
jumps = tl.jump.calc_jump(tsla_df)複製代碼

缺口最大的意義在於存在很強的支撐或者阻力,你能夠發現上述實現的缺口選取了不少點,那首先作作減法,選取那些阻力支撐最強的缺口,從代碼來講就是jump_power最大的那些缺口。

可使用tl.jump.calc_jump_line()獲取jump_power大於閥值的缺口,以下所示以2.8爲跳空能量篩選閥值:

jump_pd = tl.jump.calc_jump_line(tsla_df, power_threshold=2.8)複製代碼

tl.jump.calc_jump_line_weight()函數與上面使用的calc_jump_line()函數區別是根據時間權重從新計算了jump_power,也就好比一年前有個jump_power=2的缺口,昨天也有個jump_power=2的缺口,根據時間線性加權的結果,一年前的jump_power要遠遠小於2可能只有0.8了,可是昨天的缺口jump_power仍是2。

使用時間加權的一個緣由是隨着時間的流逝,越遠的記憶越淡忘,無論你當時有多懊悔多傷悲,另外一個緣由是針對同一個市場一支股票的交易者可能已經交替更換,新的交易者沒有以前或可惜或懊悔的記憶,每7年咱們就是一個全新的本身,全部細胞血液更新一遍完成。

下面的代碼使用tl.jump.calc_jump_line_weight()函數即時間加權方式,對缺口行進行過濾:

# sw[0]表明非時間因素的jump_power,sw[1]表明時間加權因素的jump_power,當sw[0]=1時與非加權方式相同,具體實現請參考源代碼 
jump_pd = tl.jump.calc_jump_line_weight(tsla_df, sw=(0.5, 0.5))複製代碼

獲得跳空的缺口後,與上面所說的支撐線,阻力線的應用方式相似,能夠直接作爲策略觸發點,也能夠作爲輔助判斷條件使用。

3. 傳統技術指標技術分析

abupy中內置了傳統技術指標可視化及度量方法,以下示例,首先使用usTSLA進行回測,從回測結果中取出一個交易單:

# 設置初始資金數
read_cash = 1000000
# 買入因子依然延用向上突破因子
buy_factors = [{'xd': 60, 'class': AbuFactorBuyBreak},
               {'xd': 42, 'class': AbuFactorBuyBreak}]
# 賣出因子繼續使用上一節使用的因子
sell_factors = [
    {'stop_loss_n': 1.0, 'stop_win_n': 3.0,
     'class': AbuFactorAtrNStop},
    {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.5},
    {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
]

abu_result_tuple, kl_pd_manger = abu.run_loop_back(read_cash,
                                                   buy_factors,
                                                   sell_factors,
                                                   choice_symbols=['usTSLA'])

order = abu_result_tuple.orders_pd.ix[0]複製代碼

繪製macd以及交易的買入賣出點位,以下所示:

nd.macd.plot_macd_from_order(order)複製代碼

繪製boll以及交易的買入賣出點位,以下所示:

nd.boll.plot_boll_from_order(order)複製代碼

繪製多條均線以及交易的買入賣出點位,以下所示:

nd.ma.plot_ma_from_order(order, time_period=[10, 20, 30, 60, 90, 120])複製代碼

abupy中內置的技術分析接口還有一些暫時沒有示例,在以後的章節會陸續進行示例,請關注公衆號的更新提醒。

abu量化文檔目錄章節

  1. 擇時策略的開發
  2. 擇時策略的優化
  3. 滑點策略與交易手續費
  4. 多支股票擇時回測與倉位管理
  5. 選股策略的開發
  6. 回測結果的度量
  7. 尋找策略最優參數和評分
  8. A股市場的回測
  9. 港股市場的回測
  10. 比特幣,萊特幣的回測
  11. 期貨市場的回測
  12. 機器學習與比特幣示例
  13. 量化技術分析應用
  14. 量化相關性分析應用
  15. 量化交易和搜索引擎
  16. UMP主裁交易決策
  17. UMP邊裁交易決策
  18. 自定義裁判決策交易
  19. 數據源
  20. A股全市場回測
  21. A股UMP決策
  22. 美股全市場回測
  23. 美股UMP決策

abu量化系統文檔教程持續更新中,請關注公衆號中的更新提醒。

更多阿布量化量化技術文章

更多關於量化交易相關請閱讀《量化交易之路》

更多關於量化交易與機器學習相關請閱讀《機器學習之路》

更多關於abu量化系統請關注微信公衆號: abu_quant

相關文章
相關標籤/搜索