Strategi Bounce Rata-rata Bergerak Eksponensial

Penulis:ChaoZhang, Tanggal: 2023-12-08 16:47:39
Tag:

img

Tinjauan Strategi

Strategi bounce rata-rata bergerak eksponensial (EMA) adalah strategi yang melacak terobosan harga dari garis rata-rata bergerak. Ini memeriksa apakah lilin memantul kembali dari bawah garis rata-rata bergerak. Jika demikian, itu adalah sinyal bullish; jika lilin memantul ke bawah dari di atas garis rata-rata bergerak, itu adalah sinyal bearish.

Nama Strategi

Strategi Bounce Rata-rata Bergerak Eksponensial

Logika Strategi

Strategi ini didasarkan pada garis rata-rata bergerak eksponensial (EMA). Ini menghitung garis EMA secara real time. Kemudian memeriksa apakah harga memantul kembali dari garis EMA:

  • Jika harga pertama-tama menembus garis EMA dan kemudian bangkit kembali di atas garis EMA, itu adalah sinyal bullish
  • Jika harga pertama kali menembus garis EMA dan kemudian jatuh kembali di bawah garis EMA, itu adalah sinyal penurunan

Rebound semacam itu adalah sinyal masuk untuk strategi.

Analisis Keuntungan

Berdagang dengan tren, menghindari terjebak

Strategi bounce EMA hanya masuk setelah konfirmasi pembalikan harga, yang menghindari perdagangan melawan tren dan terjebak.

Pengeluaran kecil, laba historis yang baik

Dengan menggunakan rata-rata bergerak eksponensial, strategi dapat secara efektif meratakan data harga dan menyaring kebisingan pasar, menghasilkan penarikan kecil dan pengembalian historis yang baik.

Mudah dimengerti, pengaturan parameter yang fleksibel

Strategi bounce EMA hanya mengandalkan rata-rata bergerak, yang mudah dipahami bagi pemula. Sementara itu, periode EMA dapat disesuaikan secara fleksibel untuk menyesuaikan dengan produk yang berbeda.

Analisis Risiko

Kemungkinan sinyal palsu

Seringkali ada penyebaran palsu padat di sekitar garis EMA, yang dapat menyebabkan sinyal yang salah.

Berdagang dengan tren, tidak dapat memprediksi titik balik

Strategi ini pada dasarnya berdagang bersama dengan tren. Tidak dapat memprediksi titik balik harga dan hanya dapat mengikuti tren. Ini dapat kehilangan peluang masuk terbaik selama penyesuaian siklik.

Stop loss cenderung diambil keluar

Stop loss di dekat garis rata-rata bergerak kadang-kadang terpukul, menyebabkan kerugian yang diperbesar.

Optimalisasi

Masukkan indikator lain untuk penyaringan sinyal

Indikator seperti RSI dan MACD dapat ditambahkan untuk mengkonfirmasi pembalikan harga dan menyaring sinyal palsu.

Mengoptimalkan metode stop loss

Metode stop loss yang lebih fleksibel seperti time stop dan volatility stop dapat digunakan untuk mengurangi risiko diambil.

Optimasi parameter

Optimalkan parameter periode EMA untuk menemukan kombinasi parameter terbaik.

Kesimpulan

Strategi bounce EMA adalah strategi yang sederhana dan praktis mengikuti tren. Strategi ini memiliki penurunan kecil dan mudah dipahami. Pada saat yang sama, strategi ini juga memiliki beberapa risiko sinyal palsu dan dihentikan. Kita dapat mengoptimalkan strategi dengan menggunakan kombinasi indikator yang lebih baik, metode stop loss dan pemilihan parameter untuk menjadikannya strategi kuantitatif yang stabil dan dapat diandalkan.


/*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)


Lebih banyak