Strategi Garis Tren Instan Els


Tanggal Pembuatan: 2023-12-20 16:51:05 Akhirnya memodifikasi: 2023-12-20 16:51:05
menyalin: 0 Jumlah klik: 938
1
fokus pada
1621
Pengikut

Strategi Garis Tren Instan Els

Ringkasan

Strategi Ehlers Instant Trend Line adalah strategi yang dikemukakan oleh John Ehlers dalam buku analisis kontrolnya tentang saham dan futures. Strategi ini menggunakan indikator teknis untuk mengidentifikasi tren instan saham atau futures, dan membuka posisi saat tren berbalik.

Prinsip Strategi

Inti dari strategi ini adalah menghitung garis tren instan. Rumus untuk garis tren adalah sebagai berikut:

it := (a-((a*a)/4.0))*src+0.5*a*a*src[1]-(a-0.75*a*a)*src[2]+2*(1-a )*it[1]-(1-a )*(1-a )*it[2]

Di mana src mewakili harga, a adalah faktor pelurus, dengan nilai default 0,07. Rumus ini adalah filter dua tingkat yang dapat meluruskan harga dan menghasilkan tren.

Indikator kunci lainnya adalah garis keterlambatan (lag), yang dihitung dengan rumus:

lag = 2.0 * it - nz(it[2])

Garis ini tertinggal dari garis IT satu siklus. Ketika harga naik melewati garis tertinggal, mewakili pembalikan tren, melakukan lebih banyak; Ketika harga turun melewati garis tertinggal, mewakili pembalikan tren, melakukan lebih banyak.

Selain itu, strategi juga menetapkan stop loss untuk mengendalikan risiko.

Analisis Keunggulan

Strategi ini memiliki keuntungan sebagai berikut:

  1. Menggunakan IT untuk mengidentifikasi tren, dapat secara efektif menyaring kebisingan pasar, meningkatkan kualitas sinyal
  2. Aplikasi filter tingkat dua, parameter optimasi ruang besar, dapat disesuaikan tinggi
  3. Menghasilkan sinyal perdagangan yang digabungkan dengan garis lag, untuk menghindari pembukaan posisi terendah berulang dalam tren
  4. Set Stop Loss Single Control Risk, Anda dapat mengatur Stop Loss Ratio
  5. Struktur kode yang jelas, mudah dipahami dan dimodifikasi

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Setting parameter IT line dan lag line yang salah dapat menyebabkan sinyal yang salah
  2. Stop loss yang tidak tepat mungkin terlalu cepat atau terlalu besar
  3. Frekuensi transaksi mungkin lebih tinggi, biaya transaksi mempengaruhi keuntungan
  4. Terlalu lama memegang posisi terpusat dapat mempengaruhi tingkat pengembalian

Risiko-risiko ini dapat dikurangi dengan:

  1. Parameter optimasi untuk menerapkan algoritma pembelajaran mesin
  2. Setel Stop Loss Adaptif
  3. Adaptasi jumlah open position yang tepat untuk mengurangi frekuensi transaksi
  4. Setting Stop Loss Periode

Arah optimasi

Strategi ini dapat dioptimalkan dari beberapa arah:

  1. Uji pengaruh parameter filter yang berbeda terhadap hasil, mencari parameter optimal
  2. Mencoba untuk memfilter sinyal perdagangan dengan indikator lain untuk meningkatkan kualitas sinyal
  3. Mengoptimalkan logika pembukaan posisi, meningkatkan posisi pada fase percepatan tren
  4. Menetapkan strategi stop loss adaptif, menyesuaikan stop loss sesuai dengan volatilitas pasar
  5. Melakukan analisis urutan waktu untuk menilai efek waktu dan siklus perdagangan pada hasil

sebagai kesimpulan

Secara keseluruhan, strategi garis tren instan Ells menggunakan indikator teknis untuk mengidentifikasi tren real-time saham / futures dan membuka posisi saat tren berbalik. Ini memiliki keunggulan seperti penyaringan kebisingan yang efektif, penyesuaian parameter tinggi, logika pembuatan sinyal yang jelas, dan kontrol risiko built-in. Dengan lebih mengoptimalkan pilihan sinyal parameter, penyaringan, skala posisi, dan penyesuaian stop loss, strategi ini dapat mencapai kinerja yang lebih baik.

Kode Sumber Strategi
/*backtest
start: 2022-12-13 00:00:00
end: 2023-12-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Ehlers Instantaneous Trendline Strategy", shorttitle = "Ehlers Instantaneous Trendline Strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, backtest_fill_limits_assumption = 1)
src = input(hl2, title="Source")
a = input(0.07, title="Alpha", step=0.01) 
fr = input(false, title="Fill Trend Region")
it = na
if (na(it[2]) or na(it[1]))
    it := (src + 2 * src[1] + src[2]) / 4.0
else
    it := (a-((a*a)/4.0))*src+0.5*a*a*src[1]-(a-0.75*a*a)*src[2]+2*(1-a )*it[1]-(1-a )*(1-a )*it[2]
lag = 2.0 * it - nz(it[2])
rngFrac = input(0.35)
revPct = input(0.015)
stopType = input(title="Stop type", defval = "stop-order", options = ["stop-order", "market-order", "None"])

diff = input(0.5, title = "Spread")
LongPrice(p) =>
    LongPrice = diff == 0 ? p : floor(p / diff) * diff

ShortPrice(p) =>
    ShortPrice = diff == 0 ? p : ceil(p / diff) * diff

strategy.cancel_all()
reverseTrade = false
if stopType == "market-order" 
    if  strategy.position_size > 0 and close < strategy.position_avg_price * (1 - revPct) 
        strategy.order("StopLoss open short", strategy.short, 2 * strategy.position_size, limit = close - 2 * diff)
        reverseTrade := true
    if  strategy.position_size < 0 and close > strategy.position_avg_price * (1 + revPct) 
        strategy.order("StopLoss open long", strategy.long, -2 * strategy.position_size, limit = close + 2 * diff)
        reverseTrade := true
    
if lag > it and not reverseTrade
    price = LongPrice(max(close - (high - low) * rngFrac, low))
    if strategy.position_size <= 0
        strategy.order("Open long", strategy.long, strategy.equity / price - strategy.position_size, limit = price)
        if stopType == "stop-order"
            strategy.order("StopLoss open long", strategy.short, 2 * strategy.equity / price, stop = ShortPrice(price * (1 - revPct)))
    else
        if stopType == "stop-order"
            strategy.order("StopLoss open short", strategy.short, 2 * strategy.position_size, stop = ShortPrice(strategy.position_avg_price * (1 - revPct)))
if lag < it and not reverseTrade
    price = ShortPrice(min(close - (high - low) * rngFrac, high))
    if strategy.position_size >= 0
        strategy.order("Open short", strategy.short, strategy.equity / price + strategy.position_size, limit = price)
        if stopType == "stop-order"
            strategy.order("StopLoss open short", strategy.long, 2 * strategy.equity / price, stop = LongPrice(price * (1 + revPct)))
    else
        if stopType == "stop-order"
            strategy.order("StopLoss open long", strategy.long, -2 * strategy.position_size, stop = LongPrice(strategy.position_avg_price * (1 + revPct)))


itPlot=plot(it, color=red, linewidth=1, title="Trend")
lagPlot=plot(lag, color=blue, linewidth=1, title="Trigger")
fill(itPlot, lagPlot, it < lag ? green : red,  transp=70)

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(9, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()