Strategi panjang dan pendek silang silang SMA digabungkan dengan kawalan anjakan puncak dan penamatan automatik

SMA
Tarikh penciptaan: 2024-07-29 14:16:58 Akhirnya diubah suai: 2024-07-29 14:16:58
Salin: 0 Bilangan klik: 555
1
fokus pada
1617
Pengikut

Strategi panjang dan pendek silang silang SMA digabungkan dengan kawalan anjakan puncak dan penamatan automatik

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan multi-rajah yang menggabungkan isyarat simpul bergerak (SMA) dan kawalan penarikan balik puncak. Ia menggunakan penarikan 14 dan 28 SMA untuk menghasilkan isyarat perdagangan multi-rajah, sambil memantau penarikan balik puncak strategi dalam masa nyata.

Prinsip Strategi

  1. Sinyal dagangan dihasilkan:

    • Apabila 14 SMA diletakkan di atas 28 SMA, ia menghasilkan isyarat ganda.
    • Apabila 14 SMA menembusi 28 SMA, ia menghasilkan isyarat shorting.
  2. Pengendalian penarikan balik puncak:

    • Menjejaki kurva kepentingan dan hak strategi dalam masa nyata, merakamkan paras tertinggi dalam sejarah (puncak).
    • Apabila kepentingan semasa berada di bawah puncak, masuk ke dalam keadaan penarikan diri, rekod titik terendah ((bottom of the valley)).
    • Hitung peratusan pengunduran = (puncak - dasar lembah) / puncak * 100%。
    • Jika peratusan penarikan balik melebihi had penarikan balik maksimum yang ditetapkan, strategi berhenti membuka kedudukan baru.
  3. Analisis Siklus Puncak-Hutan:

    • Tetapkan peratusan pengembalian minimum untuk menentukan tempoh puncak-bumi yang berkesan.
    • Setiap kali anda menyelesaikan satu kitaran yang sah, catat nombor kitaran, kenaikan sebelumnya, penurunan, dan masa berakhirnya.
    • Hasil analisis akan dipaparkan dalam bentuk jadual untuk memudahkan peniaga melihat prestasi sejarah strategi.

Kelebihan Strategik

  1. Menggabungkan trend dan kawalan risiko: Strategi silang SMA adalah kaedah klasik untuk mengikuti trend, manakala kawalan penarikan balik puncak menyediakan lapisan pengurusan risiko tambahan. Gabungan ini dapat menangkap trend pasaran dan mengawal risiko penurunan dengan berkesan.

  2. Ketabahan: Dengan menetapkan parameter maksimum dan minimum penarikan balik, strategi boleh disesuaikan secara fleksibel mengikut keadaan pasaran yang berbeza dan keutamaan risiko peribadi.

  3. Penunjuk risiko yang telus: Analisis kitaran puncak-lembah memberikan maklumat penarikan balik sejarah yang terperinci, yang membolehkan peniaga memahami secara intuitif ciri-ciri risiko strategi, yang dapat membantu membuat keputusan perdagangan yang lebih bijak.

  4. Pengendalian risiko automatik: Apabila penarikan balik melebihi nilai terhad yang ditetapkan, strategi menghentikan perdagangan secara automatik, mekanisme yang berkesan untuk mencegah kerugian berterusan dalam keadaan pasaran yang tidak menguntungkan.

  5. Analisis prestasi menyeluruh: Di samping indikator pengulangan biasa, strategi juga menyediakan data kitaran puncak-bumi yang terperinci, termasuk maklumat mengenai kenaikan, penurunan dan masa, yang membantu menganalisis prestasi strategi secara mendalam.

Risiko Strategik

  1. Terlalu bergantung pada data sejarah: Strategi silang SMA adalah berdasarkan data harga sejarah dan mungkin bertindak balas lambat dalam pasaran yang berubah dengan cepat, menyebabkan isyarat yang salah.

  2. Perdagangan yang kerap: Dalam pasaran yang bergolak, SMA mungkin sering bercampur, menyebabkan terlalu banyak transaksi dan kos transaksi yang tinggi.

  3. Potensi pengunduran diri yang besar: Walaupun terdapat kawalan penarikan balik maksimum, satu kejatuhan besar boleh menyebabkan kerugian yang lebih besar apabila pasaran bergolak.

  4. Sensitiviti parameter: Prestasi strategi sangat bergantung kepada kitaran SMA dan pilihan nilai had penarikan balik, dan parameter yang tidak betul boleh menyebabkan keputusan suboptimal.

  5. Meninggalkan peluang untuk berubah: Strategi ini mungkin terlepas peluang untuk membalikkan pasaran apabila ia mencapai nilai tolak balik maksimum dan berhenti berdagang.

Arah pengoptimuman strategi

  1. Memperkenalkan penyesuaian parameter dinamik: Anda boleh mempertimbangkan untuk menyesuaikan kitaran SMA dan nilai penarikan balik untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.

  2. Menambah penapis pasaran tambahan: Gabungan dengan petunjuk teknikal lain atau faktor asas, seperti RSI atau jumlah transaksi, untuk menyaring isyarat palsu yang berpotensi.

  3. Untuk mencapai kemasukan dan keluar secara berperingkat: Daripada beroperasi secara penuh, anda boleh membina dan menyimpan dalam kumpulan untuk mengurangkan risiko keputusan tunggal.

  4. Bergabung dengan mekanisme penangguhan: Pada asas kawalan penarikan balik, tambah fungsi hentian dinamik untuk mengunci keuntungan dan meningkatkan kadar pulangan keseluruhan.

  5. Mengoptimumkan pengurusan wang: Menerapkan pengurusan kedudukan dinamik berdasarkan saiz akaun dan turun naik pasaran untuk mengawal risiko dengan lebih baik.

  6. Kenali algoritma pembelajaran mesin: Menggunakan teknologi pembelajaran mesin untuk mengoptimumkan pilihan parameter dan proses penjanaan isyarat, meningkatkan kebolehpasaran dan ketepatan strategi.

