Strategi HODL Oscillasi Purata Bergerak

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

Strategi ini mengamati turun naik harga di sekitar purata bergerak jangka panjang (contohnya 200 hari) untuk menentukan isyarat tahan, perdagangan pecah untuk kemasukan kedudukan dan menggunakan pecah di bawah sebagai stop loss.

Logik Strategi:

  1. Mengira purata bergerak jangka panjang, biasanya 200 hari.

  2. Masuk dalam jangka panjang apabila harga pecah di atas purata bergerak.

  3. Keluar lama apabila harga kembali di bawah purata bergerak.

  4. Pegang kedudukan panjang sehingga pecah di bawah stop loss.

Kelebihan:

  1. MA jangka panjang secara berkesan mengenal pasti trend jangka menengah hingga panjang.

  2. Perdagangan keluar menangkap pembalikan jangka panjang dengan tepat pada masanya.

  3. Kekerapan perdagangan yang lebih rendah mengurangkan kos dan risiko.

Risiko:

  1. MAs yang lebih lama tertinggal dengan ketara, mengakibatkan masa kemasukan yang buruk.

  2. Tidak ada had terhadap risiko pengambilan selepas pecah.

  3. Kecelakaan kecil yang kerap membawa kerugian kecil yang berterusan.

Ringkasnya, strategi HODL ini menggunakan goyangan MA panjang untuk menentukan masa tahan, meminimumkan kekerapan 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 lanjut