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

Version Python de la stratégie de poursuite des hauts et des bas

Créé le: 2020-01-11 14:49:08, Mis à jour le: 2024-12-12 20:57:43
comments   6
hits   7100

Version Python de la stratégie de poursuite des hauts et des bas

Version Python de la stratégie de poursuite des hauts et des bas

Les stratégies de tendance utilisent généralement divers indicateurs pour déterminer la direction du marché et utilisent les résultats de comparaison numérique de divers indicateurs comme signaux de trading. Cela conduira inévitablement à l’utilisation de paramètres et au calcul d’indicateurs. Étant donné que des paramètres sont utilisés, il y aura un ajustement. La stratégie fonctionne très bien dans certaines conditions de marché, mais si vous n’avez pas de chance et que la tendance du marché est très défavorable aux paramètres actuels, la stratégie peut être très peu performante. Par conséquent, à mon avis, la conception de la stratégie doit être aussi simple que possible, et une telle stratégie sera plus robuste. Aujourd’hui, nous allons partager une stratégie de tendance qui n’utilise pas d’indicateurs. Le code de la stratégie est très simple, seulement 40 lignes.

Code de stratégie :

import time

basePrice = -1
ratio = 0.05
acc = _C(exchange.GetAccount)
lastCancelAll = 0
minStocks = 0.01

def CancelAll():
    while True : 
        orders = _C(exchange.GetOrders)
        for i in range(len(orders)) :
            exchange.CancelOrder(orders[i]["Id"], orders[i])
        if len(orders) == 0 :
            break
        Sleep(1000)

def main():
    global basePrice, acc, lastCancelAll
    exchange.SetPrecision(2, 3)
    while True:
        ticker = _C(exchange.GetTicker)
        if basePrice == -1 :
            basePrice = ticker.Last
        if ticker.Last - basePrice > 0 and (ticker.Last - basePrice) / basePrice > ratio :
            acc = _C(exchange.GetAccount)
            if acc.Balance * ratio / ticker.Last > minStocks :
                exchange.Buy(ticker.Last, acc.Balance * ratio / ticker.Last)
                basePrice = ticker.Last
        if ticker.Last - basePrice < 0 and (basePrice - ticker.Last) / basePrice > ratio : 
            acc = _C(exchange.GetAccount)
            if acc.Stocks * ratio > minStocks :
                exchange.Sell(ticker.Last, acc.Stocks * ratio)
                basePrice = ticker.Last
        ts = time.time()
        if ts - lastCancelAll > 60 * 5 :
            CancelAll()
            lastCancelAll = ts 
        LogStatus(_D(), "\n", "行情信息:", ticker, "\n", "账户信息:", acc)
        Sleep(500)

Analyse simple de la stratégie

Le principe de la stratégie est très simple. Elle n’utilise aucun indicateur, mais utilise uniquement le prix actuel comme base pour les déclencheurs de trading, et il n’y a qu’un seul paramètre principalratioContrôle le déclenchement de l’ouverture d’une position.

Gâchette longue :

if ticker.Last - basePrice > 0 and (ticker.Last - basePrice) / basePrice > ratio

Utilisez le prix actuel pour comparer avec le prix de base. Lorsque le prix actuel est supérieur au prix de base et que le prix dépasseratio * 100 %, l’ordre en attente est déclenché et un ordre long est passé. Après avoir passé une commande, le prix de base est mis à jour au prix actuel.

Déclencheur de commande courte :

if ticker.Last - basePrice < 0 and (basePrice - ticker.Last) / basePrice > ratio

Le principe de la vente à découvert est le même. Utilisez le prix actuel pour comparer avec le prix de base. Lorsque le prix actuel est inférieur au prix de base et que le prix dépasseratio * 100 %, l’ordre en attente est déclenché et un ordre court est passé. Après avoir passé une commande, le prix de base est mis à jour au prix actuel.

Le volume de commande pour chaque commande correspond à la valeur des fonds disponibles.ratio * 100 %。 Sauf si le volume de commande calculé est inférieur au volume de transaction minimum défini dans les paramètresminStocks, sinon passez commande.

Cela permet à la stratégie de suivre les variations de prix, de rechercher les sommets et de vendre les creux.

Backtesting

La période de backtesting est d’environ un an. Version Python de la stratégie de poursuite des hauts et des bas

Résultats de l’opération : Version Python de la stratégie de poursuite des hauts et des bas

Version Python de la stratégie de poursuite des hauts et des bas

Récemment, certains utilisateurs ont déclaré qu’il existait relativement peu de stratégies Python. Je partagerai plus de stratégies écrites en Python à l’avenir. Le code de stratégie est également très simple, ce qui convient parfaitement aux débutants. Adresse de la stratégie : https://www.fmz.com/strategy/181185

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.