Strategi henti rugi dinamik berdasarkan ATR


Tarikh penciptaan: 2023-10-10 10:50:21 Akhirnya diubah suai: 2023-10-10 10:50:21
Salin: 4 Bilangan klik: 936
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini menggunakan penunjuk ATR untuk menetapkan titik hentian dinamik, menyesuaikan kedudukan hentian mengikut keluasan turun naik harga, untuk mencapai kawalan risiko. Strategi ini terutamanya melalui 5 hari EMA dan 20 hari EMA membentuk garpu emas untuk membuat beberapa masuk, dan kemudian menggunakan penunjuk ATR untuk menetapkan kedudukan hentian dan kedudukan hentian. Kedudukan hentian akan disesuaikan dengan turun naik harga, sehingga dapat mengunci lebih banyak keuntungan.

Prinsip Strategi

Strategi ini mula-mula menilai 5 hari EMA di atas EMA 20 hari untuk membuat lebih banyak masuk. Selepas masuk, menggunakan indikator ATR untuk mengira perkalian ATR jarak harga masuk dari harga semasa, dan menetapkan posisi stop loss 1.5 ATR di bawah harga masuk. Kemudian, apabila harga naik, angkat kedudukan stop loss secara beransur-ansur, dan jika harga naik melebihi harga masuk 3 ATR, maka berhentilah.

Secara khusus, strategi ini akan mentakrifkan pembolehubah berikut:

  • entry_price: harga kemasukan
  • stop_price: harga berhenti
  • take_profit_price: harga berhenti
  • atr_down: Baris ATR bawah
  • atr_up: barisan ATR atas
  • atr_current: barisan ATR semasa
  • atr_ref: Nilai ATR

Selepas masuk, ia akan mengira at_ref sebagai nilai ATR semasa, at_div sebagai ATR kali ganda dari harga masuk ke harga semasa. Ia kemudian menetapkan at_down, at_current, dan at_up berdasarkan kedudukan at_div.

Apabila harga naik, dengan membandingkan harga semasa avg danatr_up, jika avg dikenakanatr_up, maka tempat yang sesuai untukatr_div danatr akan dikira semula, yang akan meningkatkan garis hentian secara beransur-ansur, meningkatkan keuntungan memegang kedudukan.

Jika harga melebihi harga masuk 3ATR, maka akan dipadamkan sebahagian daripada kedudukan untuk mengunci keuntungan, ketika ini tanda tookProfit ditetapkan sebagai true. Jika harga terus meningkat, maka akan terus menaikkan kedudukan berhenti.

Kelebihan Strategik

  1. Dengan menggunakan penunjuk ATR untuk menyesuaikan kedudukan hentian secara dinamik, anda boleh menetapkan jarak hentian yang munasabah mengikut tahap turun naik pasaran.

  2. Dalam kes kerugian yang terhad, ikuti trend untuk memotong keuntungan. Garis berhenti akan meningkat secara beransur-ansur, membiarkan keuntungan terus bertambah.

  3. Mekanisme penutupan separa boleh mengunci sebahagian daripada keuntungan, mengurangkan risiko. Kemudian kedudukan berhenti terus meningkat, supaya keuntungan terus berjalan.

Risiko Strategik

  1. Indeks ATR tidak sensitif terhadap penembusan yang tidak normal dan tidak dapat menangani risiko yang disebabkan oleh jurang.

  2. Indeks EMA tidak dapat menilai trend berbalik, dan mungkin memasuki kedudukan baru apabila trend berbalik.

  3. Kemungkinan besar kerugian akan berbalik selepas penangguhan separa.

  4. Parameter tidak dioptimumkan, 1.5 ATR Stop dan 3 ATR Stop perlu disesuaikan mengikut jenis yang berbeza.

Pengoptimuman Strategi

  1. Ia boleh dipertimbangkan untuk memasukkan penunjuk stop-loss lain, seperti saluran Donchian, dan sebagainya, untuk mengelakkan kelewatan dalam penunjuk ATR.

  2. Anda boleh menguji pelbagai indikator rata-rata, atau masukkan MACD dan lain-lain untuk menilai pembalikan trend.

  3. Perkadaran dan bilangan penghentian sebahagian boleh dioptimumkan, dan pelbagai jenis boleh mempunyai tetapan yang berbeza.

  4. Menambah parameter pengoptimuman, menguji kesan hentian hentian pelbagai ATR. Menambah fungsi hentian hentian langkah.

  5. Uji prestasi semasa trend lemah, pertimbangkan untuk menggunakan strategi ini hanya apabila trend kuat.

