Estratégia de equilíbrio de plataforma única da versão Python

Autora:FMZ~Lydia, Criado: 2022-12-02 21:38:52, Atualizado: 2023-09-20 11:14:48

Single Platform Balance Strategy of Python Version

Versão JavaScript

Endereço estratégico:https://www.fmz.com/strategy/345

Neste artigo, vamos praticar a portação de uma estratégia JavaScript simples. Através da portação de estratégia, podemos nos familiarizar mais com a chamada da interface da plataforma de negociação FMZ Quant, e entender as ligeiras diferenças entre as diferentes linguagens na estratégia de desenvolvimento da plataforma.

Descrição da estratégia

Descrição citada da versão JavaScript:

Isso requer abrir uma posição. Por exemplo, se a conta tiver 5000 yuans e uma moeda, se o valor da moeda for maior do que o saldo da conta de 5000 yuans e a diferença de preço exceder o valor limite, por exemplo, se a moeda agora valer 6000 yuans, então venda (6000-5000)/6000/2 moedas, indicando que a moeda se valorizou e podemos converter o dinheiro de volta. Se a moeda se depreciou, por exemplo, 4000 yuans, então compramos (5000-4000)/4000/2 moedas. Se a moeda diminuir, compre algumas. Se subir novamente, venda novamente, como o saldo, os dois lados têm coberturas diferentes, então eu chamo isso de estratégia de equilíbrio.

O princípio da estratégia é muito simples. O código da versão JavaScript não é longo, apenas mais de 70 linhas. A estratégia da linguagem Python com uma gramática mais concisa é transplantada, e o código é muito mais curto, o que é muito adequado para iniciantes aprenderem.JavaScript/C++/PythonPortanto, dominar mais linguagens de desenvolvimento não é apenas útil para estratégias de aprendizagem, pesquisa e desenvolvimento, mas também familiar com as várias interfaces API da plataforma.

Código de estratégia

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

O código começa com

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

Ele se refere à configuração de backtesting, o que significa que a configuração de backtesting (configurações) é salva na forma de código e configurada automaticamente de acordo com a configuração durante o backtesting. Referência:https://www.fmz.com/bbs-topic/859

Os parâmetros desta estratégia são completamente consistentes com a versão JavaScript. O código da estratégia também é transplantado frase por frase. A estrutura do programa não mudou. Você pode comparar as estratégias escritas em diferentes idiomas sentença por sentença.

Testes de retrocesso

Configuração de parâmetros

Single Platform Balance Strategy of Python Version

Estatísticas

Single Platform Balance Strategy of Python Version Single Platform Balance Strategy of Python Version

Endereço estratégico:https://www.fmz.com/strategy/183374

A estratégia é apenas para referência, aprendizagem e testes de retorno.


Relacionado

Mais informações