Strategi trailing profit taking berdasarkan jalur ganda panjang dan pendek


Tanggal Pembuatan: 2024-01-15 14:56:03 Akhirnya memodifikasi: 2024-01-15 14:56:03
menyalin: 1 Jumlah klik: 626
1
fokus pada
1617
Pengikut

Strategi trailing profit taking berdasarkan jalur ganda panjang dan pendek

Myo_LS_D kebijakan kuantitatif

Ringkasan

Strategi kuantitatif Myo_LS_D adalah strategi tracking stop stop yang didasarkan pada dua jalur kosong. Strategi ini secara komprehensif menggunakan beberapa indikator untuk membangun sinyal perdagangan, seperti garis rata-rata, harga, dan rasio pengembalian risiko. Dengan asumsi penilaian tren yang akurat, tingkat kemenangan dan keuntungan yang lebih tinggi dicapai.

Prinsip Strategi

Strategi ini terutama terdiri dari modul penilaian tren, modul multitasking, modul blanko, dan modul tracking stop.

  1. Modul penilaian tren menggunakan saluran donchain untuk menentukan arah tren secara keseluruhan. Untuk melakukan masukan lebih lanjut, Anda harus berada dalam tren naik, dan untuk melakukan shorting, Anda harus berada dalam tren turun.

  2. Membuat modul multi mempertimbangkan faktor-faktor seperti tinggi baru, rendah, dan posisi rata-rata garis panjang. Membuat modul kosong mempertimbangkan faktor-faktor seperti tinggi baru, rendah, dan posisi rata-rata garis pendek. Ini memastikan bahwa posisi dibuat ketika titik harga kritis terobosan ke atas atau ke bawah.

  3. Modul Tracking Stop-Stop menggunakan SMA rata-rata dua periode yang berbeda untuk melacak perubahan harga secara real-time. Stop-Stop posisi yang aman ketika harga turun di bawah rata-rata. Pelacakan real-time ini dapat memaksimalkan keuntungan dalam tren.

  4. Pengaturan stop loss mempertimbangkan untuk memperluas stop loss, memastikan titik stop loss jauh dari titik support, dan menghindari getaran.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah pemisahan gudang dan strategi penarikan. Secara khusus, strategi ini meliputi:

  1. Di sisi lain, pemisahan ruang dapat memaksimalkan peluang keuntungan dari tren unilateral.

  2. Pelacakan stop-loss dapat memperoleh tingkat keuntungan yang lebih tinggi melalui penyesuaian real-time. Hasilnya meningkat secara signifikan dibandingkan dengan metode stop-loss tradisional.

  3. Memperluas stop loss dapat mengurangi kemungkinan terjatuh dan mengurangi risiko kerugian.

Risiko dan Solusi

Risiko utama dari strategi ini berkonsentrasi pada:

  1. Kesalahan dalam penilaian tren dapat menyebabkan kerugian dalam posisi berlawanan. Anda dapat menyesuaikan parameter donchain atau menambahkan penilaian indikator lain untuk mengoptimalkan.

  2. Tracking stop terlalu radikal dan mungkin stop lebih awal tidak dapat menguntungkan secara berkelanjutan. Anda dapat memperluas jarak stop rata-rata stop untuk mengoptimalkannya.

  3. Stop loss terlalu kecil dan dapat meningkatkan kemungkinan terjadinya gempa. Stop loss dapat diperluas sesuai dengan risiko yang lebih rendah.

Arah optimasi

Strategi ini dapat terus dioptimalkan dalam beberapa hal:

  1. Mengoptimalkan modul penilaian tren, meningkatkan akurasi penilaian. Dapat dipertimbangkan untuk menggabungkan lebih banyak indikator seperti MACD dan lain-lain.

  2. Mengatur cara pelacakan stop, memperluas ruang keuntungan lebih lanjut. Misalnya, Anda dapat memindahkan stop line secara proporsional, dll.

  3. Perluasan jangkauan stop loss atau pertimbangkan untuk mempersempit stop loss untuk lebih mengurangi kemungkinan terjatuh.

  4. Berbagai varietas memiliki parameter yang berbeda, sehingga dapat dilatih untuk mendapatkan kombinasi parameter yang optimal.

Meringkaskan

Strategi Myo_LS_D secara keseluruhan adalah strategi penghentian tracking multi-air yang stabil dan lebih matang. Keuntungannya jelas, risikonya dapat dikendalikan, dan merupakan salah satu skema kuantitatif yang layak digunakan dalam jangka panjang. Dengan pengoptimalan lebih lanjut di masa depan, kinerja penghasilannya dapat terus meningkat, menjadi strategi kuantitatif yang lebih unggul.

