Gleitender Durchschnitt - Doppelklick - Goldenes Kreuz - Strategie für kontinuierlichen Anstieg


Erstellungsdatum: 2023-11-13 10:47:48 zuletzt geändert: 2023-11-13 10:47:48
Kopie: 0 Klicks: 649
1
konzentrieren Sie sich auf
1617
Anhänger

Gleitender Durchschnitt - Doppelklick - Goldenes Kreuz - Strategie für kontinuierlichen Anstieg

Überblick

Dies ist eine Handelsstrategie, die die Form der Moving-Average-Goldforke nutzt, die mit der Entwicklung der Trendlinie zusammenhängt. Wenn die schnelle Linie die langsame Linie von unten durchbricht, wird ein Goldfork-Signal erzeugt. Wenn der Trend nach der Goldforke weiter nach oben geht, können Sie in dieser Phase mehr Positionen einnehmen.

Strategieprinzip

Die Strategie basiert hauptsächlich auf der Goldforkform des Moving Averages, um den Zeitpunkt des Eintritts zu beurteilen. Konkret wird ein schneller Moving Average MA1 und ein langsamer Moving Average MA2 definiert.

Um falsche Signale durch kurzfristige Goldforken zu vermeiden, wurde eine Winkel-Trench-Beschlüsse hinzugefügt, die ein Kaufsignal nur auslösen, wenn der Winkel des MA2 größer als der festgelegte Trench ist. Dies kann einige nicht-trendige kurzfristige Steigerungen filtern.

Die Strategie setzt sowohl eine Stop-Loss- als auch eine Stop-Stop-Linie. Die Stop-Loss-Linie dient zur Vermeidung von Verlusten durch plötzliche Marktbewegungen und die Stop-Stop-Linie zur Sperrung von Gewinn-Exit. Sie ist speziell auf einen bestimmten Prozentsatz des Einstiegspreises festgelegt.

Wenn der Kursanstieg den Stopp erreicht, wird die Strategie zum Stoppen ausgeschaltet. Wenn der Kursanstieg in dieser Runde stärker ist, wird die Strategie erneut den Rückwärtskurs vornehmen.

Analyse der Stärken

Dies ist eine relativ einfache und intuitive Trend-Tracking-Strategie, die folgende Vorteile hat:

  1. Mit einer Kombination von Moving Averages filtert man den Marktlärm ab und kann die Richtung des Trends festlegen.
  2. Die Winkelmarginalisierung verhindert, dass man von kurzfristigen Schwankungen abgehalten wird.
  3. Zwei-Wege-Operationen, die in Krisensituationen profitieren
  4. Setzen Sie einen Stop-Loss-Stopp und kontrollieren Sie die Risiken

Risikoanalyse

Die Strategie birgt auch einige Risiken, die beachtet werden müssen:

  1. Der Moving Average ist zurückgeblieben und könnte einen Preiswendepunkt verpassen.
  2. Die Wahrscheinlichkeit, dass ein Stop-Loss durchbrochen wird, besteht trotz Stop-Losses in einem schnelllebigen Markt.
  3. Die Gefahr von bilateralen Transaktionen verdoppelt sich, und die falsche Auswahl der Verkaufspunkte kann zu Verlusten führen.
  4. Fehlgelegte Parameter, wie z. B. die Wahl der Moving Average-Periode, können die Strategie beeinträchtigen

Optimierungsrichtung

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Erhöhung von Trendmessgrößen wie MACD, Brin-Band usw. zur Verbesserung der Ortungsgenauigkeit
  2. Dynamische Optimierung von Periodendurchschnitten mit Methoden wie maschinellem Lernen
  3. Optimierung der Stop-Loss-Einstellungen, z. B. mit Stop-Loss-Tracking
  4. Erhöhung des Handelsvolumens und Vermeidung von Verlusten
  5. Die Dynamik der Umkehrung der Positionseröffnung in Kombination mit anderen Indikatoren beurteilt die Trendstärke dieser Runde

Zusammenfassen

Insgesamt ist dies eine einfache und praktische Trend-Tracking-Strategie. Es hat einige Vorteile, aber es ist auch notwendig, auf die Risiken zu achten. Durch weitere Optimierung der Parameter, die Optimierung der Indikatoren, die Einstellung von Stop-Loss-Stopps und andere Verbesserungen können bessere stabile Erträge erzielt werden.

Strategiequellcode
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//written by [email protected]
//@version=5
strategy(title="MJ-Dual Moving Average",initial_capital=10000,overlay=false)

// import TradingView/ZigZag/6 as ZigZagLib 

