Tài nguyên đang được tải lên... tải...

Phương pháp cân bằng nền tảng bảng phím Python (giảng dạy)

Tác giả:Những nhà phát minh định lượng - những giấc mơ nhỏ, Ngày: 2020-02-03 22:43:38
Tags:

Đề cập đến chính sách cân bằng nền tảng JavaScript

Điều này đòi hỏi phải xây dựng kho, ví dụ như tài khoản có 5.000 đô la, và một đồng xu, nếu giá trị của đồng xu lớn hơn số dư trong tài khoản là 5.000 và chênh lệch giá trị vượt quá mức định giá, ví dụ như đồng xu bây giờ có giá trị 6.000 đô la, bạn sẽ bán nó.

Địa chỉ của bài viết:https://www.fmz.com/bbs-topic/4986


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

InitAccount = None

def CancelPendingOrders():
    ret = False
    while True:
        orders = _C(exchange.GetOrders)
        if len(orders) == 0 :
            return ret

        for j in range(len(orders)):
            exchange.CancelOrder(orders[j].Id)
            ret = True
            if j < len(orders) - 1:
                Sleep(Interval)
    return ret 

def onTick():
    acc = _C(exchange.GetAccount)
    ticker = _C(exchange.GetTicker)
    spread = ticker.Sell - ticker.Buy
    diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2
    ratio = diffAsset / acc.Balance
    LogStatus("ratio:", ratio, _D())
    if abs(ratio) < threshold:
        return False
    if ratio > 0 :
        buyPrice = _N(ticker.Sell + spread, ZPrecision)
        buyAmount = _N(diffAsset / buyPrice, XPrecision)
        if buyAmount < MinStock:
            return False
        exchange.Buy(buyPrice, buyAmount, diffAsset, ratio)
    else :
        sellPrice = _N(ticker.Buy - spread, ZPrecision)
        sellAmount = _N(-diffAsset / sellPrice, XPrecision)
        if sellAmount < MinStock:
            return False 
        exchange.Sell(sellPrice, sellAmount, diffAsset, ratio)
    return True

def main():
    global InitAccount, LoopInterval
    InitAccount = _C(exchange.GetAccount)
    LoopInterval = max(LoopInterval, 1)
    while True:
        if onTick():
            Sleep(1000)
            CancelPendingOrders()
            Log(_C(exchange.GetAccount))
        Sleep(LoopInterval * 1000)

Thêm nữa