ringkaskan

Strategi SMA cross multiplexing yang menggabungkan kawalan penarikan balik puncak dengan pengakhiran automatik adalah sistem perdagangan kuantitatif yang menggabungkan trend tracking dan pengurusan risiko. Ia menangkap trend pasaran melalui persilangan purata bergerak yang mudah, sambil menggunakan kawalan penarikan balik puncak untuk menguruskan risiko penurunan.

Walaupun terdapat beberapa risiko yang wujud dalam strategi, seperti ketergantungan berlebihan pada data sejarah dan sensitiviti parameter, ia dapat meningkatkan kestabilan dan keuntungan dengan pengoptimuman dan penambahbaikan yang sesuai, seperti memperkenalkan penyesuaian parameter dinamik, menambahkan penapis pasaran tambahan dan mewujudkan pengurusan dana yang lebih bijak.

Secara keseluruhannya, strategi ini memberikan permulaan yang baik kepada peniaga, di mana ia boleh disesuaikan dan dioptimumkan lebih lanjut untuk memenuhi matlamat perdagangan dan keutamaan risiko individu. Reka bentuk modular strategi ini juga memudahkan integrasi dengan strategi perdagangan lain atau teknologi pengurusan risiko, meletakkan asas untuk membina sistem perdagangan yang lebih kompleks dan menyeluruh.

Kod sumber strategi
/*backtest
start: 2023-07-23 00:00:00
end: 2024-07-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

capital = 10000

//@version=5
strategy(title = "Correct Strategy Peak-Drawdown Cycles [Tradingwhale]", shorttitle = "Peak-Draw [Tradingwhale]", initial_capital = capital, overlay=true, margin_long=100, margin_short=100)

// The code below is from Tradingwhale LLC
/// ==============================================================================
//  Peak-Trough Cycles with Date and Prev. RunUp
// Initialize variables
showTable = input.bool(true, title = "Plot Peak to Bottom Drawdown Cycles table?")
min_trough = input.float(3.0, title = "Define Minimum Drawdown/Trough to Display (%)", minval = 1, maxval = 100, step = 0.5, tooltip = "Peaks and Trough Cycles have to be roped in by either a lookback period or minmimum troughs to show. If you don't then every bar could be a peak or trough/bottom. I've decided to use minimum declines here because lookback seems more arbitrary.")
maxdraw = input.float(40.0, title = "Max Drawdown", minval = 1, maxval = 100, step = 0.5, tooltip = "Define the drawdown level where the srtategy stops executing trades.")

var float equityPeak = na
var float equityTrough = na
var int cycleCount = 0
var bool inDrawdown = false
var float initialCapital = capital
var float prevTrough = initialCapital
var float prevRunUp = na
var bool useLighterGray = true
var int lastYear = na

// Variable to indicate whether the strategy should end
var bool end_strategy = false

// Table to display data
var table resultTable = table.new(position.top_right, 5, 30, bgcolor=#ffffff00, frame_color=#4f4040, frame_width=1)

// Function to convert float to percentage string
f_to_percent(value) =>
    str.tostring(value, "#.##") + "%"

// Function to get month/year string without commas
get_month_year_string() =>
    str.tostring(year) + "/" + str.tostring(month)

// Update the table headers
if (bar_index == 0 and showTable)
    table.cell(resultTable, 0, 0, "Show Min Trough: " + f_to_percent(min_trough), bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 1, 0, "Cycle Count", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 2, 0, "Prev.RunUp(%)", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 3, 0, "Drawdown(%)", bgcolor=#a8a8a88f, text_size=size.normal)
    table.cell(resultTable, 4, 0, "Year/Month", bgcolor=#a8a8a88f, text_size=size.normal)

// Track peaks and troughs in equity
if (na(equityPeak) or strategy.equity > equityPeak)
    if (inDrawdown and strategy.equity > equityPeak and not na(equityTrough)) // Confirm end of drawdown cycle
        drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100
        if drawdownPercentage > min_trough
            cycleCount += 1
            prevRunUp := (equityPeak - prevTrough) / prevTrough * 100
            if cycleCount <= 20 and showTable
                currentYear = year
                if na(lastYear) or currentYear != lastYear
                    useLighterGray := not useLighterGray
                    lastYear := currentYear
                rowColor = useLighterGray ? color.new(color.gray, 80) : color.new(color.gray, 50)
                table.cell(resultTable, 1, cycleCount, str.tostring(cycleCount), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 2, cycleCount, f_to_percent(prevRunUp), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 3, cycleCount, f_to_percent(drawdownPercentage), bgcolor=rowColor, text_size=size.normal)
                table.cell(resultTable, 4, cycleCount, get_month_year_string(), bgcolor=rowColor, text_size=size.normal)
            prevTrough := equityTrough
    equityPeak := strategy.equity
    equityTrough := na
    inDrawdown := false
else if (strategy.equity < equityPeak)
    equityTrough := na(equityTrough) ? strategy.equity : math.min(equityTrough, strategy.equity)
    inDrawdown := true

// Calculate if the strategy should end
if not na(equityPeak) and not na(equityTrough)
    drawdownPercentage = (equityPeak - equityTrough) / equityPeak * 100
    if drawdownPercentage >= maxdraw
        end_strategy := true


// This code below is from Tradingview, but with additions where commented (see below)

longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (shortCondition) and not end_strategy // Add 'and not end_strategy' to your order conditions to automatically end the strategy if max_draw is exceeded/
    strategy.entry("My Short Entry Id", strategy.short)