Kode Sumber Strategi
/*backtest
start: 2023-12-15 00:00:00
end: 2024-01-14 00:00:00
period: 4h
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/
// © agresiynin

//@version=5
// ©Myo_Pionex
strategy(
 title                  =   "Myo_simple strategy_LS_D",
 shorttitle             =   "Myo_LS_D",
 overlay                =   true )


// var
lowest_price = ta.lowest(low, 200)
highest_price = ta.highest(high, 200)
min_800 = ta.lowest(low, 800)
max_800 = ta.highest(high, 800)
tp_target_L = min_800 + (max_800 - min_800) * math.rphi
tp_target_S = max_800 - (max_800 - min_800) * math.rphi
sl_length_L = input.int(100, "做多的止損長度", minval = 50, maxval = 300, step = 50)
sl_length_S = input.int(100, "做空的止損長度", minval = 50, maxval = 300, step = 50)
sl_L = lowest_price * (1 - 0.005)
sl_S = highest_price * (1 + 0.005)
rrr_L = tp_target_L - sl_L / sl_L
rrr_S = ta.lowest(low, 800) + ta.highest(high, 800) - ta.lowest(low, 800) * math.rphi / ta.highest(high, 200) + 0.005 * ta.highest(high, 200) - ta.lowest(low, 200) - 0.005 * ta.lowest(low, 200)
smalen1 = input.int(10, "做多追蹤止盈SMA長度1", options = [5, 10, 20, 40, 60, 80])
smalen2 = input.int(20, "做多追蹤止盈SMA長度2", options = [5, 10, 20, 40, 60, 80])
smalen1_S = input.int(5, "做空追蹤止盈SMA長度1", options = [5, 10, 20, 40, 60, 80])
smalen2_S = input.int(10, "做空追蹤止盈SMA長度2", options = [5, 10, 20, 40, 60, 80])
TrendLength_L = input.int(400, "做多趨勢線", options = [100, 200, 300, 400, 500])
TrendLength_S = input.int(300, "做空趨勢線", options = [100, 200, 300, 400, 500])
SMA1 = ta.sma(close, smalen1)
SMA2 = ta.sma(close, smalen2)
SMA1_S = ta.sma(close, smalen1_S)
SMA2_S = ta.sma(close, smalen2_S)
shortlength = input.int(20, "短期均價K線數量")
midlength = input.int(60, "中期均價K線數量")
longlength = input.int(120, "長期均價K線數量")
ShortAvg = math.sum(close, shortlength)/shortlength
MidAvg = math.sum(close, midlength)/midlength
LongAvg = math.sum(close, longlength)/longlength

// Trend
basePeriods = input.int(8, minval=1, title="趨勢基準線")
basePeriods_Short = input.int(26, "做空基準線")
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
baseLine = donchian(basePeriods)
baseLine_Short = donchian(basePeriods_Short)
trend = request.security(syminfo.tickerid, "D", baseLine)
isUptrend = false
isDowntrend = false
baseLine_D = request.security(syminfo.tickerid, "D", baseLine)
plot(baseLine_D, color=#B71C1C, title="趨勢基準線")
if close[0] > baseLine_D
    isUptrend := true
if close[0] < baseLine_Short
    isDowntrend := true
// Long
// Condition
// entry
con_a = low > lowest_price ? 1 : 0
con_b = high > highest_price ? 1 : 0
con_c = close[0] > ta.sma(close, TrendLength_L) ? 1 : 0
con_d = isUptrend ? 1 : 0
con_e = rrr_L > 3 ? 1 : 0
con_a1 = close[0] > ShortAvg[shortlength] ? 1 : 0
con_b1 = close[0] > MidAvg[midlength] ? 1 : 0

// close
con_f = ta.crossunder(close, SMA1) and ta.crossunder(close, SMA2) ? 1 : 0
con_g = close < ta.lowest(low, sl_length_L)[1] * (1 - 0.005) ? 1 : 0

// exit
con_h = tp_target_L

// Main calculation
LongOpen = false
AddPosition_L = false

if con_a + con_b + con_c + con_e + con_a1 + con_b1 >= 4 and con_d >= 1
    LongOpen := true
// Short
// Condition
// entry
con_1 = high < highest_price ? 1 : 0
con_2 = low < lowest_price ? 1 : 0
con_3 = close[0] < ta.sma(close, TrendLength_S) ? 1 : 0
con_4 = isDowntrend ? 1 : 0
con_5 = rrr_S > 3 ? 1 : 0
con_11 = close[0] < ShortAvg[shortlength] ? 1 : 0
con_12 = close[0] < MidAvg[midlength] ? 1 : 0

// close
con_6 = ta.crossover(close, SMA1_S) and ta.crossover(close, SMA2_S) ? 1 : 0
con_7 = close > ta.highest(high, sl_length_S)[1] * (1 + 0.005) ? 1 : 0

// exit
con_8 = tp_target_S

// Main calculation
ShortOpen = false
AddPosition_S = false

if con_1 + con_2 + con_3 + con_4 + con_5 + con_11 + con_12 >= 5
    ShortOpen := true

//
// execute
//
strategy.initial_capital = 50000
if strategy.position_size == 0
    if LongOpen
        strategy.entry("Long Open" , strategy.long , comment= "Long Open " + str.tostring(close[0]), qty=strategy.initial_capital/close[0])

if strategy.position_size > 0
    if (con_f > 0 or con_g > 0 or ShortOpen) and close <= baseLine_D
        strategy.close_all(comment="Close Long " + str.tostring(close[0]))

if strategy.position_size == 0
    if ShortOpen
        strategy.entry("Short Open" , strategy.short , comment= "Short Open " + str.tostring(close[0]), qty=strategy.initial_capital/close[0])

if strategy.position_size < 0
    if (con_6 > 0 or con_7 > 0 or LongOpen) and close >= baseLine_D
        strategy.close_all(comment="Close Short " + str.tostring(close[0]))


plot(ta.sma(close, TrendLength_L), color=#e5c212, title="LTradeTrend")
plot(ta.sma(close, TrendLength_S), color=#1275e5, title="STradeTrend")
plot(SMA1, "SMA1", color = color.lime, linewidth = 2)
plot(SMA2, "SMA2", color = color.rgb(255, 0, 255), linewidth = 2)