Strategi Penyerangan Rentang Rata-rata Bergerak


Tanggal Pembuatan: 2024-01-18 14:56:24 Akhirnya memodifikasi: 2024-01-18 14:56:24
menyalin: 0 Jumlah klik: 328
1
fokus pada
1212
Pengikut

Strategi Penyerangan Rentang Rata-rata Bergerak

Ringkasan

Strategi pengapungan interval bergerak adalah strategi pelacakan tren yang didasarkan pada rata-rata bergerak. Strategi ini menilai tren harga dengan menghitung persilangan dua rata-rata bergerak dan menggabungkan manajemen interval untuk melacak tren dan menghasilkan keuntungan.

Prinsip Strategi

Strategi ini menggunakan dua rata-rata bergerak: garis cepat dan garis lambat. Parameter garis cepat yang lebih kecil, lebih sensitif terhadap perubahan harga; parameter garis lambat yang lebih besar, penilaian tren lebih dapat diandalkan.

Selain itu, strategi ini memperkenalkan beberapa assisting moving averages yang digunakan untuk menentukan arah tren utama dan menghindari mismatch. Selain itu, fungsi Highest dan Lowest digabungkan dengan ATR untuk menghitung stop loss dinamis dan mengunci keuntungan.

Untuk setiap transaksi, strategi ini dapat memilih jumlah pesanan tetap, atau menghitung posisi secara dinamis sesuai dengan persentase kerugian maksimum yang ditetapkan oleh parameter. Yang terakhir dapat membuat risiko setiap transaksi dikendalikan dalam batas tertentu.

Analisis Keunggulan

  • Dengan menggunakan sistem moving average ganda, Anda dapat secara efektif melacak tren harga.
  • introdu beberapa kondisi penyaringan linear dan arah tambahan yang dapat mengurangi transaksi noise
  • Menghitung stop loss secara dinamis dan menyesuaikan posisi untuk membatasi kerugian maksimum per transaksi
  • Sistem manajemen posisi mampu meningkatkan keuntungan secara indeks, sementara maksimum penarikan dikendalikan dalam kisaran tertentu

Analisis risiko

  • Strategi Moving Average Ganda mudah untuk dieksploitasi pada periode konsolidasi
  • Kondisi garis rata tambahan dan filter mungkin melewatkan beberapa peluang perdagangan
  • Stop loss dapat ditembus dan menyebabkan kerugian yang lebih besar saat pasar bergejolak
  • Posisi yang terlalu besar dapat menyebabkan kerugian besar dalam situasi ekstrem

Risiko ini dapat diminimalkan dengan mengoptimalkan parameter moving average, menyesuaikan berat garis rata-rata tambahan, mengubah stop loss margin, dan lain-lain. Dengan demikian, aturan manajemen posisi yang ketat dapat dikendalikan untuk mengurangi dampak kerugian tunggal.

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Uji lebih banyak jenis kombinasi rata-rata bergerak untuk mencari parameter optimal
  2. Menambahkan indikator intensitas tren untuk menghindari kerugian akibat pembalikan tren
  3. Studi tentang algoritma penangguhan kerugian yang beradaptasi untuk membuat penangguhan kerugian lebih cerdas
  4. Mengoptimalkan strategi manajemen posisi, menyeimbangkan antara keuntungan dan risiko

Meringkaskan

Moving Average Range Swallowing Strategy secara keseluruhan adalah strategi perdagangan kuantitatif yang sangat praktis. Ini juga memiliki keuntungan dari pelacakan tren dan pengendalian risiko, cocok untuk memegang posisi panjang. Dengan penyesuaian parameter dan optimasi fungsionalitas yang diperluas, strategi ini dapat dibuat lebih kuat dan lebih cerdas, sehingga menghasilkan keuntungan yang lebih berkelanjutan.

Kode Sumber Strategi
/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// This is a simple crossover Moving Average strategy, good for long term crypto trades. 
// It buys when the MA "X" crosses up the MA "Y", viceversa for shorts. 
// Both MAs are selectable from the Inputs section in the front panel. 
// There is also a Position Management option thats 
// sizes positions to have the same USD risk (using leverage) on each trade,
// based on the percentage distance to the stop loss level.
// If you turn this option on you will see how the profit 
// grows exponentially while the drawdown percentage almost remains the same.

strategy("4 MA Strat", overlay=true, pyramiding=1, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, 
     commission_value = 0.04, 
     initial_capital=100, 
     process_orders_on_close=false)

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

//Inputs
PSMGMT=input(defval=false, title="Position Management")
risk_per_trade=input(defval=5, title="Risk Per Trade % (for PSMGMT)", step=0.5)*.01

//SL & TP Inputs
i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(10, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=1, title="SL Expander")

i_MAFilter=input(false, title="Use MA4 as Bull / Bear filter")

