Die Balance-Strategie für die Python-Plattform

Schriftsteller:Kleine Träume, Datum: 03.02.2020
Tags:

Verweise auf die Ausgleichspolitik der JavaScript-Tabletplattform

Das erfordert die Aufstellung von Lager, zum Beispiel, wenn es 5.000 Dollar auf dem Konto gibt, und 1 Münze, wenn der Wert der Münze größer ist als der Kontostand von 5.000 und die Differenz über dem Devaluationspunkt liegt, zum Beispiel, wenn die Münze jetzt 6.000 Dollar wert ist, dann verkaufen wir sie, wenn die Münze ansteigt, tauschen wir das Geld zurück, wenn die Münze ansteigt, zum Beispiel 4.000 Dollar, dann kaufen wir sie, wenn die Münze sinkt, dann kaufen wir etwas zurück, wenn sie ansteigt, dann verkaufen wir sie wieder, als wäre es ein Niedrigkurs, eine verschiedene Absicherung auf beiden Seiten, also nenne ich das eine Ausgleichsstrategie.

Der Post-Adress: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)

Mehr