
Strategi pelacakan trend pelacakan pelbagai indikator adalah strategi perdagangan kuantitatif berdasarkan sistem perdagangan pirus klasik yang menangkap trend kuat di pasaran melalui sinyal pelacakan pelbagai kitaran. Inti strategi ini adalah menggunakan harga yang pecah dalam kitaran masa yang berbeza sebagai isyarat masuk dan keluar, sambil menggabungkan ATR (rata-rata gelombang sebenar) untuk kawalan risiko dan pengurusan kedudukan.
Prinsip teras strategi ini adalah untuk menangkap pergerakan trend yang berpotensi dengan mengenal pasti harga yang memecahkan kemuncak sejarah atau titik rendah. Logik pelaksanaan khusus adalah seperti berikut:
Mekanisme kemasukanStrategi menggunakan harga tertinggi dan terendah sejarah dalam kitaran N1 (default 20 kitaran) sebagai rujukan pecah. Apabila harga naik, ia memecahkan harga tertinggi dalam kitaran N1 sebelumnya, menghasilkan isyarat masuk multihead. Apabila harga turun, ia memecahkan harga terendah dalam kitaran N1 sebelumnya, menghasilkan isyarat masuk kosong.
Mekanisme keluarStrategi menggunakan mekanisme dua perlawanan:
Pengurusan kedudukanKaedah: Mengambil kira saiz unit dagangan berdasarkan kadar turun naik (ATR) dan nisbah risiko, memastikan risiko setiap dagangan dikawal dalam peratusan tetap dana akaun (default 1%). Rumus pengiraan adalah:
交易单位 = 风险金额 / (ATR * 每点价值)
Jumlah risiko adalah modal awal yang dikalikan dengan nisbah risiko.
Keupayaan untuk mengesan trendReka bentuk strategi memberi tumpuan kepada menangkap trend besar, mengenal pasti titik permulaan trend yang berpotensi melalui isyarat terobosan, dan memanfaatkan pergerakan tren pasaran dengan berkesan.
Kawalan risiko dinamikDengan menggunakan ATR untuk mengira kedudukan hentian, anda dapat menyesuaikan jarak hentian secara dinamik mengikut pergerakan sebenar pasaran, mengelakkan hentian yang terlalu kerap yang disebabkan oleh hentian tetap yang terlalu dekat, dan mencegah kerugian yang terlalu besar yang disebabkan oleh jarak hentian yang terlalu jauh.
Kedudukan menyesuaikan diri: Mengubah saiz kedudukan secara dinamik berdasarkan kadar turun naik pasaran dan nisbah risiko akaun, mengurangkan kedudukan secara automatik di pasaran turun naik yang tinggi, meningkatkan kedudukan dengan sewajarnya di pasaran turun naik yang rendah, untuk mencapai kawalan keseimbangan celah risiko.
Parameter yang boleh disesuaikanStrategi menyediakan antara muka penyesuaian untuk pelbagai parameter utama (N1, N2, kitaran ATR, nisbah risiko, dan lain-lain) yang boleh dioptimumkan oleh pengguna mengikut keadaan pasaran yang berbeza dan pilihan risiko peribadi.
Perdagangan sistematikPeraturan perdagangan yang sepenuhnya sistematik menghilangkan gangguan emosi, mengikuti peraturan masuk, keluar dan pengurusan dana yang ditetapkan dengan ketat, meningkatkan disiplin perdagangan.
Perkembangan pasaran yang burukSebagai strategi trend-following, dalam pasaran yang bergolak, mudah untuk menghasilkan isyarat pecah palsu yang kerap, yang menyebabkan kerugian berturut-turut. Penyelesaian boleh menambah syarat penapisan kadar turun naik, hanya mempertimbangkan masuk apabila kadar turun naik melebihi paras tertentu.
Titik tergelincir dan kesan komisenDalam pasaran yang mempunyai kekerapan dagangan tinggi atau kekurangan kecairan, slippage dan komisen boleh menjejaskan prestasi strategi secara ketara. Masalah ini dapat dikurangkan dengan mengurangkan kekerapan dagangan atau menambah mekanisme pengesahan isyarat.
Kepekaan ParameterPrestasi strategi lebih sensitif terhadap N1 dan N2 parameter, parameter optimum mungkin berbeza-beza dalam pasaran dan jangka masa yang berbeza. Adalah disyorkan untuk mencari kombinasi parameter yang mantap melalui pengesanan semula sejarah, untuk mengelakkan kecocokan kurva yang disebabkan oleh pengoptimuman berlebihan.
Risiko yang besar: Dalam harga melonjak yang disebabkan oleh peristiwa besar yang tidak dijangka, perintah hentian mungkin tidak dapat dilaksanakan mengikut harga yang dijangkakan, menyebabkan kerugian yang lebih besar daripada yang dijangkakan.
Risiko pengurusan danaWalaupun strategi ini mengandungi mekanisme kawalan risiko, dalam keadaan pasaran yang melampau, hentian kerugian berturut-turut masih boleh menyebabkan kemerosotan besar dalam kurva modal. Ia disyorkan untuk menetapkan had kerugian berturut-turut maksimum atau memperkenalkan kawalan risiko keseluruhan.
Pengesahan pelbagai kerangka masa: Mekanisme pengesahan trend yang lebih lama boleh diperkenalkan, untuk meningkatkan kualiti isyarat, hanya apabila trend dalam pelbagai bingkai masa adalah sama. Sebagai contoh, syarat untuk memeriksa sama ada arah trend garis matahari adalah sama dengan arah trend dalam kitaran perdagangan semasa boleh ditambah.
Penapis kadar turun naikMemperkenalkan syarat penapisan kadar turun naik, melaksanakan isyarat perdagangan hanya dalam lingkungan turun naik pasaran yang munasabah, mengelakkan masuk ke dalam pasaran yang terlalu tenang atau terlalu turun naik. Nilai relatif ATR (seperti nisbah ATR / harga) boleh digunakan sebagai penapis.
Mekanisme pengesahan isyaratMenambah mekanisme pengesahan penembusan, seperti meminta harga untuk kekal untuk masa tertentu atau kepekatan selepas penembusan sebelum mengesahkan isyarat berkesan, mengurangkan kerugian yang disebabkan oleh penembusan palsu.
Pengaturan parameter dinamikPengesuaian parameter N1 dan N2 berdasarkan keadaan pasaran yang dinamik, penggunaan kombinasi parameter yang berbeza dalam persekitaran kadar turun naik yang berbeza, meningkatkan kesesuaian strategi dengan keadaan pasaran.
Menambah penilaian kekuatan trendMengambil kira kekuatan trend semasa dengan menggunakan indikator kekuatan trend (seperti ADX, kemerosotan regresi linear, dan lain-lain) dan hanya mempertimbangkan untuk masuk apabila kekuatan trend mencapai tahap tertentu, meningkatkan ketepatan tangkapan trend.
Optimumkan mekanisme penangguhanPertimbangan untuk memperkenalkan hentian bergerak atau hentian berdasarkan sokongan / rintangan, memberikan lebih banyak ruang untuk trend, sambil mengekalkan fungsi kawalan risiko.
Strategi pelacakan trend pelacakan pelbagai indikator adalah strategi perdagangan sistematik yang menggabungkan falsafah perdagangan pelabuhan klasik dengan teknologi pengurusan risiko moden. Dengan menentukan arah trend melalui pelacakan harga berbilang kitaran, digabungkan dengan ATR untuk menghentikan kerugian dan kawalan kedudukan yang dinamik, strategi ini dapat menangkap peluang tren yang ketara di pasaran dengan berkesan.
Kelebihan utama strategi ini adalah peraturan perdagangan yang sistematik dan kawalan risiko yang ketat, mengelakkan gangguan emosi, dan pada masa yang sama memberikan fleksibiliti yang lebih tinggi melalui penyesuaian parameter. Walau bagaimanapun, sebagai strategi mengikuti trend, ia mungkin tidak berfungsi dengan baik dalam pasaran yang bergolak, yang memerlukan pengguna untuk memahami senario penerapannya dan melakukan pengoptimuman parameter yang sesuai.
Dengan memperkenalkan pengoptimuman seperti pengesahan bingkai masa berbilang, penapisan kadar turun naik, mekanisme pengesahan isyarat, strategi ini dijangka meningkatkan kualiti dan kestabilan isyarat lebih lanjut, menyesuaikan diri dengan persekitaran pasaran yang lebih pelbagai. Akhirnya, strategi trend pelacakan trend pemecahan pelbagai indikator menyediakan pedagang dengan cara yang boleh dipercayai dan sistematik untuk menangkap trend pasaran, sambil mengawal risiko, untuk mencapai prestasi perdagangan yang stabil dalam jangka panjang.
/*backtest
start: 2024-07-03 00:00:00
end: 2025-07-01 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/
//@version=5
strategy("Turtle Trading Strategy (Simplified)", overlay=true, initial_capital=10000, default_qty_type=strategy.cash, default_qty_value=1000, commission_type=strategy.commission.cash_per_order, commission_value=1)
// --- Strategy Inputs ---
n1_entry_period = input.int(20, title="Entry Lookback Period (N1)", minval=1)
n2_exit_period = input.int(10, title="Exit Lookback Period (N2)", minval=1)
atr_period = input.int(20, title="ATR Period", minval=1)
atr_multiplier = input.float(2.0, title="ATR Stop Multiplier", minval=0.1)
risk_per_trade_percent = input.float(1.0, title="Risk Per Trade (%)", minval=0.1, maxval=10.0)
// --- Calculate Channels ---
highest_high_n1 = ta.highest(high, n1_entry_period)
lowest_low_n1 = ta.lowest(low, n1_entry_period)
highest_high_n2 = ta.highest(high, n2_exit_period)
lowest_low_n2 = ta.lowest(low, n2_exit_period)
// --- Calculate ATR (Average True Range) ---
atr_value = ta.atr(atr_period)
// --- Position Sizing (Simplified) ---
// This aims to calculate units based on a fixed percentage risk per trade.
// 1 Unit = 1 ATR worth of movement. Risk 1% of equity per trade.
risk_amount = strategy.initial_capital * (risk_per_trade_percent / 100)
dollar_per_point = syminfo.mintick // Or your instrument's specific dollar per point value
unit_size = atr_value * dollar_per_point > 0 ? math.round(risk_amount / (atr_value * dollar_per_point)) : 0
// Ensure unit_size is at least 1 if risk allows, and cap it for realism
if unit_size == 0 and risk_amount > 0
unit_size := 1 // Minimum 1 unit if risk allows any trade
if unit_size > 10000 // Cap unit size to prevent excessively large positions in backtesting
unit_size := 10000
// --- Entry Logic ---
long_condition = ta.crossover(close, highest_high_n1[1]) // Break above previous N1 high
short_condition = ta.crossunder(close, lowest_low_n1[1]) // Break below previous N1 low
// Variables to store entry information only for the *current* bar
var float current_entry_price = na
var int current_entry_type = 0 // 1 for long, -1 for short, 0 for no entry
if long_condition and strategy.opentrades == 0 // Only enter if no open positions
strategy.entry("Long", strategy.long, qty=unit_size, comment="Turtle Long Entry")
// Store entry details for the current bar
current_entry_price := close // Or strategy.opentrades[0].entry_price if you prefer but close on entry bar is often same
current_entry_type := 1
if short_condition and strategy.opentrades == 0 // Only enter if no open positions
strategy.entry("Short", strategy.short, qty=unit_size, comment="Turtle Short Entry")
// Store entry details for the current bar
current_entry_price := close // Or strategy.opentrades[0].entry_price
current_entry_type := -1
// --- Exit Logic ---
// Declare persistent variables to store stop prices
var float long_stop_price = na
var float short_stop_price = na
// Calculate and store stop price on the bar *after* an entry
if current_entry_type[1] == 1 // If a long entry occurred on the previous bar
long_stop_price := current_entry_price[1] - (atr_value[1] * atr_multiplier) // Use values from previous bar
short_stop_price := na // Reset short stop
if current_entry_type[1] == -1 // If a short entry occurred on the previous bar
short_stop_price := current_entry_price[1] + (atr_value[1] * atr_multiplier) // Use values from previous bar
long_stop_price := na // Reset long stop
// Stop Loss for Long Positions
if strategy.position_size > 0 // We have a long position
strategy.exit("Long Exit SL", from_entry="Long", stop=long_stop_price, comment="Long Stop Loss")
// Stop Loss for Short Positions
if strategy.position_size < 0 // We have a short position
strategy.exit("Short Exit SL", from_entry="Short", stop=short_stop_price, comment="Short Stop Loss")
// N2 Exit for Long Positions
if strategy.position_size > 0 and ta.crossunder(close, lowest_low_n2[1])
strategy.close("Long", comment="Turtle Long N2 Exit")
// N2 Exit for Short Positions
if strategy.position_size < 0 and ta.crossover(close, highest_high_n2[1])
strategy.close("Short", comment="Turtle Short N2 Exit")
// --- Plotting for Visualization ---
plot(highest_high_n1, "N1 High", color=color.green, linewidth=2, style=plot.style_linebr)
plot(lowest_low_n1, "N1 Low", color=color.red, linewidth=2, style=plot.style_linebr)
plot(highest_high_n2, "N2 High (Exit)", color=color.blue, linewidth=1, style=plot.style_linebr)
plot(lowest_low_n2, "N2 Low (Exit)", color=color.orange, linewidth=1, style=plot.style_linebr)