Diese Strategie verwendet doppelte gleitende Durchschnitte, insbesondere 8-Perioden- und 21-Perioden-Durchschnitte.
Die Strategie beinhaltet auch die Neigung der gleitenden Durchschnittslinie, um einige nicht-trendige Perioden auszufiltern und nur dann Signale zu erzeugen, wenn ein Trend deutlicher ist.
Der Kern dieser Strategie liegt in der Überschneidung der kurzfristigen und langfristigen gleitenden Durchschnitte. Der kürzere MA kann Trendänderungen schneller erfassen, während der längere MA bessere Geräuschfilterungseffekte hat. Die Einrichtung eines Aufwärtstrends wird vorgeschlagen, wenn der kürzere MA den längeren MA überschreitet, was zu einem langen Signal führt; die Einrichtung eines Abwärtstrends wird vorgeschlagen, wenn der kürzere MA unter dem längeren MA überschreitet, was zu einem kurzen Signal führt.
Die Strategie legt auch eine Steigungsschwelle fest. Nur wenn die Steigung größer als der positive Schwellenwert ist, wird ein langes Signal erzeugt. Nur wenn die Steigung kleiner als der negative Schwellenwert ist, wird ein kurzes Signal erzeugt. Dies hilft, Zonen auszufiltern, in denen kein ausgeprägter Trend besteht, was zu qualitativ hochwertigeren Handelssignalen führt.
Insbesondere ist die Logik für die Erzeugung von Handelssignalen folgende:
Zu den Vorteilen dieser Strategie gehören:
Diese Strategie birgt auch einige Risiken:
Einige Optimierungsmöglichkeiten basierend auf diesen Risiken:
Einige Richtungen zur Optimierung der Strategie:
Zusammenfassend lässt sich sagen, dass diese Dual-MA-Strategie einfach und praktisch ist. Sie erfasst verschiedene Trendmerkmale durch die beiden Periodenparameter und kombiniert sie, um Handelssignale zu erzeugen.
/*backtest start: 2024-01-09 00:00:00 end: 2024-01-16 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //written by sixpathssenin //@version=4 strategy(title="Dual Moving Average",initial_capital=10000,overlay=true) ma1= sma(close,8) ma2= sma(close,21) angleCriteria = input(title="Angle", type=input.integer, defval=7, minval=1, maxval=13) i_lookback = input(2, "Angle Period", input.integer, minval = 1) i_atrPeriod = input(10, "ATR Period", input.integer, minval = 1) i_angleLevel = input(6, "Angle Level", input.integer, minval = 1) i_maSource = input(close, "MA Source", input.source) f_angle(_src, _lookback, _atrPeriod) => rad2degree = 180 / 3.141592653589793238462643 //pi ang = rad2degree * atan((_src[0] - _src[_lookback]) / atr(_atrPeriod)/_lookback) ang _angle = f_angle(ma2, i_lookback, i_atrPeriod) plot(ma1,color=#FF0000) plot(ma2,color=#00FF00) crosso=crossover(ma1,ma2) crossu=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) long = longcrossed and _angle > angleCriteria short= shortcrossed and _angle < -(angleCriteria) if(long) strategy.entry("Long",strategy.long) if(short) strategy.entry("short",strategy.short)