В процессе загрузки ресурсов... загрузка...

Платформа сбалансированности Python (обучение)

Автор:Изобретатели количественного измерения - мечты, Дата: 2020-02-03 22:43:38
Тэги:

Ссылка на политику сбалансированности платформы JavaScript

Это требует создания хранилища, например, 5000 долларов в счете, и 1 монета, и если стоимость монеты больше, чем баланс в счете, 5000, и разница превышает порог, например, монета сейчас стоит 6000 долларов, продать, чтобы показать, что монета выросла, обменять деньги обратно, если она обесценилась, например, 4000 долларов, купить, купить, если она упала, купить еще, если она упала, продать, как будто это нечто вроде нефтяного баланса, так что я называю это балансирующей стратегией.

Название статьи: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)

Больше