Estrategia de equilibrio de plataforma única de la versión de Python

El autor:- ¿ Por qué?, Creado: 2022-12-02 21:38:52, Actualizado: 2023-09-20 11:14:48

img

Versión de JavaScript

Dirección estratégica:https://www.fmz.com/strategy/345

En este artículo, vamos a practicar la portación de una estrategia JavaScript simple. A través de la portación de estrategias, podemos familiarizarnos más con la llamada de la interfaz de la plataforma de comercio de FMZ Quant, y entender las ligeras diferencias entre los diferentes lenguajes en la estrategia de desarrollo de la plataforma. De hecho, la diferencia entre la versión JavaScript y la versión Python es muy pequeña, porque las llamadas de la interfaz son básicamente las mismas.

Descripción de la estrategia

Descripción citada de la versión JavaScript:

Esto requiere abrir una posición. Por ejemplo, si la cuenta tiene 5000 yuanes y una moneda, si el valor de la moneda es mayor que el saldo de la cuenta de 5000 yuanes y la diferencia de precio excede el valor umbral, por ejemplo, si la moneda ahora vale 6000 yuanes, luego venda (6000-5000) / 6000/2 monedas, lo que indica que la moneda se ha apreciado y podemos convertir el dinero de vuelta. Si la moneda se ha depreciado, por ejemplo, 4000 yuanes, entonces compramos (5000-4000) / 4000/2 monedas. Si la moneda disminuye, compre algunas. Si sube de nuevo, venda de nuevo, al igual que el saldo, las dos partes tienen diferentes cobertura, así que lo llamo la estrategia de equilibrio.

El principio de la estrategia es muy simple. El código de la versión JavaScript no es largo, sólo más de 70 líneas. La estrategia del lenguaje Python con una gramática más concisa se trasplanta, y el código es mucho más corto, lo que es muy adecuado para los principiantes para aprender.JavaScript/C++/PythonPor lo tanto, dominar más lenguajes de desarrollo no solo es útil para las estrategias de aprendizaje, investigación y desarrollo, sino también para familiarizarse con las diversas 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}]
'''

Se refiere a la configuración de backtesting, lo que significa que la configuración de backtesting (configuración) se guarda en forma de código y se configura automáticamente de acuerdo con la configuración durante la backtesting. En el caso de los vehículos de motor:https://www.fmz.com/bbs-topic/859

Los parámetros de esta estrategia son completamente consistentes con la versión de JavaScript. El código de la estrategia también se trasplanta oración por oración. La estructura del programa no ha cambiado. Puede comparar las estrategias escritas en diferentes idiomas oración por oración.

Pruebas de retroceso

Configuración de parámetros

img

Las estadísticas

img img

Dirección estratégica:https://www.fmz.com/strategy/183374

La estrategia es para referencia, aprendizaje y pruebas de retroceso sólo.


Relacionados

Más.