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

溫馨提示×

溫馨提示×

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

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

Python中怎么實現一個網格策略

發布時間:2021-07-10 14:45:31 來源:億速云 閱讀:223 作者:Leah 欄目:互聯網科技

今天就跟大家聊聊有關Python中怎么實現一個網格策略,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

策略代碼

'''backtest
start: 2019-07-01 00:00:00
end: 2020-01-03 00:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT"}]
'''

import json

# 參數
beginPrice = 5000   # 網格區間開始價格
endPrice = 8000     # 網格區間結束價格
distance = 20       # 每個網格節點的價格距離
pointProfit = 50    # 每個網格節點的利潤差價
amount = 0.01       # 每個網格節點的掛單量
minBalance = 300    # 賬戶最小資金余額(買入時)

# 全局變量
arrNet = []
arrMsg = []
acc = None

def findOrder (orderId, NumOfTimes, ordersList = []) :
    for j in range(NumOfTimes) :
        orders = None
        if len(ordersList) == 0:
            orders = _C(exchange.GetOrders)
        else :
            orders = ordersList
        for i in range(len(orders)):
            if orderId == orders[i]["Id"]:
                return True
        Sleep(1000)
    return False

def cancelOrder (price, orderType) :
    orders = _C(exchange.GetOrders)
    for i in range(len(orders)) : 
        if price == orders[i]["Price"] and orderType == orders[i]["Type"]: 
            exchange.CancelOrder(orders[i]["Id"])
            Sleep(500)

def checkOpenOrders (orders, ticker) :
    global arrNet, arrMsg
    for i in range(len(arrNet)) : 
        if not findOrder(arrNet[i]["id"], 1, orders) and arrNet[i]["state"] == "pending" :
            orderId = exchange.Sell(arrNet[i]["coverPrice"], arrNet[i]["amount"], arrNet[i], ticker)
            if orderId :
                arrNet[i]["state"] = "cover"
                arrNet[i]["id"] = orderId                
            else :
                # 撤銷
                cancelOrder(arrNet[i]["coverPrice"], ORDER_TYPE_SELL)
                arrMsg.append("掛單失敗!" + json.dumps(arrNet[i]) + ", time:" + _D())

def checkCoverOrders (orders, ticker) :
    global arrNet, arrMsg
    for i in range(len(arrNet)) : 
        if not findOrder(arrNet[i]["id"], 1, orders) and arrNet[i]["state"] == "cover" :
            arrNet[i]["id"] = -1
            arrNet[i]["state"] = "idle"
            Log(arrNet[i], "節點平倉,重置為空閑狀態。", "#FF0000")


def onTick () :
    global arrNet, arrMsg, acc

    ticker = _C(exchange.GetTicker)    # 每次獲取當前最新的行情
    for i in range(len(arrNet)):       # 遍歷所有網格節點,根據當前行情,找出需要掛單的位置,掛買單。
        if i != len(arrNet) - 1 and arrNet[i]["state"] == "idle" and ticker.Sell > arrNet[i]["price"] and ticker.Sell < arrNet[i + 1]["price"]:
            acc = _C(exchange.GetAccount)
            if acc.Balance < minBalance :     # 如果錢不夠了,只能跳出,什么都不做了。
                arrMsg.append("資金不足" + json.dumps(acc) + "!" + ", time:" + _D())
                break

            orderId = exchange.Buy(arrNet[i]["price"], arrNet[i]["amount"], arrNet[i], ticker) # 掛買單
            if orderId : 
                arrNet[i]["state"] = "pending"   # 如果買單掛單成功,更新網格節點狀態等信息
                arrNet[i]["id"] = orderId
            else :
                # 撤單
                cancelOrder(arrNet[i]["price"], ORDER_TYPE_BUY)    # 使用撤單函數撤單
                arrMsg.append("掛單失敗!" + json.dumps(arrNet[i]) + ", time:" + _D())
    Sleep(1000)
    orders = _C(exchange.GetOrders)    
    checkOpenOrders(orders, ticker)    # 檢測所有買單的狀態,根據變化做出處理。
    Sleep(1000)
    orders = _C(exchange.GetOrders)    
    checkCoverOrders(orders, ticker)   # 檢測所有賣單的狀態,根據變化做出處理。

    # 以下為構造狀態欄信息,可以查看FMZ API 文檔。
    tbl = {
        "type" : "table", 
        "title" : "網格狀態",
        "cols" : ["節點索引", "詳細信息"], 
        "rows" : [], 
    }    

    for i in range(len(arrNet)) : 
        tbl["rows"].append([i, json.dumps(arrNet[i])])

    errTbl = {
        "type" : "table", 
        "title" : "記錄",
        "cols" : ["節點索引", "詳細信息"], 
        "rows" : [], 
    }

    orderTbl = {
     	"type" : "table", 
        "title" : "orders",
        "cols" : ["節點索引", "詳細信息"], 
        "rows" : [],    
    }

    while len(arrMsg) > 20 : 
        arrMsg.pop(0)

    for i in range(len(arrMsg)) : 
        errTbl["rows"].append([i, json.dumps(arrMsg[i])])    

    for i in range(len(orders)) : 
        orderTbl["rows"].append([i, json.dumps(orders[i])])

    LogStatus(_D(), "\n", acc, "\n", "arrMsg length:", len(arrMsg), "\n", "`" + json.dumps([tbl, errTbl, orderTbl]) + "`")


