Stratégie d'équilibrage de la plateforme unique de la version Python

Auteur:Je ne sais pas., Créé: 2021-12-02 21:38:52, Mis à jour: 2023-09-20 11:14:48

img

Version JavaScript

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 de la stratégie

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++/PythonPar 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.

Code de stratégie

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

Tests de retour

Configuration des paramètres

img

Les statistiques

img img

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.


Relationnée

Plus de