Strategi Lantunan Purata Pergerakan


Tarikh penciptaan: 2023-12-08 16:47:39 Akhirnya diubah suai: 2023-12-08 16:47:39
Salin: 0 Bilangan klik: 925
1
fokus pada
1621
Pengikut

Strategi Lantunan Purata Pergerakan

Gambaran Keseluruhan Strategi

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.

Nama strategi

Exponential Moving Average Bounce Strategy

Prinsip Strategi

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:

  • Jika harga jatuh di bawah EMA dan kemudian naik semula ke atas EMA, ia adalah isyarat berbilang arah.
  • Jika harga mula menembusi garis EMA dan kemudian turun lagi untuk menutup di bawah garis EMA, ia adalah isyarat kosong

Ini adalah isyarat permulaan untuk strategi.

Analisis kelebihan strategi

Bergerak dengan lancar, mengelakkan terjerat

EMA hanya akan memasuki pasaran apabila ia mengesahkan bahawa harga telah berbalik dan ia tidak akan terjejas.

Pemindahan kecil, perolehan sejarah

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.

Mudah difahami, parameter boleh disesuaikan

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.

Analisis risiko

Isyarat mudah palsu

Selalunya terdapat banyak penembusan palsu berdekatan dengan garis EMA, yang boleh menyebabkan isyarat yang salah. Parameter EMA perlu disesuaikan untuk menyaring kebisingan ini.

Operasi beransur-ansur, tidak dapat meramalkan titik perubahan

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.

Hentikan kerosakan dengan mudah.

Hentian yang berdekatan dengan purata bergerak kadang-kadang akan ditembusi, menyebabkan kerugian meluas. Ini memerlukan penggunaan hentian yang lebih fleksibel.

Arah pengoptimuman

Gabungan dengan petunjuk lain untuk menapis isyarat

Indikator lain seperti RSI, MACD dan lain-lain boleh ditambah untuk mengesahkan harga berbalik dan menapis isyarat palsu.

Pengoptimuman Hentikan Kerosakan

Penghentian yang lebih fleksibel seperti penghentian masa, penghentian gegaran dan sebagainya boleh digunakan untuk mengurangkan risiko terjatuh.

Optimumkan parameter

Optimumkan parameter kitaran EMA untuk mencari kombinasi parameter terbaik. Anda juga boleh mengubah parameter EMA secara dinamik untuk mengesan kitaran pasaran.

ringkaskan

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.

Kod 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)