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

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

img

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

img

Estatísticas

img img

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

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


Relacionados

Mais.