
Trendstrategien verwenden im Allgemeinen verschiedene Indikatoren, um die Marktrichtung zu bestimmen, und verwenden die numerischen Vergleichsergebnisse verschiedener Indikatoren als Handelssignale. Dies wird zwangsläufig zur Verwendung von Parametern und zur Berechnung von Indikatoren führen. Da Parameter verwendet werden, erfolgt eine Anpassung. Die Strategie funktioniert unter bestimmten Marktbedingungen sehr gut. Wenn Sie jedoch Pech haben und der Markttrend den aktuellen Parametern sehr ungünstig gegenübersteht, kann die Strategie sehr schlecht abschneiden. Daher bin ich der Meinung, dass die Strategie so einfach wie möglich ausgestaltet sein sollte, und dass eine solche Strategie robuster ist. Heute stellen wir Ihnen eine Trendstrategie vor, die keine Indikatoren verwendet. Der Strategiecode ist sehr einfach, nur 40 Zeilen.
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)
Das Prinzip der Strategie ist sehr einfach. Sie verwendet keine Indikatoren, sondern verwendet nur den aktuellen Preis als Grundlage für Handelsauslöser, und es gibt nur einen HauptparameterratioSteuert das Auslösen der Öffnung einer Position.
Langer Auslöser:
if ticker.Last - basePrice > 0 and (ticker.Last - basePrice) / basePrice > ratio
Verwenden Sie den aktuellen Preis zum Vergleich mit dem Basispreis. Wenn der aktuelle Preis höher ist als der Basispreis und der Preis übersteigtratio * 100 %, wird die Pending Order ausgelöst und eine Long Order platziert.
Nach der Bestellung wird der Basispreis auf den aktuellen Preis aktualisiert.
Kurzauftragsauslöser:
if ticker.Last - basePrice < 0 and (basePrice - ticker.Last) / basePrice > ratio
Das Prinzip des Leerverkaufs ist das gleiche. Verwenden Sie den aktuellen Preis, um ihn mit dem Basispreis zu vergleichen. Wenn der aktuelle Preis unter dem Basispreis liegt und der Preis höher istratio * 100 %, wird die Pending Order ausgelöst und eine Short Order platziert.
Nach der Bestellung wird der Basispreis auf den aktuellen Preis aktualisiert.
Das Auftragsvolumen entspricht dem Wert der jeweils verfügbaren Mittel.ratio * 100 %。
Sofern das berechnete Auftragsvolumen nicht kleiner ist als das in den Parametern festgelegte MindesttransaktionsvolumenminStocks, andernfalls eine Bestellung aufgeben.
Dadurch kann die Strategie Preisänderungen verfolgen, Höchststände verfolgen und Tiefststände verkaufen.
Der Backtesting-Zeitraum beträgt ca. ein Jahr.

Ergebnisse der Operation:


Kürzlich sagten einige Benutzer, dass es relativ wenige Python-Strategien gibt. Ich werde in Zukunft weitere in Python geschriebene Strategien veröffentlichen. Der Strategiecode ist außerdem sehr einfach, sodass er sich sehr gut für Anfänger zum Lernen eignet. Strategieadresse: https://www.fmz.com/strategy/181185
Die Strategie dient nur zu Referenzzwecken, zum Backtesting und zum Testen. Bei Interesse können Sie sie optimieren und aktualisieren.