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 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++
/Python
Por 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.
'''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.
Configuración de parámetros
Las estadísticas
Dirección estratégica:https://www.fmz.com/strategy/183374
La estrategia es para referencia, aprendizaje y pruebas de retroceso sólo.