亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何實現SuperTrend V.1超級趨勢線系統

發布時間:2022-01-15 15:10:19 來源:億速云 閱讀:1515 作者:小新 欄目:互聯網科技

這篇文章將為大家詳細講解有關python如何實現SuperTrend V.1超級趨勢線系統,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

系統介紹

CMC Markets 新一代智能交易系統 —— 超級趨勢線(Supertrend)

這里有一篇文章介紹這個系統。

python如何實現SuperTrend V.1超級趨勢線系統

在CMC Markets中的新一代智能交易系統中,在技術指標中選取“超級趨勢線”調取即可使用,

如圖中所示,可以根據自身喜好對上漲的信號、下跌的信號調節“顏色和粗細”。

那么什么是超趨勢指標?在理解超趨勢指標公式之前,理解ATR是必要的,因為超趨勢使用ATR值來計算指標值。

其中的主要算法下面也有一張圖來介紹

python如何實現SuperTrend V.1超級趨勢線系統

大致看一下,主要描述是HL2(k線均價)乘以n倍ATR的通道。做趨勢突破。

但文章寫得比較簡略。沒有詳細的算法。隨后我想到了最牛的社區Tradingview。

果不奇然。上面果然有。

python如何實現SuperTrend V.1超級趨勢線系統

從圖上看,還是比較切合趨勢的。但可惜的是它只是一個Alert的報警信號。

學習源碼

看著代碼還不算太長,那我們就翻譯過來試一下吧。!(っ??ω??)っ???!

python如何實現SuperTrend V.1超級趨勢線系統

完整pine代碼如上。。

四、代碼轉化

這里我們在FMZ新建一個策略,起名SuperTrade

python如何實現SuperTrend V.1超級趨勢線系統

接著我們來設置2個參數Factor、Pd

python如何實現SuperTrend V.1超級趨勢線系統

為了更好的簡化代碼的操作,便于理解,這樣要用到python的高級數據擴展包pandas

中午吃飯的時候我問夢夢老師,FMZ是否支持這個庫。下午一看居然可以用了。

夢夢老師真的太厲害了。

1.我們要導入pandas庫time庫

2.在main函數當中設置使用季度合約(主要跑okex)

3.設定一個循環doTicker()15分鐘檢測1次。

將代碼跑在15分鐘的周期上

接著我們在doTicker()中寫主要策略。

python如何實現SuperTrend V.1超級趨勢線系統

4.我們要取回k線的OHCLV 所以用GetRecords()

5.我們將取回的數據導入pandas M15 = pd.DataFrame(records)

6.我們要修改表的頭部標簽。 M15.columns = ['time','open','high','low','close','volume','OpenInterest']

其實就是將'open','high','low','close’ 的首字母改成小寫,便于后期寫代碼不要一會大寫一會小寫。

python如何實現SuperTrend V.1超級趨勢線系統

7.給數據集合增加一列hl2 hl2=(high+low)/2

python如何實現SuperTrend V.1超級趨勢線系統

8.接著我們來計算ATR

因為ATR的計算要導入一個變量length,它的取值是Pd

接著我們通過查閱麥語言手冊,ATR真實波動幅度均值的算法步驟如下:

TR : MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));

ATR : RMA(TR,N)

其中TR的值取下面3個差值的最大一個

1、當前交易日的最高價與最低價間的波幅 HIGH-LOW

2、前一交易日收盤價與當個交易日最高價間的波幅 REF(CLOSE,1)-HIGH)

3、前一交易日收盤價與當個交易日最低價間的波幅 REF(CLOSE,1)-LOW)

所以TR : MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));

在python計算中

python如何實現SuperTrend V.1超級趨勢線系統

要先設立一個prev_close 去取close在上一行的數據,也就是將close右移1格成立一個新的參數

python如何實現SuperTrend V.1超級趨勢線系統

接著定義一個中間變量 記錄TR的3個對比值的數組。(HIGH-LOW)(high-prev_close)(low-prev_close)

python如何實現SuperTrend V.1超級趨勢線系統

我們在數據集合當中定義新的一列取名TR,TR的取值是取中間變量絕對值的最大一個,使用abs()和max()函數

python如何實現SuperTrend V.1超級趨勢線系統

最后我們要計算ATR的值,ATR : RMA(TR,N),據查RMA的算法其實就是一個固定值變種的EMA算法。

N是我們導入的變量,其中ATR的默認參數是14。這里我們導入alpha=length的倒數。

===

然后用ewm算法計算ema

完整ATR計算過程如下

python如何實現SuperTrend V.1超級趨勢線系統

9始計算Up和Dn

python如何實現SuperTrend V.1超級趨勢線系統

Up=hl2 -(Factor * atr)

Dn=hl2 +(Factor * atr)

是不是很簡單呢。

下面是TV當中15行-21行的核心代碼段

python如何實現SuperTrend V.1超級趨勢線系統

這一段的主要意思是想表達,

如果處于看漲階段,(下方線)TrendUp = max(Up,TrendUp[1])

如果處于下跌階段,(上方線)TrendDown=min(Dn,TrendDown[1])

也就是說在一個趨勢中,ATR的值一直在使用一種類似強盜布林策略的技術。

