
Strategi bouncing moving average adalah strategi yang mengesan harga untuk menembusi moving averages. Ia memeriksa apakah harga akan bouncing kembali dari bawah moving average, jika ya, itu adalah isyarat multihead; jika harga bouncing ke bawah dari arah atas moving average, itu adalah isyarat kosong.
Exponential Moving Average Bounce Strategy
Strategi ini berdasarkan purata bergerak eksponensial. Ia akan mengira garis EMA dalam masa nyata. Ia kemudian memeriksa sama ada harga bertolak dari atas atau di bawah garis EMA:
Ini adalah isyarat permulaan untuk strategi.
EMA hanya akan memasuki pasaran apabila ia mengesahkan bahawa harga telah berbalik dan ia tidak akan terjejas.
Oleh kerana menggunakan purata bergerak indeks, data harga dapat dihaluskan dengan berkesan, memfilterkan bunyi pasaran, menjadikan strategi ini sedikit mundur, dan keuntungan sejarah lebih baik.
Strategi EMA bouncing hanya bergantung pada purata bergerak, sangat mudah dan mudah difahami oleh pemula; sementara parameter kitaran EMA boleh disesuaikan secara fleksibel untuk menyesuaikan diri dengan pelbagai jenis.
Selalunya terdapat banyak penembusan palsu berdekatan dengan garis EMA, yang boleh menyebabkan isyarat yang salah. Parameter EMA perlu disesuaikan untuk menyaring kebisingan ini.
Strategi ini pada dasarnya adalah operasi surut. Tidak dapat meramalkan titik perubahan harga, hanya boleh mengejar trend. Ini mungkin kehilangan masa masuk terbaik untuk penyesuaian kitaran.
Hentian yang berdekatan dengan purata bergerak kadang-kadang akan ditembusi, menyebabkan kerugian meluas. Ini memerlukan penggunaan hentian yang lebih fleksibel.
Indikator lain seperti RSI, MACD dan lain-lain boleh ditambah untuk mengesahkan harga berbalik dan menapis isyarat palsu.
Penghentian yang lebih fleksibel seperti penghentian masa, penghentian gegaran dan sebagainya boleh digunakan untuk mengurangkan risiko terjatuh.
Optimumkan parameter kitaran EMA untuk mencari kombinasi parameter terbaik. Anda juga boleh mengubah parameter EMA secara dinamik untuk mengesan kitaran pasaran.
Strategi rebound moving average adalah strategi trend yang mudah dan praktikal. Ia berjalan lancar, pengunduran kecil, dan mudah difahami. Di samping itu, terdapat risiko isyarat palsu dan risiko berhenti.
/*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)