Strategi Talian Aliran Segera Els


Tarikh penciptaan: 2023-12-20 16:51:05 Akhirnya diubah suai: 2023-12-20 16:51:05
Salin: 0 Bilangan klik: 938
1
fokus pada
1621
Pengikut

Strategi Talian Aliran Segera Els

Gambaran keseluruhan

Strategi garis trend segera Ehlers dikemukakan oleh John Ehlers dalam buku analisis kawalan saham dan niaga hadapan beliau. Strategi ini menggunakan petunjuk teknikal untuk mengenal pasti trend segera saham atau niaga hadapan dan membuka kedudukan apabila trend berbalik.

Prinsip Strategi

Inti strategi ini adalah untuk mengira garisan trend segera. Rumus untuk garisan IT 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 penyelarasan dengan nilai lalai 0.07. Rumus ini adalah penapis peringkat dua yang dapat menyelaraskan harga dan menghasilkan trend.

Indikator utama lain adalah garisan kelewatan ((lag), yang dikira dengan formula:

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

Garis ini tertinggal satu kitaran dari garis IT. Apabila harga di atas melewati garis tertinggal, ia mewakili pembalikan trend, dan melakukan lebih banyak; apabila harga di bawah melewati garis tertinggal, ia mewakili pembalikan trend, dan melakukan kosong.

Di samping itu, strategi ini juga menetapkan pelan stop loss untuk mengawal risiko.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan IT untuk mengenal pasti trend, dapat menyaring bunyi pasaran dengan berkesan dan meningkatkan kualiti isyarat
  2. Penggunaan penapis peringkat dua, parameter pengoptimuman ruang besar, penyesuaian tinggi
  3. Menjana isyarat dagangan dengan menggunakan garisan ketinggalan untuk mengelakkan pembukaan posisi terhad berulang dalam trend
  4. Tetapkan risiko kawalan stop loss tunggal, anda boleh menetapkan kadar stop loss
  5. Struktur kod jelas, mudah difahami dan diubah suai

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Tetapan parameter IT line dan lag line yang tidak betul boleh menyebabkan isyarat yang salah
  2. Penetapan titik henti yang tidak betul boleh menghentikan terlalu awal atau terlalu besar
  3. Frekuensi dagangan mungkin lebih tinggi, kos dagangan mempengaruhi keuntungan
  4. Kesan penggandaan yang terlalu lama boleh menjejaskan kadar pulangan

Risiko ini boleh dikurangkan dengan:

  1. Parameter pengoptimuman algoritma pembelajaran mesin
  2. Tetapkan titik henti yang beradaptasi
  3. Menyesuaikan jumlah dagangan yang dibuka dan mengurangkan kekerapan dagangan
  4. Tetapkan tempoh pegangan pegangan

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa arah:

  1. Uji kesan parameter penapis yang berbeza terhadap keputusan untuk mencari parameter yang optimum
  2. Cuba untuk menyaring isyarat dagangan dengan penunjuk lain untuk meningkatkan kualiti isyarat
  3. Mengoptimumkan logik pembukaan kedudukan, meningkatkan kedudukan semasa trend meningkat
  4. Menetapkan strategi berhenti beradaptasi dan menyesuaikan titik berhenti mengikut turun naik pasaran
  5. Melakukan analisis urutan masa untuk menilai kesan masa dan kitaran dagangan terhadap keputusan

kesimpulannya

Secara keseluruhannya, strategi garis trend seketika Ells menggunakan petunjuk teknikal untuk mengenal pasti trend sebenar saham / niaga hadapan dan membuka kedudukan apabila trend berbalik. Ia mempunyai kelebihan seperti penapisan bunyi yang berkesan, penyesuaian parameter tinggi, logik penjanaan isyarat yang jelas dan kawalan risiko terbina dalam. Dengan lebih mengoptimumkan pilihan parameter isyarat, penapisan, skala kedudukan dan penyesuaian stop loss, strategi ini dapat mencapai prestasi yang lebih baik.

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