不斷將通道的另一側收窄

這里TrendUp和TrendDown每一次的計算都需要進行自我迭代。

就是每一步都要拿上一步的自己來計算。

所以要對數據集合做循環遍歷。

這里先要對數據集合新建字段TrendUp,TrendDown,Trend,linecolor。并給定他們一個初始值

接著使用fillna(0)語法將之前計算的結果中帶有空值的數據填上0

python如何實現SuperTrend V.1超級趨勢線系統

啟用一個for循環

在循環中采用python三目運算

python如何實現SuperTrend V.1超級趨勢線系統

計算TrendUp

TrendUp = MAX(Up,TrendUp[-1]) if close[-1]>TrendUp[-1] else Up

大致意思是 如果 上一個close>上一個TrendUp,成立取Up和上一個TrendUp當中最大的值,不成立取Up值,并傳遞給當前TrendUp

python如何實現SuperTrend V.1超級趨勢線系統

同理,計算TrendDown

TrendDown=min(Dn,TrendDown[-1]) if close[-1]<TrendDown[-1] else Dn

大致意思是 如果 上一個close<上一個TrendDown,成立取Dn和上一個TrendDown當中最小的值,不成立取Dn值,并傳遞給當前TrendDown

python如何實現SuperTrend V.1超級趨勢線系統

下面是計算控制方向的flag,我簡化了一下偽代碼

Trend= 1 if (close > TrendDown[-1]) else (x)

x = -1 if (close< TrendUp[-1]) else Trend[-1]

意義是是 如果 收盤價>上一個 TrendDown 則取1(看多) 不成立取x

如果 收盤價<上一個 TrendUp 則取-1(看空)不成立取上一個Trend (意思是是不變)

翻譯成圖像語言就是突破上軌轉換flag看多,突破下軌轉換flag看空,其他時間不變。

python如何實現SuperTrend V.1超級趨勢線系統

計算Tsl和Linecolor

Tsl= rendUp if (Trend==1) else TrendDown

Tsl 是用來在圖像上表示SuperTrend 的值。意思是看多的時候在圖上標記下軌,看空的時候在圖上標記上軌。

linecolor= 'green' if (Trend==1) else 'red'

linecolor 的含義是 如果看多 則標記綠線 ,如果看空則標記空色(主要是用途Tradingview展示)

python如何實現SuperTrend V.1超級趨勢線系統

接著23-30行的代碼主要是plot繪圖 這里不做詳解。

最后還有2行代碼用于買入賣出信號控制

Tradingview中,他的含義是 反轉了Flag以后給出信號

將條件語句轉換成為python。

如果上一個Trend flag從-1變成1 代表突破上方阻力 開多

如果上一個Trend flag從1變成-1 代表突破下發支撐 開空

python如何實現SuperTrend V.1超級趨勢線系統

本段完整代碼如下:

python如何實現SuperTrend V.1超級趨勢線系統

python如何實現SuperTrend V.1超級趨勢線系統

python如何實現SuperTrend V.1超級趨勢線系統

五、全部代碼

我調整了一下整體的代碼結構。

并將做多做空相關下單指令合并到策略中。

下面是完整代碼

python如何實現SuperTrend V.1超級趨勢線系統

公開策略連接https://www.fmz.com/strategy/200625

六、回測與總結

我們選取了近一年的數據進行回測。

使用okex季度合約 15分鐘周期。

設定的參數是,

Factor=3

Pd=45

vol=100(每次下單100張)

所得年化收益,約33%。

總體來說回撤并不是很大,

其中主要是312的大跌對系統產生了比較大的沖擊,

如果沒有312的話收益應該會比較好看。

python如何實現SuperTrend V.1超級趨勢線系統

七、寫在最后

SuperTrend是一個非常不錯的交易系統

SuperTrend系統的主要原理是采用ATR通道突破策略(類似于肯特通道)

但其變化的地方主要在于使用了強盜布林的收窄策略,或者說是逆向的唐奇安原理。

在行情運行中不斷收窄上下通道。

以便達到通道突破轉向的操作。(一旦通道突破,上下軌恢復初始值)

我在TradingView上把up dn TrendUp TrendDn 分別plot了出來

這樣便于更好的理解這個策略

一目了然

python如何實現SuperTrend V.1超級趨勢線系統

另外github上還有一個js的版本。js我不是很懂,但從if語句看好像有點問題。

地址是https://github.com/Dodo33/gekko-supertrend-strategy/blob/master/Supertrend.js

關于“python如何實現SuperTrend V.1超級趨勢線系統”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开江县| 丰县| 察哈| 昌图县| 聊城市| 若尔盖县| 康乐县| 温宿县| 榆中县| 台前县| 兖州市| 怀安县| 阳原县| 平陆县| 浦县| 中西区| 徐州市| 苗栗市| 都江堰市| 常宁市| 常州市| 同江市| 疏附县| 方城县| 普宁市| 大宁县| 中超| 汝城县| 隆安县| 罗山县| 麻江县| 攀枝花市| 咸宁市| 莱西市| 双城市| 宁波市| 石台县| 克山县| 富源县| 郸城县| 泽州县|