Myo_LS_D Strategi Kuantitatif

Penulis:ChaoZhang, Tarikh: 2024-01-15 14:56:03
Tag:

img

Ringkasan

Strategi kuantitatif Myo_LS_D adalah strategi stop-profit pengesanan dua jalur berdasarkan kedudukan panjang dan pendek. Strategi ini menggabungkan pelbagai penunjuk seperti purata bergerak, kejayaan harga, dan nisbah risiko-mengembalikan untuk membina isyarat perdagangan. Ia mencapai kadar kemenangan dan kadar keuntungan yang tinggi berdasarkan penilaian trend yang tepat.

Prinsip

Strategi ini terdiri terutamanya daripada modul penilaian trend, modul kedudukan panjang, modul kedudukan pendek, modul penjejakan stop profit, dan lain-lain.

  1. Modul penghakiman trend menggunakan saluran Donchain untuk menentukan arah trend keseluruhan. prasyarat untuk pergi panjang adalah trend menaik, sementara pergi pendek memerlukan trend menurun.

  2. Modul kedudukan panjang mengambil kira faktor-faktor seperti paras tertinggi baru, paras terendah, kedudukan purata bergerak panjang, dan lain-lain. Modul kedudukan pendek mengambil kira paras tertinggi baru, paras terendah, kedudukan purata bergerak pendek dan faktor-faktor lain. Ini memastikan pembukaan kedudukan apabila memecahkan titik harga kritikal ke atas atau ke bawah.

  3. Modul berhenti keuntungan penjejakan menggunakan dua purata bergerak SMA dari kitaran yang berbeza untuk mengesan perubahan harga dalam masa nyata. Apabila harga memecahkan garis purata bergerak, kedudukan ditutup untuk keuntungan. Pengesanan masa nyata jenis ini boleh memaksimumkan keuntungan dari trend.

  4. Tetapan stop loss mengambil kira stop loss yang diperbesar untuk menjaga titik stop loss jauh dari tahap sokongan untuk mengelakkan tersingkir.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah pembinaan kedudukan panjang dan pendek yang berasingan dan memantau strategi berhenti keuntungan.

  1. Posisi panjang dan pendek yang berasingan boleh memaksimumkan peluang keuntungan dengan menangkap peluang perdagangan trend satu sisi.

  2. Mengesan keuntungan berhenti boleh mendapatkan margin keuntungan yang lebih tinggi melalui penyesuaian masa nyata.

  3. Perhentian yang diperbesar dapat mengurangkan kebarangkalian tersingkir dan mengurangkan risiko kerugian.

Risiko dan Penyelesaian

Risiko utama strategi ini tertumpu pada perkara berikut:

  1. Penghakiman trend yang salah boleh mengakibatkan kedudukan dan kerugian yang bertentangan. Pengoptimuman boleh dicapai dengan menyesuaikan parameter Donchain dengan sewajarnya atau menambah penunjuk lain untuk penghakiman.

  2. Pengesanan keuntungan berhenti terlalu agresif dan boleh menghentikan keuntungan lebih awal tanpa dapat mengekalkan keuntungan. Pengoptimuman dapat dicapai dengan meningkatkan jarak antara purata bergerak keuntungan berhenti dengan tepat.

  3. Julat stop loss terlalu kecil, yang boleh meningkatkan kebarangkalian tersingkir.

Arahan pengoptimuman

Arah pengoptimuman utama untuk strategi ini adalah:

  1. Mengoptimumkan modul penilaian trend untuk meningkatkan ketepatan penilaian. Pertimbangkan untuk menggabungkan lebih banyak penunjuk seperti MACD.

  2. Sesuaikan kaedah penjejakan stop profit untuk memperluaskan ruang keuntungan.

  3. Memperluaskan julat stop loss atau mempertimbangkan berhenti penyusutan boleh mengurangkan lagi kebarangkalian tersingkir.

  4. Varieti yang berbeza mempunyai parameter yang berbeza. Kombinasi parameter yang optimum boleh diperoleh melalui latihan untuk meningkatkan kembali strategi.

Ringkasan

Secara amnya, strategi Myo_LS_D adalah strategi kuantitatif berhenti keuntungan yang agak matang dan stabil. Ia mempunyai kelebihan yang jelas dan risiko yang boleh dikawal. Ia adalah salah satu penyelesaian kuantitatif yang patut dipegang untuk jangka panjang. Pengoptimuman masa depan dapat membolehkan peningkatan prestasi yang berterusan untuk menjadikannya strategi kuantitatif yang lebih unggul.


/*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)

Lebih lanjut