91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何使用Python實現一個簡單的商品期貨布林指標突破策略

發布時間:2021-11-12 10:35:48 來源:億速云 閱讀:310 作者:小新 欄目:互聯網科技

這篇文章主要介紹如何使用Python實現一個簡單的商品期貨布林指標突破策略,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

布林指標突破策略,思路非常簡單。使用Python語言編寫該策略,也非常容易實現,加上回測配置信息,有70行代碼,實際可以更加精簡,鑒于教學策略,沒有使用難懂的Python語法,使用的是比較基礎的語句、結構。便于使用Python語言進行商品期貨程序化交易的學習者借鑒、參考。鑒于文章篇幅,策略結構,說明注釋,直接寫在代碼注釋中。

策略:

使用BOLL指標上下軌作為突破邊界,突破上軌平空、做多。突破下軌平多,做空。用于捕捉趨勢行情,所以震蕩行情中會有回撤。

策略實現:

'''backtest
start: 2019-07-01 00:00:00
end: 2019-11-26 00:00:00
period: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''
IDLE = 0    # 定義一個 標記量,表示空閑狀態
LONG = 1    # 定義一個 標記量,表示持多倉狀態
SHORT = 2   # 定義一個 標記量,表示持空倉狀態

def CancelAll():     # 實現一個取消所有掛單的功能函數
    while True:      # 循環執行
        orders = _C(exchange.GetOrders)    # 讀取當前所有掛單,orders 是一個數組
        if len(orders) == 0 :              # 判斷這個數組長度是不是為0,如果為0表示這個數組中沒有掛單了
            break                          # 跳出while循環,沒有掛單說明不需要取消了
        for order in orders :              # 通過上面的if檢測,執行到這里,說明orders數組的長度不為0,有掛單,遍歷orders數組
            exchange.CancelOrder(order.Id) # 根據遍歷時訂單信息中的Id,取消該Id的訂單
            Sleep(1000)                    # 控制一下取消頻率,每次取消時暫停1秒

def main():                                # 策略主函數,策略啟動后從這里開始執行
    state = IDLE                           # 給策略定義一個狀態變量,初始化為空閑狀態
    direction = ""                         # 給策略定義一個下單方向變量,初始化為空字符串
    while True:                            # 執行策略邏輯循環
        if exchange.IO("status"):          # 檢測是否與期貨公司服務器連接,登錄成功
            LogStatus(_D(), "已經連接")      
            exchange.SetContractType("rb2001")    # 設置要操作的合約,這里設置為rb2001,也可以做成參數,由策略參數上進行設置
            records = _C(exchange.GetRecords)     # 獲取K線數據,策略參數界面上設置K線周期1小時,這里獲取的就是1小時K線數據
            
            if len(records) < 21:                 # 使用BOLL指標的默認參數,所以K線數據的Bar數量要足夠21才能計算出有效的BOLL指標
                continue                          # 不滿足條件的情況下,continue跳過后面的代碼,重復循環

            boll = TA.BOLL(records)               # 當符合 len(records) >= 21 時,執行到這里,使用TA.BOLL計算布林指標數據,boll是一個二維列表,boll[0]是上軌,boll[1]是中線,boll[2]是下軌
            ext.PlotRecords(records, "K")         # 使用畫線類庫接口,畫K線,畫線類庫代碼可以在策略廣場找到
            ext.PlotLine("up", boll[0][-2], records[-2].Time)     # 使用畫線類庫接口,畫上軌
            ext.PlotLine("mid", boll[1][-2], records[-2].Time)    # 畫中線
            ext.PlotLine("down", boll[2][-2], records[-2].Time)   # 畫下軌
            pos = _C(exchange.GetPosition)                        # 讀取當前賬戶持倉信息

            if len(pos) == 1 :                                            # 如果當前賬戶有持倉,無持倉時,len(pos) 等于0
                if pos[0].Type == PD_LONG or pos[0].Type == PD_LONG_YD:   # 根據持倉數據中的持倉方向,設置策略狀態變量state 
                    state = LONG                                          # 設置為持有多倉狀態
                elif pos[0].Type == PD_SHORT or pos[0].Type == PD_SHORT_YD:
                    state = SHORT                                         # 設置為持有空倉狀態
            elif len(pos) == 0 :                                          # 無持倉時
                state = IDLE                                              # 持倉狀態設置為空閑
            else :
                raise "error len(pos) > 1"                                # 如果檢測到多個倉位,報錯,單獨跑這個策略,是不會有多個倉位的,如果出現說明異常

            if records[-2].Close > boll[0][-2] and (state == IDLE or state == SHORT):   # 如果當前是空閑狀態或者持有空倉狀態,K線BAR完成時確定價格突破上軌進行下一步判斷
                # 平空倉(如果是持有空倉的狀態),開多倉(如果是空閑狀態),設置direction交易方向變量
                if state == IDLE:
                    direction = "buy"          # 設置交易方向變量為開多倉
                else :
                    direction = "closesell"    # 設置交易方向變量為平空倉
                exchange.SetDirection(direction)            # 調用交易方向設置函數,設置方向
                exchange.Buy(records[-1].Close + 2, 1)      # 根據當前價格,加兩跳(對于rb這個品種來說)吃單,下單量為1手,exchange.Buy 下單函數,第一個參數為價格,第二個參數為下單量
                CancelAll()                                 # 下單后嘗試取消所有掛單(未成交)
            elif records[-2].Close < boll[2][-2] and (state == IDLE or state == LONG):  # 判斷突破下軌 
                # 平多倉(如果是持有多倉的狀態),開空倉(如果是空閑狀態),設置direction交易方向變量
                if state == IDLE:
                    direction = "sell"
                else :
                    direction = "closebuy"
                exchange.SetDirection(direction)
                exchange.Sell(records[-1].Close - 2, 1)
                CancelAll()  

        else :
            LogStatus(_D(), "未連接")      # 如果未連接上期貨公司服務器,在機器人狀態欄上顯示時間,和未連接信息
        Sleep(500)                        # 每次循環暫停500毫秒,用來控制程序邏輯輪轉頻率

回測

使用rb2001合約回測
如何使用Python實現一個簡單的商品期貨布林指標突破策略

如何使用Python實現一個簡單的商品期貨布林指標突破策略

注意

需要注意的是,策略為了教學用途,設計上按照最簡單的原則設計。下單量使用的是1手,如果下單量是多手,可以思考下可能會帶來什么問題,應該如何改造升級,應對此類問題。

該策略引用了「畫線類庫」,策略需要在「模板欄」中勾選上這個類庫,畫線類庫可以在策略廣場中搜索找到。

以上是“如何使用Python實現一個簡單的商品期貨布林指標突破策略”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

寿宁县| 山西省| 庆阳市| 灵宝市| 沈丘县| 枣阳市| 柳林县| 麻阳| 视频| 浙江省| 屏东市| 中山市| 扶余县| 乐亭县| 普陀区| 通城县| 金川县| 治多县| 沙湾县| 七台河市| 永定县| 石门县| 巩义市| 舒城县| 平利县| 汤原县| 晋州市| 南投县| 屯昌县| 聊城市| 深泽县| 南岸区| 白城市| 中西区| 章丘市| 深水埗区| 安溪县| 八宿县| 滁州市| 綦江县| 台前县|