Strategi HODL Oscillasi Rata-rata yang Bergerak

Penulis:ChaoZhang, Tanggal: 2023-09-12 16:02:24
Tag:

Strategi ini mengamati osilasi harga di sekitar rata-rata bergerak jangka panjang (misalnya 200 hari) untuk menentukan sinyal hold, perdagangan breakout untuk masuk posisi dan menggunakan break di bawah sebagai stop loss.

Logika Strategi:

  1. Menghitung rata-rata bergerak jangka panjang, biasanya 200 hari.

  2. Masuk long ketika harga pecah di atas rata-rata bergerak.

  3. Keluar panjang ketika harga kembali di bawah rata-rata bergerak.

  4. Tahan posisi panjang sampai putus di bawah stop loss.

Keuntungan:

  1. MA jangka panjang secara efektif mengidentifikasi tren jangka menengah hingga jangka panjang.

  2. Perdagangan breakout menangkap pembalikan jangka panjang secara tepat waktu.

  3. Frekuensi perdagangan yang lebih rendah mengurangi biaya dan risiko.

Risiko:

  1. MAs yang lebih lama tertinggal secara signifikan, yang mengakibatkan waktu masuk yang buruk.

  2. Tidak ada batasan risiko penarikan setelah keluar.

  3. Kecelakaan kecil sering membawa kerugian kecil yang berkelanjutan.

Singkatnya, strategi HODL ini menggunakan osilasi MA panjang untuk menentukan waktu ditahan, meminimalkan frekuensi perdagangan.


/*backtest
start: 2022-09-05 00:00:00
end: 2023-04-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("HODLBot", default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_every_tick=true, overlay=true)
    
//// Time limits 
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(01, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2029, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true

maPeriod = input(200, "MA Period")
smoothing = input(defval="EMA", options=["EMA", "SMA"])

ma(smoothing, src, length) => 
    if smoothing == "EMA"
        ema(src, length)
    else
        if smoothing == "SMA"
            sma(src, length)
        
//// Main ////

movingAverage = ma(smoothing, close, maPeriod)

plot(movingAverage, color=orange, style = line, linewidth = 4)
 
// very simple, price over MA? Buy and HODL 
if (testPeriod() and close > movingAverage)
    strategy.entry("HODL", strategy.long)

// Price under, close long
if (testPeriod() and close < movingAverage)
    strategy.close("HODL")


Lebih banyak