MA-Gleitende-Durchschnitt-Crossover-Strategie basierend auf dem FRAMA-Indikator


Erstellungsdatum: 2024-01-15 14:38:48 zuletzt geändert: 2024-01-15 14:38:48
Kopie: 1 Klicks: 691
1
konzentrieren Sie sich auf
1617
Anhänger

MA-Gleitende-Durchschnitt-Crossover-Strategie basierend auf dem FRAMA-Indikator

Überblick

Diese Strategie berechnet zunächst den schnellen Moving Average ma_fast und den langsamen Moving Average ma_slow und kombiniert diese dann mit dem FRAMA Adaptive Moving Average, um bei einem Ma_slow auf ma_fast zu machen und bei einem Ma_slow unter ma_slow oder bei einem FRAMA unter dem Schlusskurs zu platzieren.

Strategieprinzip

  1. Berechnen Sie den einfachen gleitenden Durchschnitt ma_fast am 13. und den einfachen gleitenden Durchschnitt ma_slow am 26.

  2. Die Berechnungsformel für FRAMA ist komplizierter, die Hauptidee ist die Glattigkeit der Durchschnittslinie, die sich an die Höchstwerte, die Tiefstwerte und die dynamischen Schwankungen der Preise anpasst.

  3. Das bedeutet, dass die kurzfristige Durchschnittslinie beginnt zu steigen und die langfristige Durchschnittslinie gewinnt, was dem Trend entspricht.

  4. Wenn ein Ma_slow bei einem Ma_fast oder ein FRAMA bei einem Schlusskurs platziert wird, wird ein Trendumkehrsignal gesendet.

Analyse der Stärken

  1. Die Kombination der Vorteile von Doppel-Einheitlichkeitssystemen und Adaptive Einheitlichkeitssystemen. Doppel-Einheitlichkeitssystemen sind gut darin, Trends zu erfassen, und Adaptive Einheitlichkeitssysteme filtern Geräusche besser.

  2. Der FRAMA-Indikator kann die Parameter automatisch anpassen, um die Subjektivität der manuell gewählten Parameter zu vermeiden.

  3. Mit zwei Ausstiegssignalen kann die Trendwende zeitnah erfasst werden.

Risikoanalyse

  1. Es ist möglich, dass die doppelte Gleichschlusskreuzung falsch angebracht ist, was zu intermittierenden Verlusten führen kann.

  2. Die Adaption von Moving Averages erhöht die Parameter für Strategien, was zu einer Überoptimierung führen kann.

  3. Wenn man nur den Preis berücksichtigt und nicht auch den Umsatz filtert, kann man die Chance verpassen.

Optimierungsrichtung

  1. Es können durchschnittliche Kombinationen verschiedener Perioden getestet werden, um die optimalen Parameter zu finden.

  2. Die Bestätigung der Transaktionsmenge kann hinzugefügt werden, um ein ungültiges Signal zu vermeiden.

  3. Optimierung der Bedingungen für die Eröffnung und Bewahrung von Positionen, um die Strategie zu stabilisieren. Zum Beispiel, nur bei einem fortgesetzten Formbruch zu handeln.

Zusammenfassen

Diese Strategie kombiniert die doppelte Gleichgewichtskreuzung und die FRAMA-Adaptive-Gleichgewichtskreuzung, die sich automatisch an die Marktumgebung anpasst, indem sie die Parameter dynamisch anpasst. Die doppelte Gleichgewichtskreuzung ist gut darin, Trends zu erfassen, und FRAMA kann Geräusche filtern. Die Verwendung von zwei Gleichgewichtssignalen gleichzeitig macht die Strategie stabiler.

Strategiequellcode
/*backtest
start: 2023-01-14 00:00:00
end: 2024-01-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Fractal Adaptive Moving Average",shorttitle="FRAMA",overlay=true)


ma_fast = sma(close,13)

ma_slow = sma(close,26)
plot(ma_fast,color = green)
plot(ma_slow, color = yellow)
price = input(hl2)
len = input(defval=16,minval=1)
FC = input(defval=1,minval=1)
SC = input(defval=198,minval=1)
len1 = len/2
w = log(2/(SC+1))
H1 = highest(high,len1)
L1 = lowest(low,len1)
N1 = (H1-L1)/len1
H2 = highest(high,len)[len1]
L2 = lowest(low,len)[len1]
N2 = (H2-L2)/len1
H3 = highest(high,len)
L3 = lowest(low,len)
N3 = (H3-L3)/len
dimen1 = (log(N1+N2)-log(N3))/log(2)
dimen = iff(N1>0 and N2>0 and N3>0,dimen1,nz(dimen1[1]))
alpha1 = exp(w*(dimen-1))
oldalpha = alpha1>1?1:(alpha1<0.01?0.01:alpha1)
oldN = (2-oldalpha)/oldalpha
N = (((SC-FC)*(oldN-1))/(SC-1))+FC
alpha_ = 2/(N+1)
alpha = alpha_<2/(SC+1)?2/(SC+1):(alpha_>1?1:alpha_)
out = (1-alpha)*nz(out[1]) + alpha*price
plot(out,title="FRAMA",color=purple,transp=0)
entry() => crossover(ma_fast, ma_slow) and (out < close)
exit() => crossover(ma_slow, ma_fast) or crossunder(out, close)

strategy.entry(id= "MA cross", long = true, when = entry())
strategy.close(id= "MA cross", when = exit())