Mengekori strategi pengambilan untung berdasarkan dua trek panjang dan pendek


Tarikh penciptaan: 2024-01-15 14:56:03 Akhirnya diubah suai: 2024-01-15 14:56:03
Salin: 1 Bilangan klik: 626
1
fokus pada
1617
Pengikut

Mengekori strategi pengambilan untung berdasarkan dua trek panjang dan pendek

Myo_LS_D Kaedah Kuantiti

Gambaran keseluruhan

Strategi kuantitatif Myo_LS_D adalah strategi penghentian pengesanan berdasarkan dua jalur kosong. Strategi ini menggunakan pelbagai indikator untuk membina isyarat perdagangan, seperti garis purata, penembusan harga, dan nisbah pulangan risiko.

Prinsip Strategi

Strategi ini terdiri daripada modul penilaian trend, modul melakukan pelbagai, modul kosong, dan modul pengesanan berhenti.

  1. Modul penghakiman trend menggunakan saluran donchain untuk menentukan arah trend keseluruhan. Untuk melakukan lebih banyak masuk, anda perlu berada dalam trend menaik, dan untuk melakukan shorting, anda perlu berada dalam trend menurun.

  2. Modul berbilang mempertimbangkan faktor-faktor seperti tinggi baru, rendah, dan kedudukan rata-rata garis panjang. Modul kosong mempertimbangkan faktor-faktor seperti tinggi baru, rendah, dan kedudukan rata-rata garis pendek. Ini memastikan kedudukan apabila titik harga kritikal melangkaui ke atas atau ke bawah.

  3. Modul Tracking Stop-Stop menggunakan garis rata-rata SMA untuk dua tempoh yang berbeza untuk mengesan perubahan harga dalam masa nyata. Apabila harga jatuh di bawah garis rata-rata, anda boleh menghentikan posisi anda.

  4. Tetapan hentikan kerugian pertimbangkan untuk memperluas hentikan kerugian, memastikan titik hentikan kerugian jauh dari kedudukan sokongan, dan mengelakkan terguncang.

Analisis kelebihan

Kelebihan utama strategi ini adalah pembinaan gudang yang berasingan dengan banyak ruang, strategi penghentian penghentian. Secara khusus, ia terutama ditunjukkan oleh:

  1. Di samping itu, pemisahan ruang boleh memaksimumkan peluang keuntungan dari trend unilateral.

  2. Tracking Stop Stop dapat memperoleh kadar keuntungan yang lebih tinggi dengan penyesuaian masa nyata.

  3. Memperluas Hentian Kerosakan dapat mengurangkan kemungkinan terjatuh dan mengurangkan risiko kerugian.

Risiko dan penyelesaian

Risiko utama dalam strategi ini adalah tertumpu kepada:

  1. Kesalahan dalam penilaian trend boleh menyebabkan kerugian dalam penempatan berlawanan. Anda boleh menyesuaikan parameter donchain dengan betul atau menambah penilaian indikator lain untuk mengoptimumkannya.

  2. Tracking stop adalah terlalu radikal dan mungkin stop awal tidak dapat menghasilkan keuntungan yang berterusan. Anda boleh memperluaskan jarak stop rata-rata untuk mengoptimumkannya.

  3. Julat kemusnahan terlalu kecil dan mungkin meningkatkan kebarangkalian gempa. Anda boleh meluaskan kemusnahan dengan tepat untuk mengurangkan risiko.

Arah pengoptimuman

Strategi ini boleh terus dioptimumkan dengan cara berikut:

  1. Mengoptimumkan modul penghakiman trend, meningkatkan ketepatan penghakiman. Ia boleh dipertimbangkan untuk menggabungkan lebih banyak petunjuk seperti MACD dan sebagainya.

  2. Menyesuaikan cara mengesan penghentian untuk memperluaskan lagi ruang keuntungan. Contohnya, anda boleh memindahkan tali penghentian mengikut perkadaran.

  3. Memperluas jangkauan hentian atau pertimbangkan untuk menyekat hentian untuk mengurangkan kemungkinan terjatuh lebih jauh.

  4. Berbeza dengan parameter yang berbeza, anda boleh melatih untuk mendapatkan kombinasi parameter yang optimum.

ringkaskan

Strategi Myo_LS_D secara keseluruhan adalah strategi penghentian penghentian pengesanan yang lebih stabil dan stabil. Kelebihannya jelas, risikonya dapat dikawal, dan merupakan salah satu kaedah pengukuran yang bernilai digunakan untuk jangka panjang. Dengan pengoptimuman lanjut di masa depan, prestasi penghasilannya dapat ditingkatkan secara berterusan, menjadi strategi pengukuran yang lebih unggul.

Kod 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)