Strategi Pantulan Rata-rata Bergerak


Tanggal Pembuatan: 2023-12-08 16:47:39 Akhirnya memodifikasi: 2023-12-08 16:47:39
menyalin: 0 Jumlah klik: 925
1
fokus pada
1621
Pengikut

Strategi Pantulan Rata-rata Bergerak

Tinjauan Strategi

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.

Nama kebijakan

Exponential Moving Average Bounce Strategy

Prinsip Strategi

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:

  • Jika harga jatuh di bawah garis EMA dan kemudian naik kembali di atas garis EMA, maka ini adalah sinyal multihead.
  • Jika harga melewati garis EMA dan kemudian turun lagi untuk menutup di bawah garis EMA, itu adalah sinyal kosong.

Ini adalah sinyal masuk ke dalam strategi.

Analisis Keunggulan Strategi

Operasi lancar, hindari terjerat

Strategi bouncing EMA hanya masuk setelah menentukan bahwa harga berbalik, dan dapat menghindari operasi berlawanan arah.

Penarikan kecil, keuntungan historis

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.

Mudah dimengerti, parameter dapat disesuaikan secara fleksibel

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.

Analisis risiko

Kemungkinan sinyal palsu

Seringkali ada penembusan palsu yang padat di dekat garis EMA, yang dapat menyebabkan sinyal yang salah. Parameter EMA harus disesuaikan untuk menyaring kebisingan ini.

Operasi berlanjut, tidak dapat memprediksi titik balik

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 posisi mudah untuk ditembus

Stop loss di dekat moving average terkadang terjatuh, menyebabkan kerugian yang lebih besar. Hal ini memerlukan penggunaan stop loss yang lebih fleksibel.

Arah optimasi

Kombinasi sinyal filter dengan indikator lain

Indikator lain seperti RSI, MACD, dan lain-lain dapat ditambahkan untuk mengkonfirmasi pembalikan harga dan memfilter sinyal palsu.

Mengoptimalkan Stop Loss

Ada beberapa cara yang lebih fleksibel untuk mengurangi risiko terjatuh, seperti stop loss dengan waktu dan shock.

Optimasi parameter

Parameter siklus EMA dioptimalkan untuk menemukan kombinasi parameter yang optimal. Anda juga dapat mengubah parameter EMA secara dinamis untuk melacak siklus pasar.

Meringkaskan

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.

Kode Sumber Strategi
/*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)