
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.
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)
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.
La période de backtesting est d’environ un an.

Résultats de l’opération :


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.