Adresse stratégique:https://www.fmz.com/strategy/345
Dans cet article, nous allons pratiquer le porting d'une stratégie JavaScript simple. Grâce au porting de stratégie, nous pouvons nous familiariser avec l'appel de l'interface de la plateforme de trading FMZ Quant, et comprendre les légères différences entre les différents langages dans la stratégie de développement de la plateforme. En fait, la différence entre la version JavaScript et la version Python est très faible, car les appels d'interface sont fondamentalement les mêmes.
Description citée dans la version JavaScript:
Cela nécessite d'ouvrir une position. Par exemple, si le compte a 5000 yuans et une devise, si la valeur de la devise est supérieure au solde du compte de 5000 yuans et que la différence de prix dépasse la valeur de seuil, par exemple, si la devise vaut maintenant 6000 yuans, puis vendre (6000-5000) / 6000/2 devises, ce qui indique que la devise s'est appréciée et nous pouvons convertir l'argent. Si la devise s'est dépréciée, par exemple, 4000 yuans, alors nous achetons (5000-4000) / 4000/2 devises. Si la devise diminue, acheter un peu. Si elle augmente à nouveau, vendre à nouveau, Comme le solde, les deux côtés ont des couvertures différentes, donc je l'appelle la stratégie d'équilibre.
Le principe de la stratégie est très simple. Le code de la version JavaScript n'est pas long, seulement plus de 70 lignes. La stratégie de langage Python avec une grammaire plus concise est transplantée, et le code est beaucoup plus court, ce qui est très approprié pour les débutants à apprendre.JavaScript
/C++
/Python
Par conséquent, maîtriser plus de langages de développement n'est pas seulement utile pour les stratégies d'apprentissage, de recherche et de développement, mais aussi pour se familiariser avec les différentes interfaces API de la plateforme.
'''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)
Le code commence par:
'''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}]
'''
Il fait référence à la configuration de backtesting, ce qui signifie que la configuration de backtesting (paramètres) est enregistrée sous forme de code et configurée automatiquement en fonction du paramètre pendant le backtesting. Cette partie peut être supprimée. Si elle est supprimée, nous devons définir manuellement les informations de configuration de backtesting sur la page de backtesting. Nom de l'établissement:https://www.fmz.com/bbs-topic/859
Les paramètres de cette stratégie sont complètement compatibles avec la version JavaScript. Le code de stratégie est également transplanté phrase par phrase. La structure du programme n'a pas changé. Vous pouvez comparer les stratégies écrites dans différentes langues phrase par phrase.
Configuration des paramètres
Les statistiques
Adresse stratégique:https://www.fmz.com/strategy/183374
La stratégie est à titre de référence, d'apprentissage et de test de retour seulement.