4
Подписаться
1271
Подписчики

Версия Python стратегии равновесия одной платформы

Создано: 2020-02-05 10:02:03, Обновлено: 2023-10-12 21:20:47
comments   1
hits   2701

Версия Python стратегии равновесия одной платформы

Версия Python стратегии равновесия одной платформы

JavaScript-версия

Адрес стратегии: https://www.fmz.com/strategy/345

В этой статье давайте попрактикуемся в портировании простой стратегии JavaScript. Трансплантируя стратегии, вы лучше познакомитесь с вызовами интерфейса Inventor Quantitative Trading Platform и поймете небольшие различия между разными языками при разработке стратегий на платформе. Фактически, разница между версией JavaScript и версией Python Стратегия очень мала, поскольку вызовы интерфейса в основном одинаковы.

Описание стратегии

Цитата из JavaScript-версии инструкции:

Для этого требуется открыть позицию. Например, если на счете 5000 юаней и 1 монета, если стоимость монеты больше, чем остаток на счете 5000 и разница в цене превышает порог, например, монета теперь стоит 6000 юаней, затем продайте (6000-5000)/6000. /2 монеты, это означает, что монета выросла, обменяйте деньги обратно, если монета обесценится, например, до 4000 юаней, купите (5000-4000)/4000/2 монеты, выкупаю часть, когда монета падает, если она снова вырастет, я снова ее продам, как баланс, с разными хеджами с обеих сторон, поэтому я назвал это сбалансированной стратегией.

Принцип стратегии очень прост, а версия кода JavaScript невелика, всего более 70 строк. Перевод на язык Python с более лаконичным синтаксисом, код короче и очень подходит для новичков. Разработчики делятся множеством кодов на Inventor Quantitative Trading Platform, и язык поддерживаетJavaScript/C++/Pythonи т. д., поэтому освоение еще одного языка разработки не только полезно для обучения, исследования и разработки стратегий, но и позволяет вам лучше ознакомиться с различными API-интерфейсами платформы.

Стратегический код

'''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)

Код начинается с

'''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}]
'''

Это конфигурация бэктеста, то есть конфигурация (настройки) бэктеста сохраняются в виде кода, и бэктест автоматически настраивается в соответствии с этой настройкой. Эту часть можно удалить. Если удалить, вам нужно будет вручную задать информацию о конфигурации бэктеста на странице бэктеста во время бэктестинга. Ссылка: https://www.fmz.com/bbs-topic/859

Параметры этой стратегии точно такие же, как и у версии JavaScript. Код стратегии также трансплантирован предложение за предложением, и структура программы не изменилась. Вы можете сравнить их предложение за предложением, чтобы увидеть различия между стратегиями, написанными на разных языках. языки.

Бэктестинг

Конфигурация параметров Версия Python стратегии равновесия одной платформы

Статистика Версия Python стратегии равновесия одной платформы

Версия Python стратегии равновесия одной платформы

Адрес стратегии: https://www.fmz.com/strategy/183374

Стратегия предназначена только для справки, бэктестинга и тестирования. Если вам интересно, вы можете оптимизировать и обновить ее.