ringkaskan

Strategi ini adalah strategi yang jelas dan mudah difahami, menggunakan penyesuaian stop loss secara dinamik untuk mengawal risiko perdagangan. Tetapi penunjuk ATR sendiri mempunyai ketidakselesaan, dan parameter perlu dioptimumkan. Menambah penunjuk penyesuaian dan penentuan trend lain akan menjadi arah penambahbaikan. Di samping itu, beberapa mekanisme penangguhan juga perlu diuji secara optimum mengikut pelbagai jenis.

Kod sumber strategi
/*backtest
start: 2022-10-03 00:00:00
end: 2023-10-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ekinbasarkomur

//@version=5
strategy("[EKIN] ATR Exit Strategy", overlay=true, initial_capital = 1000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, calc_on_every_tick = true)

// Simple EMA tracking
fastEMA = ta.ema(close, 5)
slowEMA = ta.ema (close, 20)
atr = ta.atr(14)

// We define entry price for future reference
var float entry_price = na
// We define stop and take profit for future calculations
var float stop_price = na
var float take_profit_price = na

// We define atr limtim its here
var float atr_down = na
var float atr_up = na
var float atr_current = na
var float atr_ref = na

avg = (low + high) / 2

// Conditions
enterCondition = ta.crossover(fastEMA, slowEMA)
var bool tookProfit = false
timePeriod = time >= timestamp(syminfo.timezone, 2021, 12, 15, 0, 0)
InTrade = strategy.position_size > 0

// Go long if conditions are met
if (enterCondition and timePeriod and not InTrade)
    // Calculate and update variables
    entry_price := avg
    atr_ref := atr
    atr_div = int((avg - entry_price) / atr_ref)
    atr_down := entry_price + (atr_ref * (atr_div - 1.5))
    atr_up := entry_price + (atr_ref * (atr_div + 1))
    atr_current := entry_price + (atr_ref * atr_div) 
    stop_price := (entry_price - (atr_ref * 1.5))
    take_profit_price := (entry_price + (atr_ref * 3))
    strategy.order("buy", strategy.long, qty = 2)

// Enter here if in position
if InTrade or tookProfit
    stopCondition = avg < stop_price
    takeProfitCondition = avg > take_profit_price

    if avg < atr_down
        stopCondition := true

    // Move stop price and exit price if price for each atr price increase
    if avg > atr_up
        if tookProfit
            atr_ref := atr
        atr_div = int((avg - entry_price) / atr_ref)
        atr_down := entry_price + (atr_ref * (atr_div - 1))
        atr_up := entry_price + (atr_ref * (atr_div + 1))
        atr_current := entry_price + (atr_ref * atr_div) 

    // Take half of the investment if current price is 3 atr higher than entry price
    if (takeProfitCondition and timePeriod and InTrade and not tookProfit)
        strategy.order("take_half_profit", strategy.short, qty = 1)
        tookProfit := true

    // Exit position if conditions are met and reset the variables
    if (stopCondition and timePeriod and InTrade)
        if tookProfit
            strategy.order("exit", strategy.short, qty = 1)
        else
            strategy.order("stop_loss", strategy.short, qty = 2)

        tookProfit := false

// Plot EMA's
plot(fastEMA, color = color.blue)
plot(slowEMA, color = color.yellow)

// Plot ATR Limit/Stop positions
profit_plot = plot(series = InTrade?atr_up:na, title = "profit", color = color.green, style=plot.style_linebr)
close_plot = plot(series = InTrade?atr_current:na, title = "close", color = color.white, style=plot.style_linebr)
stop_plot = plot(series = InTrade?atr_down:na, title = "stop_loss", color = color.red, style=plot.style_linebr)
fill(profit_plot, close_plot, color = color.new(color.green, 80))
fill(close_plot, stop_plot, color =color.new(color.red,80))