Trend Mengikuti Strategi dengan Stop Loss Trailing

Penulis:ChaoZhang, Tarikh: 2023-10-30 15:21:54
Tag:

img

Ringkasan

Strategi ini menggabungkan trend berikut dengan kehilangan berhenti dan mengambil logik keuntungan untuk terus menunggang trend untuk keuntungan. Ia menggunakan purata bergerak untuk menentukan arah trend dan menghasilkan isyarat perdagangan apabila harga memecahkan garis MA. Selepas memasuki kedudukan panjang, strategi menetapkan stop loss berdasarkan nilai ATR dan menyesuaikannya dengan logik kehilangan berhenti untuk mengikuti trend. Apabila harga naik ke tahap tertentu, ia mengambil keuntungan separa untuk mengunci beberapa keuntungan.

Logika Strategi

  1. Set backtest permulaan dan berhenti timestamp berdasarkan input pengguna.

  2. Memulakan harga henti panjang dan pendek, dan peratusan yang tertinggal.

  3. Masuk dalam jangka panjang apabila harga melanggar di atas garis MA.

  4. Mengira jarak stop loss dengan ATR dan menetapkan harga stop loss.

  5. Apabila harga terus meningkat, jejak berhenti kerugian ke atas untuk mengunci lebih banyak keuntungan.

  6. Apabila harga mencapai ambang keuntungan, ambil keuntungan separa.

  7. Masuk pendek apabila harga pecah di bawah garis MA.

  8. Mengira jarak stop loss dengan ATR dan menetapkan harga stop loss.

  9. Apabila harga terus jatuh, jejak berhenti kerugian ke bawah untuk mengunci lebih banyak keuntungan.

  10. Apabila harga mencapai ambang keuntungan, ambil keuntungan separa.

Kelebihan

  • Penghentian kerugian boleh mengikuti trend dan menangkap lebih banyak keuntungan sambil melindungi keuntungan.

  • Hentian kerugian ATR dinamik bertindak balas dengan lebih baik terhadap perubahan pasaran daripada hentian kerugian tetap.

  • Keuntungan mengambil sebahagian membantu mengunci beberapa keuntungan dan mengurangkan risiko penarikan.

  • Logik yang mudah dan jelas, mudah difahami dan dilaksanakan.

Risiko

  • Pembalikan trend tiba-tiba boleh mencetuskan kerugian besar dengan jarak stop loss yang luas.

  • Stop loss berdasarkan ATR mungkin terlalu sensitif dan dihentikan lebih awal.

  • Nisbah mengambil keuntungan separa yang tidak betul boleh terlepas trend atau meningkatkan kerugian.

  • Banyak parameter perlu dioptimumkan, seperti tempoh ATR, peratusan yang tertinggal, nisbah mengambil keuntungan.

  • Strategi hanya bergantung pada MA dan ATR, isyarat yang salah mungkin berlaku.

Pengoptimuman

  • Tambah penunjuk lain seperti MACD, KD untuk menapis isyarat perdagangan dan mengelakkan isyarat MA yang salah.

  • Pertimbangkan nisbah keuntungan dinamik berdasarkan kekuatan trend.

  • Uji tempoh ATR yang berbeza untuk kestabilan optimum.

  • Memperkenalkan pembelajaran mesin untuk mengoptimumkan parameter secara automatik dan menyesuaikan mereka secara dinamik.

  • Gunakan model pembelajaran mendalam untuk mengesan trend dan menjana isyarat secara automatik.

Ringkasan

Strategi ini mengintegrasikan stop loss, stop loss ATR dinamik dan mengambil keuntungan separa untuk mengikuti trend dan mengawal penarikan. Tetapi ia mempunyai beberapa batasan seperti pengesanan trend yang mudah dan pengoptimuman parameter yang sukar. Ini memberikan arah yang baik untuk meningkatkan lagi strategi dengan menggunakan lebih banyak teknik dan penunjuk untuk meningkatkan kestabilan dan keuntungan. Secara keseluruhan ia memberikan rujukan yang baik mengenai reka bentuk mekanisme stop loss dan mengambil keuntungan untuk perdagangan langsung.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
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/
// © felipefs

//@version=4
strategy("Meu Script", overlay=true)
plot(ohlc4)

//Funçao de Datas
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(6, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false

//Funções de Trailing Stop
long_stop_price = 0.0
short_stop_price = 0.0
long_trail_perc = 0
short_trail_perc = 0

long_stop_price := if (strategy.position_size > 0)
    stopValue = close * (1 - long_trail_perc)
    max(stopValue, long_stop_price[1])
else
    0

short_stop_price := if (strategy.position_size < 0)
    stopValue = close * (1 + short_trail_perc)
    min(stopValue, short_stop_price[1])
else
    999999

//Função de Debug
debug(value) =>
    x = bar_index
    y = close
    label.new(x, y, tostring(value))
    
//Take Profit
profit = close * (1 + 0.12)
strategy.entry("Long", true)
strategy.exit("Take Profit 1 Long", from_entry="Long", limit=profit, qty_percent=50.0)
 
//ATR Stop
 
// xATRTrailingStopLong = 0.0
// xATR = atr(nATRPeriod)
// nLossLong = nATRMultipLong * xATR

// if (strategy.position_size > 0)
//     xATRTrailingStopLong := max(nz(xATRTrailingStopLong[1]), close - nLossLong)

Lebih lanjut