
Strategi bouncing moving average adalah sebuah strategi yang melacak harga untuk menembus moving average. Strategi ini memeriksa apakah pilar bouncing back dari bawah moving average, jika ya, itu adalah sinyal multihead; jika pilar bouncing back dari arah atas moving average, itu adalah sinyal headless.
Exponential Moving Average Bounce Strategy
Strategi ini didasarkan pada rata-rata bergerak eksponensial. Ini akan menghitung garis EMA secara real-time. Kemudian periksa apakah harga bouncing di atas atau di bawah garis EMA:
Ini adalah sinyal masuk ke dalam strategi.
Strategi bouncing EMA hanya masuk setelah menentukan bahwa harga berbalik, dan dapat menghindari operasi berlawanan arah.
Karena menggunakan indeks moving average, yang dapat secara efektif meratakan data harga, memfilter kebisingan pasar, membuat strategi ini sedikit mundur, dan memberikan keuntungan historis yang lebih baik.
Strategi bouncing EMA hanya bergantung pada moving average, sangat sederhana dan mudah dipahami oleh pemula; sementara parameter siklus EMA dapat disesuaikan secara fleksibel untuk menyesuaikan dengan varietas yang berbeda.
Seringkali ada penembusan palsu yang padat di dekat garis EMA, yang dapat menyebabkan sinyal yang salah. Parameter EMA harus disesuaikan untuk menyaring kebisingan ini.
Strategi ini pada dasarnya adalah operasi surplus. Tidak dapat memprediksi titik balik harga, hanya bisa mengejar tren. Ini mungkin waktu masuk terbaik yang terlewatkan untuk penyesuaian siklus.
Stop loss di dekat moving average terkadang terjatuh, menyebabkan kerugian yang lebih besar. Hal ini memerlukan penggunaan stop loss yang lebih fleksibel.
Indikator lain seperti RSI, MACD, dan lain-lain dapat ditambahkan untuk mengkonfirmasi pembalikan harga dan memfilter sinyal palsu.
Ada beberapa cara yang lebih fleksibel untuk mengurangi risiko terjatuh, seperti stop loss dengan waktu dan shock.
Parameter siklus EMA dioptimalkan untuk menemukan kombinasi parameter yang optimal. Anda juga dapat mengubah parameter EMA secara dinamis untuk melacak siklus pasar.
Strategi bouncing moving average adalah strategi pelacakan tren yang sederhana dan praktis. Ini berjalan lancar, pengembalian kecil, dan mudah dipahami. Namun, ada risiko sinyal palsu dan risiko stop loss.
/*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)