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)
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.ratio
pour 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%'
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égociationminStocks
définie par le paramètre.
De cette façon, la stratégie suit les changements de prix pour acheter les gagnants.
L'intervalle de temps de backtesting est d'environ un an.
Résultats de l'exécution:
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.