
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.
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.
Dies ist eine relativ einfache und intuitive Trend-Tracking-Strategie, die folgende Vorteile hat:
Die Strategie birgt auch einige Risiken, die beachtet werden müssen:
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
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.
/*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")