def main ():         # 策略執行從這里開始
    global arrNet
    for i in range(int((endPrice - beginPrice) / distance)):        # for 這個循環根據參數構造了網格的數據結構,是一個列表,儲存每個網格節點,每個網格節點的信息如下:
        arrNet.append({
            "price" : beginPrice + i * distance,                    # 該節點的價格
            "amount" : amount,                                      # 訂單數量
            "state" : "idle",    # pending / cover / idle           # 節點狀態
            "coverPrice" : beginPrice + i * distance + pointProfit, # 節點平倉價格
            "id" : -1,                                              # 節點當前相關的訂單的ID
        })
        
    while True:    # 構造好網格數據結構后,進入策略主要循環
        onTick()   # 主循環上的處理函數,主要處理邏輯
        Sleep(500) # 控制輪詢頻率

策略主要設計思路是,根據自己維護的這個網格數據結構,對比GetOrders接口返回的當前掛單列表。分析掛出的訂單變化(成交與否),更新網格數據結構,做出后續操作。并且掛出的訂單不會撤銷,直到成交,即使價格偏離也不撤銷,因為數字貨幣市場經常有插針的情況,這些掛單也有可能接到插針的單子(如果交易所有掛單數量限制,那就要調整了)。

策略數據可視化,使用了LogStatus函數把數據實時顯示在狀態欄上。

    tbl = {
        "type" : "table", 
        "title" : "網格狀態",
        "cols" : ["節點索引", "詳細信息"], 
        "rows" : [], 
    }    

    for i in range(len(arrNet)) : 
        tbl["rows"].append([i, json.dumps(arrNet[i])])

    errTbl = {
        "type" : "table", 
        "title" : "記錄",
        "cols" : ["節點索引", "詳細信息"], 
        "rows" : [], 
    }

    orderTbl = {
     	"type" : "table", 
        "title" : "orders",
        "cols" : ["節點索引", "詳細信息"], 
        "rows" : [],    
    }

構造了三個表格,第一個表格顯示當前網格數據結構中每個節點的信息,第二個表格顯示異常信息,第三個表格顯示交易所實際掛單信息。

回測測試

Python中怎么實現一個網格策略

Python中怎么實現一個網格策略

看完上述內容,你們對Python中怎么實現一個網格策略有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

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

AI

天台县| 五原县| 三明市| 内江市| 合江县| 婺源县| 松桃| 股票| 思茅市| 临安市| 永顺县| 浦东新区| 富蕴县| 定南县| 瑞丽市| 徐州市| 安陆市| 西昌市| 喀喇| 临海市| 巢湖市| 黄平县| 绵竹市| 德阳市| 成武县| 宜丰县| 胶南市| 清徐县| 江城| 桑植县| 杭州市| 桃园县| 彭泽县| 城市| 友谊县| 三明市| 鲁山县| 依安县| 定陶县| 英超| 寻乌县|