Stratégie pour acheter les gagnants de la version Python

Auteur:Je ne sais pas., Créé: 2022-12-22 22:04:41, Mis à jour: 2023-09-20 09:22:41

img

Stratégie pour acheter les gagnants de la version Python

La stratégie de tendance utilise généralement divers indicateurs pour juger de la direction du marché et utilise les résultats de comparaison de divers indicateurs comme signaux de trading. De cette façon, il est inévitable d'utiliser des paramètres et de calculer des indicateurs. Maintenant que les paramètres sont utilisés, il y aura une situation appropriée. Dans certains marchés, la stratégie fonctionne très bien, mais si vous avez malchance et que la tendance du marché est très hostile aux paramètres actuels, la stratégie peut très mal fonctionner. Par conséquent, je considère que plus la conception de la stratégie est simple, mieux c'est. Cette stratégie sera plus robuste. Aujourd'hui, nous partagerons une stratégie de tendance sans 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:", ticker, "\n", "Account information:", acc)
        Sleep(500)

Analyse simple de la stratégie

Le principe de la stratégie est très simple. Il n'utilise pas d'indicateurs, il utilise seulement le prix actuel comme base de déclenchement de la transaction.ratiopour contrôler le déclencheur de position d'ouverture.

Je déclenche:

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

Utiliser le prix courant pour comparer avec le prix de base.ratio * 100%, déclencher un ordre et attendre des ordres longs. Une fois l'ordre passé, le prix de base est mis à jour au prix actuel.

Le déclencheur de la commande courte:

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

Le prix courant est utilisé pour comparer le prix de base. Lorsque le prix courant est inférieur au prix de base et que le prix dépasse leratio * 100%', l'ordre en attente est déclenché et l'ordre vide est listé. Une fois l'ordre passé, le prix de base est mis à jour au prix actuel.

La quantité de chaque commande est:ratio * 100%de la valeur du fonds disponible. Placer une commande, sauf si la quantité de commande calculée est inférieure à la quantité minimale de négociationminStocksdéfinie par le paramètre.

De cette façon, la stratégie suit les changements de prix pour acheter les gagnants.

Test de retour

L'intervalle de temps de backtesting est d'environ un an.

img

Résultats de l'exécution:

img img img

Récemment, certains utilisateurs ont dit qu'il y avait peu de stratégies Python. Plus tard, je vais partager plus de stratégies écrites en Python. Le code de stratégie est également très simple, ce qui est très approprié pour les débutants quantitatifs à apprendre. Adresse stratégique:https://www.fmz.com/strategy/181185

La stratégie est à titre de référence, d'apprentissage et de backtesting seulement.


Relationnée

Plus de