Überschreitende Handelsstrategie für Grenzorder

Schriftsteller:ChaoZhang, Datum: 2023-11-03 17:11:34
Tags:

img

Zusammenfassung

Diese Strategie ist eine Trend-Folge-Handelsstrategie, die einen einfachen gleitenden Durchschnitt verwendet, um die Markttrendrichtung zu bestimmen und Limitorders entlang der gleitenden Durchschnittslinie zu platzieren, um dem Trend zu folgen.

Strategie Logik

  1. Berechnen Sie den einfachen gleitenden Durchschnitt (SMA) und die Trendrichtung.

  2. Wenn der Anti-Saw-Filter aktiviert ist, wird der Aufwärtstrend identifiziert, wenn die Tiefststände über der SMA liegen, und der Abwärtstrend, wenn die Höchststände unter der SMA liegen.

  3. Platzieren Sie Limit-Orders zum SMA-Preis entsprechend der Trendrichtung und den aktivierten Handelsrichtungen needlong und needshort:

    • Wenn ein Long-Trade erforderlich ist (Needlong ist richtig) und im Aufwärtstrend, platzieren Sie einen Long-Limit-Order zum SMA-Preis

    • Wenn ein Short-Handel erforderlich ist (Needshort ist richtig) und der Trend nach unten ist, wird ein Short-Limit-Order zum SMA-Preis platziert.

  4. Setzen Sie die Stop-Loss-Logik für die Ausgangspositionen ein, wenn die Positionsrichtung nicht der Trendrichtung entspricht.

  5. Nur innerhalb des angegebenen Datumsbereichs handeln, basierend auf den Parametern des Datumsbereichs

Analyse der Vorteile

  1. Die Verwendung von SMA zur Bestimmung des Trends kann Marktlärm effektiv filtern und einen längerfristigen Trend festhalten.

  2. Das Platzieren von Limit-Orders zum SMA-Preis kann gute Einstiegspunkte erhalten, wenn der Trend beginnt.

  3. Flexibilität, nur nach persönlichem Handelsstil lang oder kurz zu gehen.

  4. Verluststop an Ort und Stelle, um Verluste nicht zu vergrößern.

  5. Handelszeitbereiche werden eingestellt, um Volatilität bei wichtigen Ereignissen zu vermeiden.

Risikoanalyse

  1. Der SMA als Trendindikator hat einen Verzögerungseffekt, kann Trendwendepunkte verpassen und Verluste verursachen.

  2. Limit-Orders fehlen an Flexibilität, können aufgrund kurzfristiger Trendanpassungen nicht in Positionen eingehen.

  3. Der SMA-Periodenparameter muss korrekt konfiguriert werden, falsche Einstellungen führen zu einer falschen Trendbestimmung.

  4. Die Parameter der Handelssitzung müssen angemessen sein, um verpasste Chancen oder den Handel in riskanten Perioden zu vermeiden.

Optimierungsrichtlinien

  1. Es sollte in Erwägung gezogen werden, weitere Indikatoren für die Bestätigung mit mehreren Indikatoren hinzuzufügen, um Probleme mit dem Rückstand der SMA zu vermeiden.

  2. Wechseln Sie zum Marktordnungsverfolgen, wenn der Preis den SMA überschreitet, wodurch die Flexibilität der Verfolgung verbessert wird.

  3. Dynamische Optimierung der SMA-Periode zur Anpassung an verschiedene Marktzyklen.

  4. Setzen Sie für flexiblere Stopps den Stop-Loss auf Low/High-Swing anstelle des Strikt-SMA-Preises.

  5. Erhöhung der algorithmischen Elemente für intelligentere dynamische Handelssitzungen und Vermeidung großer Risikoereignisse.

Zusammenfassung

Insgesamt handelt es sich um eine relativ einfache Trendfolgestrategie, deren Kernidee darin besteht, die Trendrichtung mit SMA zu bestimmen und Limitorders zum SMA-Preis zu platzieren, um dem Trend zu folgen. Mit bestimmten Optimierungen kann es die Flexibilität, Anpassungsfähigkeit und Intelligenz verbessern.


/*backtest
start: 2022-10-27 00:00:00
end: 2023-03-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2020

//@version=4
strategy(title = "Noro's CrossLimit", shorttitle = "CrossLimit", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.0)

needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
src = input(close, defval = close, title = "MA Source")
len = input(5, defval = 5, minval = 1, title = "SMA length")
off = input(0, defval = 0, minval = 0, title = "SMA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
rev = input(false, defval = false, title = "Reverse")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//MA
ma = sma(src, len)[off]
macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)

//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = (trend == 1 and rev == false) or (trend == -1 and rev == true)
dn = (trend == -1 and rev == false) or (trend == 1 and rev == true)

//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend != 0
    strategy.entry("Long", strategy.long, lot, limit = ma, when = needlong and truetime and up)
    strategy.entry("Short", strategy.short, lot, limit = ma, when = needshort and truetime and dn)
if size > 0 and needshort == false and trend == -1
    strategy.exit("Stop Long", "Long", limit = ma)
if size < 0 and needlong == false and trend == 1
    strategy.exit("Stop Short", "Short", limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Mehr