Gradient-Reversal-Handelsstrategie


Erstellungsdatum: 2023-10-09 15:10:39 zuletzt geändert: 2023-10-09 15:10:39
Kopie: 0 Klicks: 782
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Eine Trend-Tracking-Strategie, bei der ein Gleichgewichtssystem zum Verkauf und Kauf verwendet wird. Sie ermittelt die Richtung der aktuellen Preisentwicklung durch Berechnung von Moving Averages für verschiedene Perioden und führt Kauf- oder Verkaufshandlungen an Trendwendepunkten durch. Die Strategie zielt darauf ab, mittlere und lange Trendlinien zu erfassen und bei einer Trendwende zu handeln.

Strategieprinzip

Die Strategie erzeugt ein Handelssignal durch die Berechnung von zwei Moving Averages, wobei eine mit längerer Periode als Referenzlinie dient und eine andere mit kürzerer Periode als Referenzlinie. Die spezifische Betriebslogik ist wie folgt:

  1. Berechnen Sie eine Referenz-Mittellinie mit dem Periodiparameter len1, die für längere Periodentrends steht.

  2. Berechnen Sie eine Signalmittellinie mit dem Periodiparameter len2, die eine Mittellinie für einen kürzeren Periodentrend darstellt, len2

  3. Wenn die kurze Durchschnittslinie von oben nach unten durch die lange Durchschnittslinie fällt, zeigt der Devisenhandel eine Trendwende an und die Aktienpreise könnten nach unten gehen.

  4. Wenn die kurze Durchschnittslinie die lange Durchschnittslinie von unten durchbricht, werden mehr Geschäfte getätigt, was eine Trendwende bedeutet und die Aktienpreise möglicherweise steigen.

  5. Wenn der Preis wieder in der Nähe des langen Durchschnitts liegt, wird die Ausgleichspause eingelegt.

  6. So kann der Trendhandel an den Wendepunkten der mittleren und langen Trendlinie durch die Kreuzung von Moving Averages erfasst werden.

Strategische Vorteile

  1. Durch die Nutzung eines mittleren Kreuzungssystems kann eine Trendwende der mittleren Periode effektiv erfasst werden.

  2. Die Handelssignale sind einfach, klar und leicht zu verstehen.

  3. Anpassbare Periodenparameter für verschiedene Sorten und Händler.

  4. Ein Stop-Loss-Stopp kann eingestellt werden, um jedes einzelne Risiko zu kontrollieren.

  5. Es ist nicht nötig, den Wert der Aktie zu prognostizieren, sondern nur die Richtung der Trends zu berücksichtigen.

Strategisches Risiko

  1. Bei Tremor kommt es häufiger zu Kreuzungen der Gleichungen, was zu einer größeren Anzahl von Falschsignalen führt.

  2. Es ist nicht möglich, von kurzfristigen Preisschwankungen zu profitieren und ist nur für den Handel mit mittleren und langen Trendlinien geeignet.

  3. Die mittlere Linie-Systeme bleiben hinter den Preisveränderungen zurück und können keine Trendwende rechtzeitig erfassen.

  4. Es kann sein, dass die Häufigkeit der Transaktionen nicht hoch ist und es nicht möglich ist, ausreichend zu profitieren.

  5. Die Parameter müssen zeitnah angepasst werden, um die Handelsfrequenz an den Markt anzupassen.

Optimierungsrichtung

  1. In Kombination mit anderen technischen Indikatoren wie MACD, KD usw. wird bestätigt, um falsche Signale zu filtern.

  2. Trend-Filter, der nur dann signalisiert wird, wenn ein Trend eindeutig ist.

  3. Mehrere Zeitrahmen, unterschiedliche Perioden und Gleichgewichte wirken gleichzeitig, was zu mehr Handelsmöglichkeiten führt.

  4. Dynamische Optimierung der Parameter, so dass die Periodiparameter den Marktveränderungen folgen.

  5. Das ist ein Beispiel dafür, wie die Entwicklung in den letzten zehn Jahren weitergeführt wurde.

Zusammenfassen

