中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何使用Python實現Dual Thrust 區間突破策略

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

這篇文章給大家分享的是有關如何使用Python實現Dual Thrust 區間突破策略的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

Dual Thrust簡介

Dual Thrust策略屬于開盤區間突破策略,它以當天開盤價加減一定的范圍來確定一個上下軌道,當價格突破上軌時做多,價格突破下軌時做空。不過與其他突破策略相比有兩點不同:第一個是Dual Thrust策略在設置范圍的時候,引入的是前N個交易日的開高低收這四個價格,這使得在一定時期內范圍相對穩定,對于趨勢跟蹤策略來說是比較合理的。

第二個是Dual Thrust策略在多頭和空頭的觸發條件上,考慮了非對稱性,通過外部參數Ks和Kx,可以針對多頭和空頭選擇不同的周期,這一點比較符合期貨市場漲緩跌急的特點。當Ks小于Kx時,多頭相對容易被觸發,當Ks大于Kx時,空頭相對容易被觸發。這樣的好處是可以根據自己的交易經驗,動態地調整Ks和Kx的值。也可以根據歷史數據測試的最優參數來使用策略。

Dual Thrust上下軌

在Dual Thrust策略中,首先需要定義前N根K線的震蕩區間,然后震蕩區間乘以多頭和空頭系數計算出范圍,接著以開盤價加減這個范圍,形成上軌和下軌,最后根據價格與上下軌的相互位置關系開開平倉。

計算震蕩區間
計算震蕩區間首先需要獲取四個價格,它們分別是:前N根K線中最高價(hh)、最高收盤價(hc)、最低價(ll)、最低收盤價(lc)。然后獲取hh與lc的差和hc與ll的差,最后獲取這兩個差的最大值。公式為:

  • Range = Max(hh-lc,hc-ll)

計算范圍
在計算范圍的時候,需要用到兩個外部參數,分別是多頭系數Ks和空頭系數Kx,它們的值可以根據交易者的經驗自己設置。那么多頭的范圍就是Rang乘以Ks;空頭的范圍是Rang乘以Kx。公式為:

  • long_range = Range * Ks

  • short_range = Range * Kx

計算上軌下軌
有了多頭范圍和空頭范圍,就可以根據開盤價來計算上軌和下軌的值了,其中上軌的值是開盤價加上多頭范圍,下軌的值是開盤價減去空頭范圍。公式為:

  • up_line = open + long_rang

  • down_line = open - short_range

策略邏輯

如何使用Python實現Dual Thrust 區間突破策略

  • 做多:價格向上突破上軌

  • 做空:價格向下突破下軌

與其他突破策略一樣,Dual Thrust策略也是根據價格與上下軌的相對位置關系來開平倉,當價格向上突破上軌時開多單;當價格向下突破下軌時開空單。另外,Dual Thrust策略沒有止損止盈機制,也沒有主動平倉機制。也就是說當持有多單時,如果價格向下突破下軌時直接反空為多;當持有空單時,如果價格向上突破上軌時直接反多為空。

策略編寫

第一步:編寫策略架構
還是我們熟悉的策略框架,包含一個main程序入口函數和一個onTick策略主函數,如下:

# 策略主函數
def onTick():
    pass


# 程序入口
def main():
    while True:  # 進入無限循環模式
        onTick()  # 執行策略主函數
        Sleep(1000)  # 休眠1秒

定義全局變量
之所以定義全局變量是因為,在程序重復執行onTick函數中,如果變量定義在onTick函數中,那么這個變量的值會隨著onTick的執行而改變。但有時候我們需要當達到某個條件的時候才改變這個變量,所以就需要我們把變量寫到onTick函數的外面。

mp = 0  # 用于控制虛擬持倉
last_bar_time = 0  # 用于判斷K線時間
up_line = 0  # 上軌
down_line = 0  # 下軌

計算上下軌
仔細看下面代碼中的注釋,首先一次性引入所有的全局變量,然后訂閱期貨品種并獲取K線數組,接著判斷一下K線數組的狀態是否符合我們的條件,如果沒問題就從K線數組中獲取最新的K線數據和最新的收盤價。

