avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Versión en Python de la estrategia de equilibrio de plataforma única

Creado el: 2020-02-05 10:02:03, Actualizado el: 2023-10-12 21:20:47
comments   1
hits   2701

Versión en Python de la estrategia de equilibrio de plataforma única

Versión en Python de la estrategia de equilibrio de plataforma única

Versión de JavaScript

Dirección de estrategia: https://www.fmz.com/strategy/345

En este artículo, practicaremos la portabilidad de una estrategia de JavaScript simple. Al trasplantar estrategias, se familiarizará más con las llamadas de la interfaz de la Plataforma de Comercio Cuantitativo de Inventor y comprenderá las ligeras diferencias entre los diferentes lenguajes al desarrollar estrategias en la plataforma. De hecho, la diferencia entre la estrategia de la versión de JavaScript y la versión de Python La estrategia es muy pequeña porque las llamadas de interfaz son básicamente las mismas.

Descripción de la estrategia

Citando la versión en JavaScript de las instrucciones:

Para ello es necesario abrir una posición. Por ejemplo, si la cuenta tiene 5.000 yuanes y 1 moneda, si el valor de la moneda es mayor que el saldo de la cuenta de 5.000 y la diferencia de precio supera el umbral, por ejemplo, la moneda ahora vale 6.000 yuanes, luego venda (6.000-5.000)/6.000. /2 monedas, significa que la moneda se ha apreciado, cambie el dinero nuevamente, si la moneda se deprecia, por ejemplo, a 4000 yuanes, compre (5000-4000)/4000/2 monedas, volver a comprar algunas cuando la moneda caiga, si vuelve a subir, la venderé de nuevo, como un equilibrio, con diferentes coberturas en ambos lados, por eso lo llamé una estrategia equilibrada.

El principio de la estrategia es muy simple y la versión JavaScript del código no es larga, solo más de 70 líneas. Trasplantado a la estrategia del lenguaje Python con una sintaxis más concisa, el código es más corto y muy adecuado para que lo aprendan los principiantes. Hay muchos códigos compartidos por los desarrolladores en la plataforma de negociación cuantitativa de Inventor, y el lenguaje admiteJavaScript/C++/PythonEtc., por lo que dominar un lenguaje de desarrollo más no solo es útil para el aprendizaje, la investigación y las estrategias de desarrollo, sino que también le permite familiarizarse más con las distintas interfaces API de la plataforma.

Código de estrategia

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

El código comienza con

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

Es la configuración del backtest, lo que significa que la configuración del backtest (configuración) se guarda en forma de código y el backtest se configura automáticamente de acuerdo con esta configuración. Esta parte se puede eliminar. Si se elimina, deberá configurar manualmente la información de configuración de la prueba retrospectiva en la página de prueba retrospectiva durante la prueba retrospectiva. Referencia: https://www.fmz.com/bbs-topic/859

Los parámetros de esta estrategia son exactamente los mismos que los de la versión de JavaScript. El código de la estrategia también se trasplanta frase por frase y la estructura del programa no ha cambiado. Puedes compararlas frase por frase para ver las diferencias entre las estrategias escritas en diferentes idiomas.

Prueba retrospectiva

Configuración de parámetros Versión en Python de la estrategia de equilibrio de plataforma única

Estadística Versión en Python de la estrategia de equilibrio de plataforma única

Versión en Python de la estrategia de equilibrio de plataforma única

Dirección de estrategia: https://www.fmz.com/strategy/183374

La estrategia es solo de referencia, para realizar pruebas retrospectivas y pruebas. Si te interesa, puedes optimizarla y actualizarla.