Die Gradientenumkehr-Handelsstrategie ist insgesamt eine einfache und praktische Trendverfolgungsstrategie. Sie ermittelt mittelfristige Trendumkehrpunkte durch Gleichgewichtskreuzung, um die Preisentwicklung in längeren Zeiträumen zu erfassen. Die Strategie ist einfach umzusetzen, die Handelssignale sind klar, aber es gibt auch einige Einschränkungen. Durch die ständige Optimierung der Parameter, die Kombination anderer technischer Indikatoren und die Einführung von Machine Learning können die Effektivität der Strategie erhöht und die Marktchancen besser erfasst werden.

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

//@version=3
//Created by 100kiwi
strategy(title = "TrapTrading", overlay = true)

/////////////////////////////////////////////////////////////////////
// COMPONENT CODE START
//*******************************************************************
// Backtesting Period Selector | Component by pbergden
//*******************************************************************
testStartYear = input(2015, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// COMPONENT CODE STOP
/////////////////////////////////////////////////////////////////////

// input
buySide = input(defval = true, title = "Trade Direction (ON: Buy Side OFF: Sell Side)", type = bool)
counterTrend  = input(defval = true, title = "Trade Mode (ON: Counter Trend OFF: Trend Following)", type = bool)
len1 = input(defval = 14, title = "Period")
multiple = input(defval = 1.4, title = "Multiple")

m1 = close - close[len1]
controlPoint = counterTrend ? lowest(abs(m1), len1) == abs(m1) : highest(abs(m1), len1) == abs(m1)
baseLine = valuewhen(controlPoint, avg(close, close[len1]), 0)

// trap line
atr = atr(len1)
line1Up = baseLine + (atr * multiple)
line2Up = baseLine + (atr * 2 * multiple)
line3Up = baseLine + (atr * 3 * multiple)
line4Up = baseLine + (atr * 4 * multiple)
line5Up = baseLine + (atr * 5 * multiple)
line6Up = baseLine + (atr * 6 * multiple)
line7Up = baseLine + (atr * 7 * multiple)
line8Up = baseLine + (atr * 8 * multiple)
line9Up = baseLine + (atr * 9 * multiple)
line10Up = baseLine + (atr * 10 * multiple)
line1Down = baseLine - (atr * multiple)
line2Down = baseLine - (atr * 2 * multiple)
line3Down = baseLine - (atr * 3 * multiple)
line4Down = baseLine - (atr * 4 * multiple)
line5Down = baseLine - (atr * 5 * multiple)
line6Down = baseLine - (atr * 6 * multiple)
line7Down = baseLine - (atr * 7 * multiple)
line8Down = baseLine - (atr * 8 * multiple)
line9Down = baseLine - (atr * 9 * multiple)
line10Down = baseLine - (atr * 9 * multiple)

// draw
color = close >= baseLine ? teal : red
barcolor(controlPoint ? yellow : na, title = "Candle Color")

plot(baseLine, title = "Base Line", color = white, linewidth = 4, style = stepline, transp = 0)
plot(line1Up, title = "1Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line2Up, title = "2Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line3Up, title = "3Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line4Up, title = "4Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line5Up, title = "5Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line6Up, title = "6Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line7Up, title = "7Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line8Up, title = "8Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line9Up, title = "9Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line10Up, title = "10Up Line", color = green, linewidth = 1, style = stepline, transp = 0)
plot(line1Down, title = "1Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line2Down, title = "2Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line3Down, title = "2Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line4Down, title = "4Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line5Down, title = "5Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line6Down, title = "6Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line7Down, title = "7Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line8Down, title = "8Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line9Down, title = "9Down Line", color = red, linewidth = 1, style = stepline, transp = 0)
plot(line10Down, title = "10Down Line", color = red, linewidth = 1, style = stepline, transp = 0)

// strategy code
if testPeriod() and buySide
    strategy.exit("Exit Long0", from_entry = "Long0", qty = 1, limit = line2Up)
    strategy.exit("Exit Long1", from_entry = "Long1", qty = 1, limit = line1Up)
    strategy.exit("Exit Long2", from_entry = "Long2", qty = 1, limit = baseLine)
    strategy.exit("Exit Long3", from_entry = "Long3", qty = 1, limit = line1Down)
    strategy.exit("Exit Long4", from_entry = "Long4", qty = 1, limit = line2Down)
    strategy.exit("Exit Long5", from_entry = "Long5", qty = 1, limit = line3Down)
    strategy.exit("Exit Long6", from_entry = "Long6", qty = 1, limit = line4Down)
    strategy.exit("Exit Long7", from_entry = "Long7", qty = 1, limit = line5Down)
    strategy.exit("Exit Long8", from_entry = "Long8", qty = 1, limit = line6Down)
    strategy.exit("Exit Long9", from_entry = "Long9", qty = 1, limit = line7Down)
    strategy.exit("Exit Long10", from_entry = "Long10", qty = 1, limit = line8Down)
    strategy.order("Long0", strategy.long, qty = 1, limit = baseLine, when = strategy.position_size <= 0)
    strategy.order("Long1", strategy.long, qty = 1, limit = line1Down, when = strategy.position_size <= 1)
    strategy.order("Long2", strategy.long, qty = 1, limit = line2Down, when = strategy.position_size <= 2)
    strategy.order("Long3", strategy.long, qty = 1, limit = line3Down, when = strategy.position_size <= 3)
    strategy.order("Long4", strategy.long, qty = 1, limit = line4Down, when = strategy.position_size <= 4)
    strategy.order("Long5", strategy.long, qty = 1, limit = line5Down, when = strategy.position_size <= 5)
    strategy.order("Long6", strategy.long, qty = 1, limit = line6Down, when = strategy.position_size <= 6)
    strategy.order("Long7", strategy.long, qty = 1, limit = line7Down, when = strategy.position_size <= 7)
    strategy.order("Long8", strategy.long, qty = 1, limit = line8Down, when = strategy.position_size <= 8)
    strategy.order("Long9", strategy.long, qty = 1, limit = line9Down, when = strategy.position_size <= 9)
    strategy.order("Long10", strategy.long, qty = 1, limit = line10Down, when = strategy.position_size <= 10)
else
    if testPeriod() and not buySide
        strategy.exit("Exit Short0", from_entry = "Short0", qty = 1, limit = line2Down)
        strategy.exit("Exit Short1", from_entry = "Short1", qty = 1, limit = line1Down)
        strategy.exit("Exit Short2", from_entry = "Short2", qty = 1, limit = baseLine)
        strategy.exit("Exit Short3", from_entry = "Short3", qty = 1, limit = line1Up)
        strategy.exit("Exit Short4", from_entry = "Short4", qty = 1, limit = line2Up)
        strategy.exit("Exit Short5", from_entry = "Short5", qty = 1, limit = line3Up)
        strategy.exit("Exit Short6", from_entry = "Short6", qty = 1, limit = line4Up)
        strategy.exit("Exit Short7", from_entry = "Short7", qty = 1, limit = line5Up)
        strategy.exit("Exit Short8", from_entry = "Short8", qty = 1, limit = line6Up)
        strategy.exit("Exit Short9", from_entry = "Short9", qty = 1, limit = line7Up)
        strategy.exit("Exit Short10", from_entry = "Short10", qty = 1, limit = line8Up)
        strategy.order("Short0", strategy.short, qty = 1, limit = baseLine, when = strategy.position_size >= 0)
        strategy.order("Short1", strategy.short, qty = 1, limit = line1Up, when = strategy.position_size >= -1)
        strategy.order("Short2", strategy.short, qty = 1, limit = line2Up, when = strategy.position_size >= -2)
        strategy.order("Short3", strategy.short, qty = 1, limit = line3Up, when = strategy.position_size >= -3)
        strategy.order("Short4", strategy.short, qty = 1, limit = line4Up, when = strategy.position_size >= -4)
        strategy.order("Short5", strategy.short, qty = 1, limit = line5Up, when = strategy.position_size >= -5)
        strategy.order("Short6", strategy.short, qty = 1, limit = line6Up, when = strategy.position_size >= -6)
        strategy.order("Short7", strategy.short, qty = 1, limit = line7Up, when = strategy.position_size >= -7)
        strategy.order("Short8", strategy.short, qty = 1, limit = line8Up, when = strategy.position_size >= -8)
        strategy.order("Short9", strategy.short, qty = 1, limit = line9Up, when = strategy.position_size >= -9)
        strategy.order("Short10", strategy.short, qty = 1, limit = line10Up, when = strategy.position_size >= -10)