Exponential Moving Average Bounce-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-12-08 16: 47:39
Tags:

img

Strategieübersicht

Die exponentielle gleitende Durchschnitt (EMA) ist eine Strategie, die die Preisdurchbrüche der gleitenden Durchschnittslinie verfolgt. Sie überprüft, ob Kerzen von unterhalb der gleitenden Durchschnittslinie zurückspringen. Wenn ja, ist es ein bullisches Signal; wenn die Kerze von über der gleitenden Durchschnittslinie nach unten springt, ist es ein bärisches Signal.

Name der Strategie

Exponential Moving Average Bounce-Strategie

Strategie Logik

Diese Strategie basiert auf der exponentiellen gleitenden Durchschnittslinie (EMA). Es berechnet eine EMA-Linie in Echtzeit. Dann überprüft es, ob der Preis von der EMA-Linie zurückspringt:

  • Wenn der Preis zuerst durch die EMA-Linie bricht und dann wieder über die EMA-Linie zurückspringt, ist dies ein bullisches Signal
  • Wenn der Preis zuerst die EMA-Linie durchbricht und dann wieder unter die EMA-Linie fällt, ist dies ein bärisches Signal

Ein solcher Aufschwung ist das Einstiegssignal für die Strategie.

Analyse der Vorteile

Handel mit dem Trend, um nicht gefangen zu werden

Die EMA-Bounce-Strategie wird erst eingeleitet, nachdem die Preisumkehr bestätigt wurde, was verhindert, dass man gegen den Trend handelt und gefangen bleibt.

Kleine Abzüge, gute historische Renditen

Durch die Verwendung des exponentiellen gleitenden Durchschnitts kann die Strategie die Preisdaten effektiv glätten und Marktlärm filtern, was zu kleinen Rückzügen und guten historischen Renditen führt.

Einfach zu verstehen, flexible Parameteranpassung

Die EMA-Bounce-Strategie stützt sich einfach auf gleitende Durchschnitte, die für Anfänger leicht zu verstehen sind.

Risikoanalyse

Anfällig für falsche Signale

Die EMA-Parameter müssen angepasst werden, um das Geräusch zu filtern.

Handel mit dem Trend, unfähig, Wendepunkte vorherzusagen

Die Strategie handelt im Wesentlichen mit dem Trend. Sie ist nicht in der Lage, Preiswendepunkte vorherzusagen und kann nur dem Trend folgen. Dies kann die beste Eintrittsmöglichkeit während zyklischer Anpassungen verpassen.

Stop-Loss-Anfälligkeit für Ausnahme

Der Stop-Loss in der Nähe der gleitenden Durchschnittslinie wird manchmal getroffen, was zu vergrößerten Verlusten führt.

Optimierung

Einbeziehung anderer Indikatoren für die Signalfilterung

Indikatoren wie RSI und MACD können hinzugefügt werden, um die Preisumkehr zu bestätigen und falsche Signale auszufiltern.

Optimierung der Stop-Loss-Methoden

Die Risikopositionen werden von den zuständigen Behörden der Mitgliedstaaten und der Kommission gemäß den Bestimmungen der Verordnung (EU) Nr. 575/2013 und der Verordnung (EU) Nr. 575/2013 ermittelt.

Optimierung der Parameter

Optimieren Sie die EMA-Periodenparameter, um die besten Parameterkombinationen zu finden. Die EMA-Parameter können auch dynamisch gemacht werden, um Marktzyklen zu verfolgen.

Schlussfolgerung

Die EMA-Bounce-Strategie ist eine einfache und praktische Trend-Folge-Strategie. Sie hat kleine Drawdowns und ist leicht zu verstehen. Gleichzeitig birgt sie auch einige Risiken von falschen Signalen und wird gestoppt. Wir können die Strategie optimieren, indem wir bessere Indikatorenkombinationen, Stop-Loss-Methoden und Parameterwahl verwenden, um sie zu einer stabilen und zuverlässigen quantitativen Strategie zu machen.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tweakerID

// Simple strategy that checks for price bounces over an Exponential Moving Average. If the CLOSE of the candle bounces
// back from having it's LOW below the EMA, then it's a Bull Bounce. If the CLOSE of the candle bounces down from having it's
// high above the EMA, then it's a Bear Bounce. This logic can be reverted.

//@version=4
strategy("EMA Bounce", overlay=true, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, 
     initial_capital=10000, 
     commission_value=0.04, 
     calc_on_every_tick=false, 
     slippage=0)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

/////////////////////// STRATEGY INPUTS ////////////////////////////////////////
title1=input(true, "-----------------Strategy Inputs-------------------")  

i_EMA=input(20, title="EMA Length")

/////////////////////// BACKTESTER /////////////////////////////////////////////
title2=input(true, "-----------------General Inputs-------------------")  

// Backtester General Inputs
i_SL=input(true, title="Use Swing Stop Loss and Take Profit")
i_SPL=input(defval=10, title="Swing Point Loopback")
i_PercIncrement=input(defval=.2, step=.1, title="Swing Point SL Perc Increment")*0.01
i_TPRRR = input(1.2, step=.1, title="Take Profit Risk Reward Ratio")

// Bought and Sold Boolean Signal
bought = strategy.position_size > strategy.position_size[1] 
 or strategy.position_size < strategy.position_size[1]

// Price Action Stop and Take Profit
LL=(lowest(i_SPL))*(1-i_PercIncrement)
HH=(highest(i_SPL))*(1+i_PercIncrement)
LL_price = valuewhen(bought, LL, 0)
HH_price = valuewhen(bought, HH, 0)
entry_LL_price = strategy.position_size > 0 ? LL_price : na 
entry_HH_price = strategy.position_size < 0 ? HH_price : na 
tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR
stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR


/////////////////////// STRATEGY LOGIC /////////////////////////////////////////

EMA=ema(close, i_EMA)
LowAboveEMA=low > EMA
LowBelowEMA=low < EMA
HighAboveEMA=high > EMA
HighBelowEMA=high < EMA
BullBounce=LowAboveEMA[1] and LowBelowEMA and close > EMA //and close > open
BearBounce=HighBelowEMA[1] and HighAboveEMA and close < EMA //and close < open
plot(EMA)

BUY=BullBounce
SELL=BearBounce

//Inputs
DPR=input(false, "Allow Direct Position Reverse")
reverse=input(false, "Reverse Trades")

// Entries
if reverse
    if not DPR
        strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0)
    else     
        strategy.entry("long", strategy.long, when=SELL)
        strategy.entry("short", strategy.short, when=BUY)
else
    if not DPR 
        strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0)
    else
        strategy.entry("long", strategy.long, when=BUY)
        strategy.entry("short", strategy.short, when=SELL)


SL=entry_LL_price
SSL=entry_HH_price
TP=tp
STP=stp

strategy.exit("TP & SL", "long", limit=TP, stop=SL, when=i_SL)
strategy.exit("TP & SL", "short", limit=STP, stop=SSL, when=i_SL)

/////////////////////// PLOTS //////////////////////////////////////////////////

plot(strategy.position_size > 0 ? SL : na , title='SL', style=plot.style_cross, color=color.red)
plot(strategy.position_size < 0 ? SSL : na , title='SSL', style=plot.style_cross, color=color.red)
plot(strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green)
plot(strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green)
// Draw price action setup arrows
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, 
 color=color.green, title="Bullish Setup", transp=80, size=size.auto)
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, 
 color=color.red, title="Bearish Setup", transp=80, size=size.auto)


Mehr