// // Create Zig Zag instance from user settings.
// var zigZag = ZigZagLib.newInstance(
//   ZigZagLib.Settings.new(
//       input.float(5.0, "Price deviation for reversals (%)", 0.00001, 100.0, 0.5, "0.00001 - 100"),
//       input.int(10, "Pivot legs", 2),
//       input(#2962FF, "Line color"),
//       input(true, "Extend to last bar"),
//       input(true, "Display reversal price"),
//       input(true, "Display cumulative volume"),
//       input(true, "Display reversal price change", inline = "priceRev"),
//       input.string("Absolute", "", ["Absolute", "Percent"], inline = "priceRev"),
//       true)
//  )

// // Update 'zigZag' object on each bar with new ​pivots, ​volume, lines, labels.
// zigZag.update()
// // plot(zigZag.pivots, "zigZag")

ma1= ta.sma(close,8)
ma2= ta.sma(close,21)

angleCriteria = input.int(title="Angle", defval=7, minval=1, maxval=13)

i_lookback   = input.int(2,     "Angle Period", minval = 1)
i_atrPeriod  = input.int(10,    "ATR Period",   minval = 1)
i_angleLevel = input.int(6,     "Angle Level",  minval = 1)
i_maSource   = input.source(close, "MA Source")
TP = input.float(1, "TP", minval = 0.1)
SL = input.float(1, "SL", minval = 0.1)

f_angle(_src, _lookback, _atrPeriod) =>
    rad2degree = 180 / 3.141592653589793238462643  //pi 
    ang = rad2degree * math.atan((_src[0] - _src[_lookback]) / ta.atr(_atrPeriod)/_lookback)
    ang
_angle = f_angle(ma2, i_lookback, i_atrPeriod)
plot(ta.atr(i_atrPeriod), "atr")
// plot(ma1,color=#FF0000)
// plot(ma2,color=#00FF00)

crosso=ta.crossover(ma1,ma2) 
crossu=ta.crossunder(ma1,ma2)

_lookback = 15

f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed
    
longcrossed = f_somethingHappened(crosso,_lookback)
shortcrossed = f_somethingHappened(crossu,_lookback)

atr_factor = 1
atr = ta.atr(i_atrPeriod)
e = atr * atr_factor 

afr = close 
afr := nz(afr[1], afr)

atr_factoryHigh = close + e
atr_factoryLow = close - e 

if atr_factoryLow > afr 
    afr := atr_factoryLow
if atr_factoryHigh < afr 
    afr := atr_factoryHigh

// plot(afr, "afr", display = display.data_window)
// plot(atr_factoryHigh, "afr", color = color.yellow, display = display.all)
// plot(atr_factoryLow, "afr", color = color.green, display = display.all)


inLong() => strategy.position_size > 0
inShort() => strategy.position_size < 0
inZero() => not inLong() and not inShort()

long = longcrossed and _angle > angleCriteria
short= shortcrossed and _angle < -(angleCriteria)

plotshape(long, "Buy", shape.arrowup, location.belowbar, color = #FF0000)
plotshape(short, "Sell", shape.arrowdown, location.abovebar, color = #00FF00)

var longTp = 0.0
var longSl = 0.0
var shortTp = 0.0
var shortSl = 0.0
[b_middle, b_high, b_low] = ta.bb(close, 20, 2)
entry_price = strategy.opentrades.entry_price(0)

if inZero()
    if short
        longTp := close * (1 + TP/100)
        longSl := close * (1 - SL/100)
        strategy.entry("LONG",strategy.long, comment = "tp:" + str.tostring(longTp) + " sl:" + str.tostring(longSl))
    if long
        shortTp := close * (1 - TP/100)
        shortSl := close * (1 + SL/100)
        strategy.entry("SHORT",strategy.short, comment = "tp:" + str.tostring(shortTp) + " sl:" + str.tostring(shortSl))

if inLong()
    // if close - entry_price > close * 0.005
    //     longSl := entry_price + close * 0.001
    if high > longTp
        strategy.close("LONG")
        if (close - open) > close * 0.014
            shortTp := close * (1 - TP/100)
            shortSl := close * (1 + SL/100)
            strategy.entry("SHORT",strategy.short, comment = "tp:" + str.tostring(shortTp) + " sl:" + str.tostring(shortSl))

    if close < longSl
        strategy.close("LONG")
    if open >= b_high and close >= b_high
        strategy.close("LONG")
    // if high > b_high and entry_price < high
    //     strategy.close("LONG")


if inShort()
    // if entry_price - close > close * 0.005
    //     shortSl := entry_price - close * 0.001
    if low < shortTp
        strategy.close("SHORT")
        if (open - close) > close * 0.014
            longTp := close * (1 + TP/100)
            longSl := close * (1 - SL/100)
            strategy.entry("LONG",strategy.long, comment = "tp:" + str.tostring(longTp) + " sl:" + str.tostring(longSl))


    if close > shortSl
        strategy.close("SHORT")
    if open < b_low and close < b_low
        strategy.close("SHORT")
    // if low < b_low and entry_price > low
    //     strategy.close("SHORT")