NBLOG_20231123 PYTHON量化交易;Back Testing_3

Translator

 


NBLOG_20231123 PYTHON量化交易;Back Testing_3

撿現成的好機會,可千萬別浪費!趁著手感還熱著,我們把現成的凱特通道代碼,稍微改動一下,立馬就可以得到同為三條線的布林格通道啦。說做就做立馬走起、、


import pandas as pd

import numpy as np

import yfinance as yf

import mplfinance as mpf

import talib as ta


df=yf.download('NVDA',period='120d')

df['BBup'], df['BBmid'], df['BBlo'] = ta.BBANDS(df['Close'], timeperiod=20, nbdevup=2, nbdevdn=2, matype=0)


add_plot=mpf.make_addplot(df[['BBup','BBmid','BBlo']])

mpf.plot(df,addplot=add_plot,type='candle',volume=True,title='NVDA Bollinger Bands')


 



我就一直想可以成功的搞一個Python用的萬向接頭的工具出來。這也是寫這一系列的目的;讓大家做最小的代碼變動,就可以換成不同功能的分析工具,加油!

原始代碼應該沒啥問題吧?這次的Bollinger Bands,完全讓talib支援來著。Talib的Bollinger Bands說明如下:

BBANDS - Bollinger Bands

upperband, middleband, lowerband = BBANDS(close, timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)

不知道它老人家為什麼搞個5天的中心線來著?反正我們就依照國際慣例弄20天便是;兩倍標準差照舅。沒意外的咱們便可以得到一張漂亮的圖了;省時省力過癮!

既然這麼巧合的幾乎同時介紹了凱特與布林格通道。我忽然想起一些關於它們的一些東西;就藉著這個機會同大家分享。不過、這可是純粹個人心得,說錯莫怪。

凱特與布林格是在策略運用上截然不同的兩種通道。知道你想說什麼;但是這還真的不是一句廢話,我發四!其實通道的交易觀念,它是來自濾帶的基礎。所以它的底層邏輯是交易強勢、強勢交易的交叉訊號延伸;為了濾除雜訊,更為站隊強勢。所以進場訊號從基礎交叉點,拉升到對軌道的交叉行為上;大部分的通道交易策略都依循這樣的趨勢原則,凱特通道也是。凱特的特色就是它透過ATR盤活了上下軌的距離;不再是早先呆滯的固定百分比設定。

但是布林格就是一個截然不同的策略設計理念了。這個必須的軌道是由標準差所賦予,它跟動量或變動率,幾乎是沒半毛錢關係的。白話來說;ATR可以得知目前的價格行為對趨勢的積極與統一性向;但是標準差瞭解的是目前固定時間價格分佈的狀況,分散或集中。以常用的2倍標準差制定上下軌來說;2倍標準差可以涵蓋95%左右的時間內價格活動範圍。所以布林格更像暗示一個動態的箱型觀念,較適合區間來回的Swing Trading策略。如果拿來執行一般通道的突破策略,比如布林格的“強盜策略”;其勝率應該是非常低的,因為它正交易在常態分佈的“厚尾”上。以上就是個人對著兩個通道交易策略的心得。

另外;多年來自己一直推薦的好的不得了的“擠壓squeeze”指標,也是凱特與布林的合體應用。這絕對是目前發現的最優秀趨勢發現交易工具了。對我來說;市場多空、上下都不是重要的。我的市場定義只有會動跟昏睡不動的。而這個指標就能順利偵測市場動起來的時機。這樣繪圖的上半部應該可以打完收工啦,可以接著來收拾下半部指標的部分了。

要提到如何將一些動量指標塞入圖形裡;就又要學習另一個東西了,那就是面板(Panel)的觀念。簡單來說;我們到目前為止,都是在主面板(Main Panel)裡搞事。這個main panel也可以稱它為panel=0;零號面板。在網路找到一些關於它的定義,大家可以三考一下:

- 在 mplfinance 中,「面板」功能可讓您在單一圖中建立多個子圖。它根據主面板、成交量面板和每個附加面板的指定面板自動確定面板數量。這對於在單獨的子圖中可視化財務數據的不同方面非常有用。

- In mplfinance, the "panel" feature allows you to create multiple subplots within a single figure. It automatically determines the number of panels based on the specified panels for the main panel, volume panel, and each additional panel. This can be useful for visualizing different aspects of financial data in separate subplots.

可以知道panel跟subplot是不同的用法;panel是切割主面板,而subplot是獨立的。目前大家只要知道如果要畫出一般熟知的帶下方指標的圖,就必須使用panel來完成。比如弄個RSI來,我們就創造個panel=1的子圖來放。這個子圖我們可以設定最多到panel=9。當然、還是那個原則;這些都是“外來物種”,還是要通過addplot來設定。Panel只是addplot設定的其中一個叄數。來看一下這段代碼:


import yfinance as yf

import mplfinance as mpf

import talib

%matplotlib notebook

# 下載 MSFT 的一年股價資料

data = yf.download('NVDA', period='1y')


# 使用 talib 計算RSI指標

data['RSI'] = talib.RSI(data['Close'], 14)


# 繪製K線圖、平均線和RSI指標

mpf.plot(data, type='candle', mav=(5, 10),

         addplot=[

             mpf.make_addplot(data['RSI'], panel=1, color='blue'),

             mpf.make_addplot([30] * len(data), panel=1, color='red', linestyle='--'),

             mpf.make_addplot([70] * len(data), panel=1, color='green', linestyle='--'),

         ],

         panel_ratios=(3, 1),

         figsize=(10, 8),

         )



 


大家可以看到這行:

mpf.plot(msft_data, type='candle', mav=(5, 10)

在這裡K線跟均線工作在panel 0的主面板,所以並不需要註明panel的叄數。然後我們再來看看RSI的部分:

mpf.make_addplot(data['RSI'], panel=1, color='blue'),

             mpf.make_addplot([30] * len(data), panel=1, color='red', linestyle='--'),

             mpf.make_addplot([70] * len(data), panel=1, color='green', linestyle='--'),

這部分共有三條線;RSI與RSI的30,70水準線,它們全部都是顯示在panel=1的子圖上。另外、panel_ratios=(3, 1)則設定了RSI與主圖的佔用比例。這樣我們就完成了子圖顯示技術指標的功能了,恭喜自己一下吧!好了,我們這篇也就先談到這裡了。祝大家交易順利早安、午安與晚安。






留言

熱門文章