Tren Mengikuti Strategi dengan Trailing Stop Loss

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

img

Gambaran umum

Strategi ini menggabungkan trend berikut dengan trailing stop loss dan mengambil logika keuntungan untuk terus naik tren untuk keuntungan. Ini menggunakan moving average untuk menentukan arah tren dan menghasilkan sinyal perdagangan ketika harga menembus garis MA. Setelah memasuki posisi panjang, strategi menetapkan stop loss berdasarkan nilai ATR dan menyesuaikannya dengan trailing stop loss logic untuk mengikuti tren. Ketika harga naik ke tingkat tertentu, dibutuhkan keuntungan parsial untuk mengunci beberapa keuntungan.

Logika Strategi

  1. Set backtest start dan stop timestamp berdasarkan input pengguna.

  2. Inisialisasi harga stop panjang dan pendek, dan persentase trailing.

  3. Masuk long ketika harga menembus garis MA.

  4. Hitung jarak stop loss dengan ATR dan atur harga stop loss.

  5. Karena harga terus naik, jejak stop loss ke atas untuk mengunci lebih banyak keuntungan.

  6. Ketika harga mencapai ambang keuntungan, ambil sebagian keuntungan.

  7. Masuk short ketika harga pecah di bawah garis MA.

  8. Hitung jarak stop loss dengan ATR dan atur harga stop loss.

  9. Karena harga terus turun, jejak stop loss ke bawah untuk mengunci lebih banyak keuntungan.

  10. Ketika harga mencapai ambang keuntungan, ambil sebagian keuntungan.

Keuntungan

  • Stop loss dapat mengikuti tren dan menangkap lebih banyak keuntungan sambil melindungi keuntungan.

  • Stop loss ATR dinamis bereaksi lebih baik terhadap perubahan pasar daripada stop loss tetap.

  • Bagian mengambil keuntungan membantu mengunci beberapa keuntungan dan mengurangi risiko penarikan.

  • Logika yang sederhana dan jelas, mudah dipahami dan diterapkan.

Risiko

  • Pembalikan tren tiba-tiba dapat memicu kerugian besar dengan jarak stop loss yang luas.

  • Stop loss berdasarkan ATR mungkin terlalu sensitif dan berhenti terlalu dini.

  • Rasio mengambil keuntungan parsial yang tidak tepat dapat mengabaikan tren atau meningkatkan kerugian.

  • Banyak parameter perlu dioptimalkan, seperti periode ATR, persentase trailing, rasio mengambil keuntungan.

  • Strategi hanya bergantung pada MA dan ATR, sinyal yang salah mungkin terjadi.

Optimalisasi

  • Tambahkan indikator lain seperti MACD, KD untuk menyaring sinyal perdagangan dan menghindari sinyal MA yang salah.

  • Pertimbangkan rasio keuntungan dinamis berdasarkan kekuatan tren.

  • Uji periode ATR yang berbeda untuk stabilitas yang optimal atau gunakan indikator lain untuk stop loss.

  • Memperkenalkan pembelajaran mesin untuk mengoptimalkan parameter secara otomatis dan menyesuaikan mereka secara dinamis.

  • Gunakan model pembelajaran mendalam untuk mendeteksi tren dan menghasilkan sinyal secara otomatis.

Ringkasan

Strategi ini mengintegrasikan trailing stop loss, dynamic ATR stop loss dan partial take profit untuk mengikuti tren dan mengontrol drawdown. Namun, strategi ini memiliki beberapa keterbatasan seperti deteksi tren sederhana dan pengoptimalan parameter yang sulit. Ini memberikan arah yang baik untuk meningkatkan strategi dengan menggunakan lebih banyak teknik dan indikator untuk meningkatkan stabilitas dan profitabilitas. Secara keseluruhan, strategi ini memberikan referensi yang baik untuk merancang mekanisme stop loss dan take profit 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 banyak