//MA Type Selector
MAtype = input(false, title="----------------MA Selector-----------------")
MA1Period = input(9, title="MA1 Period")
MA1Type = input(title="MA1 Type", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "ALMA"])
MA2Period = input(21, title="MA2 Period")
MA2Type = input(title="MA2 Type", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "ALMA"])
MA3Period = input(50, title="MA3 Period")
MA3Type = input(title="MA3 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "ALMA"])
MA4Period = input(100, title="MA4 Period")
MA4Type = input(title="MA4 Type", defval="SMA", options=["RMA", "SMA", "EMA", "WMA", "HMA", "ALMA"])

//MA Selector 
MA1 = if MA1Type == "SMA"
    sma(close, MA1Period)
else
    if MA1Type == "EMA"
        ema(close, MA1Period)
    else
        if MA1Type == "WMA"
            wma(close, MA1Period)
        else
            if MA1Type == "RMA"
                rma(close, MA1Period)
            else
                if MA1Type == "HMA"
                    hma(close, MA1Period)
                else
                    if MA1Type == "ALMA"
                        alma(close, MA1Period, 0.85, 6)
                    
MA2 = if MA2Type == "SMA"
    sma(close, MA2Period)
else
    if MA2Type == "EMA"
        ema(close, MA2Period)
    else
        if MA2Type == "WMA"
            wma(close, MA2Period)
        else
            if MA2Type == "RMA"
                rma(close, MA2Period)
            else
                if MA2Type == "HMA"
                    hma(close, MA2Period)
                else
                    if MA2Type == "ALMA"
                        alma(close, MA2Period, 0.85, 6)
                            
MA3 = if MA3Type == "SMA"
    sma(close, MA3Period)
else
    if MA3Type == "EMA"
        ema(close, MA3Period)
    else
        if MA3Type == "WMA"
            wma(close, MA3Period)
        else
            if MA3Type == "RMA"
                rma(close, MA3Period)
            else
                if MA3Type == "HMA"
                    hma(close, MA3Period)
                else
                    if MA3Type == "ALMA"
                        alma(close, MA3Period, 0.85, 6)
                    
MA4 = if MA4Type == "SMA"
    sma(close, MA4Period)
else
    if MA4Type == "EMA"
        ema(close, MA4Period)
    else
        if MA4Type == "WMA"
            wma(close, MA4Period)
        else
            if MA4Type == "RMA"
                rma(close, MA4Period)
            else
                if MA4Type == "HMA"
                    hma(close, MA4Period)
                else
                    if MA4Type == "ALMA"
                        alma(close, MA4Period, 0.85, 6)
                    
// X Y Logic
x=input(title="x", defval="close", options=["MA1", "MA2", "MA3", "MA4", "close"])
y=input(title="y", defval="MA1", options=["MA1", "MA2", "MA3", "MA4", "close"])

X = if x == "MA1"
    MA1
else
    if x == "MA2"
        MA2
    else
        if x == "MA3"
            MA3
        else
            if x == "MA4"
                MA4
            else
                if x == "close"
                    close
                    
Y = if y == "MA1"
    MA1
else
    if y == "MA2"
        MA2
    else
        if y == "MA3"
            MA3
        else
            if y == "MA4"
                MA4
            else
                if y == "close"
                    close

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? LSL : isshort ? SSL : na

//Position Management Calculations
capital=strategy.equity
distance_to_long_stop_loss=1-(LSL/strategy.position_avg_price)
distance_to_short_stop_loss=(SSL/strategy.position_avg_price)-1
PS=(capital*risk_per_trade)/distance_to_long_stop_loss
SPS=(capital*risk_per_trade)/distance_to_short_stop_loss
PSqty=PS/close
SPSqty=SPS/close

//Strategy Calculations
MAFilter=close > MA4
BUY = crossover(X , Y) 
SELL = crossunder(X , Y) 
BUY2 = crossover(X , Y) and MAFilter
SELL2 = crossunder(X , Y) and not MAFilter

//Entries
strategy.entry("long", true, qty=PSMGMT ? PSqty : na, when=not i_MAFilter ? BUY : BUY2)
strategy.entry("short", false, qty=PSMGMT ? SPSqty : na, when=not i_MAFilter ? SELL : SELL2)

//Exits
if i_SL //and SL != na
    strategy.exit("longexit", "long", stop=LSL)
    strategy.exit("shortexit", "short", stop=SSL)
if i_MAFilter
    strategy.close("long", when=SELL)
    strategy.close("short", when=BUY)


//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(MA1, color=color.green, linewidth=1, title="MA1")
plot(MA2, color=color.yellow, linewidth=2, title="MA2")
plot(MA3, color=color.red, linewidth=3, title="MA3")
plot(MA4, color=color.white, linewidth=3, title="MA4")
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, color=color.green, title="Bullish Setup")
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, color=color.red, title="Bearish Setup")


//Debugging Plots
plot(LSL, transp=100, title="SwingLow")
plot(bought ? 1:0, transp=100, title="bought")
plot(PSqty, title="PSqty", transp=100)
plot(SPSqty, title="SPSqty", transp=100)
plot(PS, title="PS", transp=100)
plot(SPS, title="SPS", transp=100)
plot(distance_to_long_stop_loss, title="distance to LSL", transp=100)
plot(distance_to_short_stop_loss, title="distance to SSL", transp=100)
plot(capital, title="equity", transp=100)