Type/to search
8
Follow
1364
Followers
Versión en Python de la estrategia de equilibrio de plataforma única
Discussions
Created 2020-02-05 10:02:03  Updated 2023-10-12 21:20:47
 1
 2965

img

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
img

Estadística
img

img

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.

Related Recommendations
Comment
All comments (1)

    好牛啊

    4 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)