avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

Version Python de la stratégie d'équilibre à plateforme unique

Créé le: 2020-02-05 10:02:03, Mis à jour le: 2023-10-12 21:20:47
comments   1
hits   2701

Version Python de la stratégie d’équilibre à plateforme unique

Version Python de la stratégie d’équilibre à plateforme unique

Version JavaScript

Adresse de la stratégie : https://www.fmz.com/strategy/345

Dans cet article, pratiquons le portage d’une stratégie JavaScript simple. En transplantant des stratégies, vous vous familiariserez davantage avec les appels de l’interface de la plateforme de trading quantitative Inventor et comprendrez les légères différences entre les différents langages lors du développement de stratégies sur la plateforme. En fait, la différence entre la stratégie de la version JavaScript et la version Python la stratégie est très petite car les appels d’interface sont fondamentalement les mêmes.

Description de la stratégie

Citation de la version JavaScript des instructions :

Cela nécessite l’ouverture d’une position. Par exemple, si le compte contient 5 000 yuans et 1 pièce, si la valeur de la pièce est supérieure au solde du compte de 5 000 et que la différence de prix dépasse le seuil, par exemple, la pièce vaut désormais 6 000 yuans, puis vendez (6 000-5 000)/6 000./2 pièces, cela signifie que la pièce s’est appréciée, échangez l’argent, si la pièce se déprécie, par exemple, à 4 000 yuans, achetez (5 000-4 000)/4 000/2 pièces, j’en rachète quand la pièce chute, si elle remonte, je la revends, comme un solde, avec des couvertures différentes des deux côtés, donc je l’ai appelé une stratégie équilibrée.

Le principe de la stratégie est très simple, et la version JavaScript du code n’est pas longue, seulement plus de 70 lignes. Transposé dans la stratégie du langage Python avec une syntaxe plus concise, le code est plus court et très adapté aux débutants. Il existe de nombreux codes partagés par les développeurs sur la plateforme de trading quantitatif Inventor, et le langage prend en chargeJavaScript/C++/PythonEtc., maîtriser un langage de développement supplémentaire est non seulement utile pour les stratégies d’apprentissage, de recherche et de développement, mais vous permet également de vous familiariser davantage 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 s’agit de la configuration du backtest, ce qui signifie que la configuration du backtest (paramètres) est enregistrée sous forme de code et que le backtest est automatiquement configuré en fonction de ce paramètre. Cette partie peut être supprimée. Si elle est supprimée, vous devrez définir manuellement les informations de configuration du backtest sur la page du backtest pendant le backtest. Référence : https://www.fmz.com/bbs-topic/859

Les paramètres de cette stratégie sont exactement les mêmes que ceux de la version JavaScript. Le code de la stratégie est également transplanté phrase par phrase, et la structure du programme n’a pas changé. Vous pouvez les comparer phrase par phrase pour voir les différences entre les stratégies écrites dans différents langages. langues.

Backtesting

Configuration des paramètres Version Python de la stratégie d’équilibre à plateforme unique

Statistiques Version Python de la stratégie d’équilibre à plateforme unique

Version Python de la stratégie d’équilibre à plateforme unique

Adresse de la stratégie : https://www.fmz.com/strategy/183374

La stratégie est fournie à titre indicatif uniquement, pour les backtests et les tests. Si vous êtes intéressé, vous pouvez l’optimiser et la mettre à niveau.