
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.
Sinyal perdagangan dihasilkan:
Kontrol penarikan puncak:
Analisis Siklus Puncak-Hutan:
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.
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.
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.
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.
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.
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.
Transaksi yang sering terjadi: Dalam pasar yang bergejolak, SMA dapat sering berselisih, yang menyebabkan terlalu banyak transaksi dan biaya transaksi yang tinggi.
Potensi Penarikan Besar: Meskipun ada kontrol penarikan maksimum, satu penurunan besar dapat menyebabkan kerugian yang lebih besar ketika pasar sangat berfluktuasi.
Sensitivitas parameter: Kinerja strategi sangat bergantung pada siklus SMA dan pilihan nilai ambang mundur, pengaturan parameter yang tidak tepat dapat menyebabkan hasil suboptimal.
Kesempatan yang terlewatkan untuk kembali: Strategi ini dapat melewatkan peluang yang ditimbulkan oleh pembalikan pasar setelah mencapai batas maksimum untuk menghentikan perdagangan.
Masukkan perubahan parameter dinamis: Siklus SMA dan penarikan margin dapat dipertimbangkan untuk menyesuaikan dengan kondisi pasar yang berbeda.
Menambahkan filter pasar tambahan: Hal ini dikombinasikan dengan indikator teknis atau fundamental lainnya, seperti RSI atau volume transaksi, untuk memfilter potensi sinyal palsu.
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.
Menambahkan mekanisme penangguhan: Pada dasar kontrol penarikan, tambahkan fungsi stop-loss dinamis untuk mengunci keuntungan dan meningkatkan tingkat pengembalian secara keseluruhan.
Pengelolaan dana yang optimal: Mengimplementasikan manajemen posisi dinamis berdasarkan ukuran akun dan volatilitas pasar untuk mengendalikan risiko dengan lebih baik.
Memperkenalkan algoritma pembelajaran mesin: Menggunakan teknologi pembelajaran mesin untuk mengoptimalkan pilihan parameter dan proses pembuatan sinyal, meningkatkan kemampuan adaptasi dan akurasi strategi.
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.
/*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)