Strategi crossover SMA long dan short dikombinasikan dengan kontrol retracement puncak dan penghentian otomatis

SMA
Tanggal Pembuatan: 2024-07-29 14:16:58 Akhirnya memodifikasi: 2024-07-29 14:16:58
menyalin: 0 Jumlah klik: 555
1
fokus pada
1617
Pengikut

Strategi crossover SMA long dan short dikombinasikan dengan kontrol retracement puncak dan penghentian otomatis

Ringkasan

Strategi ini adalah sistem trading multi-zone yang menggabungkan sinyal crossover SMA sederhana dan kontrol penarikan puncak. Ini menggunakan penarikan SMA 14 dan 28 untuk menghasilkan sinyal perdagangan multi-zone, sambil memantau penarikan puncak strategi secara real-time. Strategi ini secara otomatis berhenti berdagang ketika penarikan melebihi batas default.

Prinsip Strategi

  1. Sinyal perdagangan dihasilkan:

    • Ketika 14 SMA melewati 28 SMA, menghasilkan sinyal ganda.
    • Ketika 14 SMA di bawah melewati 28 SMA, menghasilkan sinyal shorting.
  2. Kontrol penarikan puncak:

    • Kurva kepentingan dan hak dari strategi yang dilacak secara real-time, mencatat titik tertinggi dalam sejarah (puncak).
    • Pada saat hak dan kepentingan saat ini berada di bawah puncak, masuk ke dalam keadaan mundur, mencatat titik terendah (bottom of the valley).
    • Perhitungan persentase penarikan = (puncak - dasar lembah) / puncak * 100%。
    • Jika persentase penarikan melebihi batas penarikan maksimum yang telah ditetapkan, maka strategi berhenti membuka posisi baru.
  3. Analisis Siklus Puncak-Hutan:

    • Tetapkan persentase minimum untuk menentukan periode puncak-dasar yang efektif.
    • Setiap kali menyelesaikan siklus yang valid, catat nomor siklus, kenaikan sebelumnya, penurunan dan waktu berakhirnya.
    • Hasil analisis akan ditampilkan dalam bentuk tabel untuk memudahkan trader melihat kinerja historis strategi.

Keunggulan Strategis

  1. Menggabungkan pelacakan tren dan pengendalian risiko: Strategi SMA crossover adalah metode klasik untuk melacak tren, sementara kontrol mundur puncak memberikan tingkat manajemen risiko tambahan. Kombinasi ini dapat secara efektif mengendalikan risiko turun sambil menangkap tren pasar.

  2. Adaptasi yang kuat: Dengan pengaturan parameter maksimum dan minimum withdrawal threshold, strategi dapat disesuaikan secara fleksibel sesuai dengan lingkungan pasar yang berbeda dan preferensi risiko pribadi.

  3. Indikator risiko yang transparan: Analisis siklus puncak-lembah memberikan informasi penarikan historis yang terperinci, yang memungkinkan pedagang untuk secara intuitif memahami karakteristik risiko strategi, yang membantu membuat keputusan perdagangan yang lebih bijaksana.

  4. Pengendalian risiko otomatis: Strategi ini secara otomatis menghentikan perdagangan ketika penarikan melampaui batas default, mekanisme yang efektif untuk mencegah kerugian berkelanjutan dalam kondisi pasar yang tidak menguntungkan.

  5. Analisis kinerja yang komprehensif: Selain indikator pengembalian yang biasa, strategi juga menyediakan data siklus puncak-dasar yang terperinci, termasuk informasi tentang kenaikan, penurunan, dan waktu, yang membantu menganalisis kinerja strategi secara mendalam.

Risiko Strategis

  1. Terlalu mengandalkan data historis: Strategi crossover SMA didasarkan pada data harga historis dan dapat bereaksi lambat dalam pasar yang berubah dengan cepat, menyebabkan sinyal yang salah.

  2. Transaksi yang sering terjadi: Dalam pasar yang bergejolak, SMA dapat sering berselisih, yang menyebabkan terlalu banyak transaksi dan biaya transaksi yang tinggi.

  3. Potensi Penarikan Besar: Meskipun ada kontrol penarikan maksimum, satu penurunan besar dapat menyebabkan kerugian yang lebih besar ketika pasar sangat berfluktuasi.

  4. Sensitivitas parameter: Kinerja strategi sangat bergantung pada siklus SMA dan pilihan nilai ambang mundur, pengaturan parameter yang tidak tepat dapat menyebabkan hasil suboptimal.

  5. Kesempatan yang terlewatkan untuk kembali: Strategi ini dapat melewatkan peluang yang ditimbulkan oleh pembalikan pasar setelah mencapai batas maksimum untuk menghentikan perdagangan.

Arah optimasi strategi

  1. Masukkan perubahan parameter dinamis: Siklus SMA dan penarikan margin dapat dipertimbangkan untuk menyesuaikan dengan kondisi pasar yang berbeda.

  2. Menambahkan filter pasar tambahan: Hal ini dikombinasikan dengan indikator teknis atau fundamental lainnya, seperti RSI atau volume transaksi, untuk memfilter potensi sinyal palsu.

  3. Ini adalah salah satu cara yang paling efektif untuk mendapatkan tiket masuk dan keluar. Alih-alih beroperasi di seluruh gudang, gudang dapat dibangun secara bertahap dan secara bertahap untuk mengurangi risiko keputusan tunggal.

  4. Menambahkan mekanisme penangguhan: Pada dasar kontrol penarikan, tambahkan fungsi stop-loss dinamis untuk mengunci keuntungan dan meningkatkan tingkat pengembalian secara keseluruhan.

  5. Pengelolaan dana yang optimal: Mengimplementasikan manajemen posisi dinamis berdasarkan ukuran akun dan volatilitas pasar untuk mengendalikan risiko dengan lebih baik.

  6. Memperkenalkan algoritma pembelajaran mesin: Menggunakan teknologi pembelajaran mesin untuk mengoptimalkan pilihan parameter dan proses pembuatan sinyal, meningkatkan kemampuan adaptasi dan akurasi strategi.

Meringkaskan

Strategi SMA cross multiple space yang menggabungkan kontrol mundur puncak dengan penghentian otomatis adalah sistem perdagangan kuantitatif yang menggabungkan pelacakan tren dan manajemen risiko. Ini menangkap tren pasar melalui persilangan rata-rata bergerak sederhana, sementara menggunakan kontrol mundur puncak untuk mengelola risiko turun. Strategi ini unik dalam fitur analisis siklus puncak-lembah yang terperinci, yang memberi para pedagang alat untuk memahami secara mendalam karakteristik risiko strategi.

Meskipun ada beberapa risiko yang melekat pada strategi, seperti ketergantungan berlebihan pada data historis dan sensitivitas parameter, stabilitas dan profitabilitas dapat ditingkatkan secara signifikan dengan pengoptimalan dan perbaikan yang tepat, seperti memperkenalkan penyesuaian parameter dinamis, menambahkan filter pasar tambahan, dan mencapai manajemen dana yang lebih cerdas.

Secara keseluruhan, strategi ini memberikan pedagang dengan titik awal yang baik, di mana mereka dapat melakukan penyesuaian dan pengoptimalan lebih lanjut untuk memenuhi tujuan perdagangan individu dan preferensi risiko. Desain modular strategi ini juga membuatnya mudah untuk diintegrasikan dengan strategi perdagangan lainnya atau teknologi manajemen risiko, dan memberikan dasar untuk membangun sistem perdagangan yang lebih kompleks dan lebih komprehensif.

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