Die Trendstrategie verwendet im Allgemeinen verschiedene Indikatoren, um die Marktrichtung zu beurteilen, und verwendet die Vergleichsergebnisse verschiedener Indikatoren als Handelssignale. Auf diese Weise ist es unvermeidlich, Parameter zu verwenden und Indikatoren zu berechnen. Jetzt, da die Parameter verwendet werden, wird es eine passende Situation geben. In einigen Märkten funktioniert die Strategie sehr gut, aber wenn Sie Pech haben und der Markttrend den aktuellen Parametern sehr unfreundlich ist, kann die Strategie sehr schlecht funktionieren. Daher halte ich, dass je einfacher das Strategiedesign ist, desto besser. Diese Strategie wird robuster sein. Heute werden wir eine Trendstrategie ohne Indikatoren teilen. Der Strategiecode ist sehr einfach, nur 40 Zeilen.
Strategiecode:
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)
Das Strategieprinzip ist sehr einfach. Es verwendet keine Indikatoren, es verwendet nur den aktuellen Preis als die Transaktions-Trigger-Basis. Es gibt nur einen Hauptparameterratio
zur Steuerung des Auslösers der Öffnungsposition.
Auslöser für lange Zeit:
if ticker.Last - basePrice > 0 and (ticker.Last - basePrice) / basePrice > ratio
Wenn der aktuelle Preis größer ist als der Basispreis und der Preis denratio * 100%
, einen Befehl auslösen und lange Befehle abwarten.
Nach Auftragserteilung wird der Basispreis auf den aktuellen Preis aktualisiert.
Auslöser der Short-Order:
if ticker.Last - basePrice < 0 and (basePrice - ticker.Last) / basePrice > ratio
Der aktuelle Preis wird verwendet, um den Basispreis zu vergleichen.ratio * 100%'
Die Bestellmenge jeder Bestellung beträgt:ratio * 100%
des verfügbaren Fondswerts.
Auftrag erteilen, es sei denn, die berechnete Auftragsmenge ist kleiner als die MindesthandelsmengeminStocks
durch den Parameter festgelegt.
Auf diese Weise folgt die Strategie den Preisänderungen, um die Gewinner zu kaufen.
Der Zeitrahmen für das Backtesting beträgt etwa ein Jahr.
Laufende Ergebnisse:
Vor kurzem sagten einige Benutzer, dass es nur wenige Python-Strategien gibt. Später werde ich mehr Strategien in Python teilen. Der Strategiecode ist auch sehr einfach, was für quantitative Anfänger sehr geeignet ist. Strategieadresse:https://www.fmz.com/strategy/181185
Die Strategie ist nur zur Referenz, zum Lernen und zum Backtesting bestimmt.