有了以上基礎數據,就可以計算上下軌的值了。首先是獲取四個價格:最高價、最高的收盤價、最低價、最低的收盤價,然后就可以計算范圍,最后根據范圍計算出上軌和下軌。大家可以根據以上的計算流程,熟悉下面的代碼。

global mp, last_bar_time, up_line, down_line # 引入全局變量
exchange.SetContractType(FuturesCode)  # 訂閱期貨品種
bar_arr = exchange.GetRecords()  # 獲取K線數組
if not bar_arr or len(bar_arr) < Cycle:
    return  # 如果沒有獲取到K線數據或者K線數據太短就返回
last_bar = bar_arr[len(bar_arr) - 1]  # 最新的K線
last_bar_close = last_bar['Close']  # 最新K線的收盤價
if last_bar_time != last_bar['Time']:  # 如果產生了新的K線
    hh = TA.Highest(bar_arr, Cycle, 'High')  # 最高價
    hc = TA.Highest(bar_arr, Cycle, 'Close')  # 最高的收盤價
    ll = TA.Lowest(bar_arr, Cycle, 'Low')  # 最低價
    lc = TA.Lowest(bar_arr, Cycle, 'Close')  # 最低的收盤價
    Range = max(hh - lc, hc - ll)  # 計算范圍
    up_line = _N(last_bar['Open'] + Ks * Range)  # 計算上軌
    down_line = _N(last_bar['Open'] - Kx * Range)  # 計算下軌
    last_bar_time = last_bar['Time']  # 更新最后時間戳

下單交易
下單交易很簡單,使用if語句判斷當前的持倉狀態和價格與上下軌的相互位置關系來開平倉。同樣的在下單交易之前也需要設置交易方向和類型,即:開多、開空、平多、平空。最后下單之后重置虛擬持倉的狀態。

if mp == 0 and last_bar_close >= up_line:
    exchange.SetDirection("buy")  # 設置交易方向和類型
    exchange.Buy(last_bar_close, 1)  # 開多單
    mp = 1  # 設置虛擬持倉的值,即有多單
if mp == 0 and last_bar_close <= down_line:
    exchange.SetDirection("sell")  # 設置交易方向和類型
    exchange.Sell(last_bar_close - 1, 1)  # 開空單
    mp = -1  # 設置虛擬持倉的值,即有空單
if mp == 1 and last_bar_close <= down_line:
    exchange.SetDirection("closebuy")  # 設置交易方向和類型
    exchange.Sell(last_bar_close - 1, 1)  # 平多單
    mp = 0  # 設置虛擬持倉的值,即空倉
if mp == -1 and last_bar_close >= up_line:
    exchange.SetDirection("closesell")  # 設置交易方向和類型
    exchange.Buy(last_bar_close, 1)  # 平空單
    mp = 0  # 設置虛擬持倉的值,即空倉

策略回測

測試環境

  • 交易品種:螺紋鋼指數

  • 時間:2015年02月22日~2019年12月06日

  • 周期:一小時

  • 滑點:開平倉各2跳

  • 手續費:交易所2倍
    如何使用Python實現Dual Thrust 區間突破策略
    績效報告
    如何使用Python實現Dual Thrust 區間突破策略
    資金曲線
    如何使用Python實現Dual Thrust 區間突破策略

感謝各位的閱讀!關于“如何使用Python實現Dual Thrust 區間突破策略”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

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

AI

新河县| 中阳县| 东源县| 肃宁县| 泗阳县| 德昌县| 利川市| 仙游县| 南皮县| 和平县| 任丘市| 嘉定区| 广州市| 疏勒县| 陆川县| 民权县| 广元市| 永登县| 大渡口区| 江门市| 深泽县| 南华县| 土默特左旗| 成都市| 托克逊县| 鄂托克前旗| 钟山县| 芜湖县| 德令哈市| 浦东新区| 潮州市| 芒康县| 南川市| 雷州市| 茌平县| 永丰县| 赤城县| 武定县| 福建省| 沛县| 固安县|