Strategi ini adalah sistem pengesanan trend yang menggabungkan pelbagai indeks bergerak rata-rata (EMA) yang bersilang dan tahap Fibonacci yang meluas. Ia menggunakan interaksi antara EMA dari pelbagai kitaran untuk mengenal pasti permulaan dan akhir trend yang berpotensi, sambil menggunakan tahap Fibonacci yang meluas untuk menentukan sasaran keuntungan.
Di tengah-tengah strategi ini adalah penggunaan EMA yang bercampur dengan pelbagai bingkai masa untuk menangkap permulaan dan akhir trend. Secara khusus, ia menggunakan EMA 5 kitaran, 10 kitaran dan 30 kitaran. Strategi ini mengandungi empat syarat kemasukan yang berbeza, masing-masing bertujuan untuk menangkap situasi pasaran yang berbeza:
Apabila harga menyentuh atau di bawah EMA 30 kitaran, tetapi kemudian ditutup di atasnya, sementara EMA 10 kitaran adalah lebih tinggi daripada EMA 5 kitaran, dan EMA 30 kitaran adalah 1% lebih rendah daripada EMA 5 kitaran, mencetuskan syarat kemasukan pertama.
Apabila 5 kitaran EMA memakai 30 kitaran EMA, dan dalam 6 baris terakhir K 30 kitaran EMA telah memakai 5 kitaran EMA, mencetuskan syarat kemasukan kedua ≠
Kedua-dua harga tertinggi K baris semasa adalah lebih rendah daripada EMA 5 kitaran masing-masing, dan EMA 5 kitaran adalah lebih rendah daripada EMA 10 kitaran, dan EMA 10 kitaran adalah lebih rendah daripada EMA 30 kitaran, sementara harga tertinggi K baris sebelumnya adalah lebih rendah daripada harga penutupan semasa, mencetuskan syarat kemasukan ketiga.
Keperluan kemasukan keempat dicetuskan apabila 10 kitaran EMA memakai 30 kitaran EMA, dan 5 kitaran EMA telah memakai 30 kitaran EMA dalam 4 baris K yang lalu, dan nilai semasa 10 kitaran EMA dan 5 kitaran EMA adalah lebih tinggi daripada nilai sebelumnya.
Untuk halangan, strategi menetapkan peraturan khusus untuk syarat kemasukan yang berbeza:
Matlamat keuntungan ditetapkan berdasarkan tahap Pembangunan Fibonacci, termasuk tahap 0.618, 0.786, 1.0 dan 1.618 . Apabila harga mencapai tahap ini, strategi akan ditutup mengikut peraturan tertentu.
Di samping itu, strategi ini juga mengandungi syarat untuk mengunci keuntungan: jika kedua-dua garis K yang paling rendah lebih tinggi daripada 5 kitaran EMA, dan EMA menunjukkan susunan naik ((5 > 10 > 30), maka kedudukan kosong untuk mengunci keuntungan.
Pengesahan pelbagai: Dengan menggunakan pelbagai EMA dan pelbagai syarat kemasukan, strategi dapat mengenal pasti dengan lebih tepat permulaan dan kesinambungan trend. Mekanisme pengesahan pelbagai ini dapat mengurangkan isyarat palsu dan meningkatkan ketepatan perdagangan.
Adaptif: Empat syarat kemasukan yang berbeza membolehkan strategi menyesuaikan diri dengan keadaan pasaran yang berbeza, menangkap peluang perdagangan, sama ada penembusan cepat atau pembentukan trend yang perlahan.
Pengurusan risiko: Strategi ini mengandungi peraturan hentian yang spesifik, yang membantu mengawal risiko setiap perdagangan. Syarat kemasukan yang berbeza sesuai dengan strategi hentian yang berbeza, yang menunjukkan keutamaan strategi terhadap pengurusan risiko.
Matlamat keuntungan jelas: Menggunakan Fibonacci Expansion Level sebagai sasaran keuntungan, memberikan titik keluar yang jelas kepada peniaga. Ini membantu mengelakkan keuntungan yang terlalu awal atau terlalu lama.
Perlindungan keuntungan: Keadaan penguncian keuntungan membantu melindungi keuntungan yang diperoleh apabila trend mungkin berbalik, aspek penting yang diabaikan oleh banyak strategi trend-tracking.
Gabungan penunjuk teknikal: Strategi menggabungkan EMA dan alat Fibonacci, memanfaatkan kelebihan kedua-dua alat analisis teknikal yang popular.
Overtrading: Pelbagai syarat kemasukan boleh menyebabkan overtrading, terutamanya dalam pasaran yang lebih bergolak. Ini boleh meningkatkan kos perdagangan dan boleh menyebabkan lebih banyak isyarat palsu.
Sensitiviti parameter: Strategi menggunakan beberapa kitaran EMA dan penurunan peratusan yang tetap. Parameter ini mungkin perlu disesuaikan dengan pasaran dan jangka masa yang berbeza, jika tidak, ia boleh menyebabkan strategi tidak berfungsi dengan baik.
Bergantung kepada trend: Sebagai strategi untuk mengikuti trend, ia mungkin tidak berfungsi dengan baik dalam pasaran yang berlainan atau bergolak. Dalam persekitaran pasaran ini, ia mungkin menghasilkan beberapa isyarat palsu dan kerugian kecil.
Ketinggalan: EMA pada dasarnya adalah penunjuk ketinggalan. Dalam pasaran yang berubah dengan cepat, strategi mungkin tidak dapat menangkap titik perubahan tren tepat pada masanya.
Kerumitan: Kepelbagaian syarat dan peraturan strategi menambah kerumitan, yang mungkin membuat strategi sukar difahami dan dikekalkan, dan meningkatkan risiko over-fit.
Penyesuaian parameter dinamik: Anda boleh mempertimbangkan untuk memperkenalkan mekanisme penyesuaian diri, menyesuaikan kitaran EMA dan parameter lain mengikut dinamik turun naik pasaran. Ini dapat meningkatkan penyesuaian strategi dalam keadaan pasaran yang berbeza.
Menambah petunjuk jumlah transaksi: Analisis jumlah transaksi yang digabungkan dapat meningkatkan ketepatan keputusan masuk dan keluar. Sebagai contoh, jumlah transaksi yang lebih tinggi boleh diminta semasa masuk untuk mengesahkan kekuatan trend.
Penapisan keadaan pasaran: Memperkenalkan mekanisme pengenalan keadaan pasaran, seperti menggunakan ATR (Average True Range) atau indikator kadar turun naik, untuk menghentikan perdagangan dalam keadaan pasaran yang tidak sesuai untuk mengikuti trend.
Mekanisme penangguhan yang dioptimumkan: Anda boleh mempertimbangkan untuk menggunakan penangguhan yang dijejaki dan bukannya penangguhan tetap. Ini boleh melindungi keuntungan dan membolehkan keuntungan terus berkembang.
Menambah penapis masa: mengehadkan perdagangan pada tempoh masa tertentu, mengelakkan tempoh masa yang lebih turun naik atau kurang turun naik, dapat meningkatkan kestabilan strategi.
Memperkenalkan pembelajaran mesin: Menggunakan algoritma pembelajaran mesin untuk mengoptimumkan pilihan parameter dan keputusan kemasukan, yang dapat meningkatkan kemampuan dan prestasi strategi.
Analisis jangka masa yang berbilang: Analisis trend yang digabungkan dengan jangka masa yang lebih lama dapat meningkatkan ketepatan keputusan kemasukan dan mengelakkan kemasukan dalam keadaan trend utama berbalik.
Strategi pemantauan trend EMA berlainan ini yang menggabungkan Fibonacci Scaling menunjukkan sistem perdagangan yang komprehensif yang menggabungkan beberapa petunjuk teknikal dan konsep perdagangan. Dengan menggunakan pelbagai EMA dan syarat masuk, strategi ini berusaha untuk menyeimbangkan antara menangkap trend dan mengurangkan isyarat palsu. Penggunaan tahap Fibonacci Scaling menyediakan asas objektif untuk menetapkan sasaran keuntungan, sementara peraturan berhenti rugi dan kunci keuntungan yang spesifik mencerminkan keutamaan untuk pengurusan risiko.
Walaupun strategi mempunyai kelebihan pengesahan berganda dan adaptasi yang kuat, kerumitan dan kepekaan terhadap pilihan parameter juga membawa beberapa cabaran. Untuk meningkatkan lagi kestabilan dan prestasi strategi, penyesuaian parameter dinamik, penapisan keadaan pasaran dan analisis pelbagai kerangka masa boleh dipertimbangkan.
Secara keseluruhannya, strategi ini memberikan kerangka yang menarik untuk trend-tracking, tetapi peniaga perlu melakukan pengesanan dan pengoptimuman parameter yang mencukupi apabila ia digunakan secara praktikal, dengan penyesuaian yang sesuai mengikut pasaran dan gaya perdagangan tertentu. Dengan pemantauan dan pengoptimuman yang berterusan, strategi ini berpotensi menjadi alat trend-tracking yang berkesan.
/*backtest
start: 2024-06-01 00:00:00
end: 2024-06-30 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Combined Strategy with Specific Stop Loss", overlay=true)
// Define the EMAs
ema30 = ta.ema(close, 30)
ema10 = ta.ema(close, 10)
ema5 = ta.ema(close, 5)
// Define the conditions for opening an order
open_condition1 = low <= ema30 and close > ema30 and ema10 > ema5 and ema30 * 1.01 < ema5
open_condition2 = ta.crossover(ema5, ema30) and (ta.crossover(ema30[1], ema5[1]) or ta.crossover(ema30[2], ema5[2]) or ta.crossover(ema30[3], ema5[3]) or ta.crossover(ema30[4], ema5[4]) or ta.crossover(ema30[5], ema5[5]) or ta.crossover(ema30[6], ema5[6]) )
open_condition3 = high[2] < ema5[2] and high[1] < ema5[1] and ema5 < ema10 and ema10 < ema30 and high[1] < close
open_condition4 = ta.crossover(ema10, ema30) and (ta.crossover(ema5[0], ema30[0]) or ta.crossover(ema5[1], ema30[1]) or ta.crossover(ema10[2], ema30[2]) or ta.crossover(ema10[3], ema30[3])) and ema10[1] < ema10 and ema5[1] <ema5
// Calculate the lowest low of the previous two bars
lowest_low_prev_two_bars = ta.lowest(low, 3)
// Track the entry price and the lowest low of the previous two bars for open_condition3
var float entry_price = na
var float low_entry_price = na
var float entry_lowest_low1 = na
var float entry_lowest_low2 = na
var float entry_lowest_low3 = na
var float entry_lowest_low4 = na
var bool order1 = false
var bool order2 = false
var bool order3 = false
var bool order4 = false
// Fibonacci extension levels based on the last significant swing
var float fib_extension_level_0_618 = na
var float fib_extension_level_0_786 = na
var float fib_extension_level_1 = na
var float fib_extension_level_1_618 = na
// Calculate Fibonacci extension levels
var float swing_low = na
var float swing_high = na
// Here we assume the latest swing low and swing high, adjust based on your logic
swing_low := ta.lowest(low, 20)
swing_high := ta.highest(high, 20)
// Open a long order when any of the conditions are met
if open_condition1 and not order2 and not order1 and not order3 and not order4
strategy.entry("Long", strategy.long, comment="<ema30")
entry_lowest_low1 := lowest_low_prev_two_bars
low_entry_price := low
fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
entry_price := close
order1 := true
if open_condition2 and not order2 and not order1 and not order3 and not order4
strategy.entry("Long", strategy.long, comment="ema5xema30")
entry_lowest_low2 := lowest_low_prev_two_bars
low_entry_price := low
fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
entry_price := close
order2 := true
if open_condition3 and not order2 and not order1 and not order3 and not order4
strategy.entry("Long", strategy.long, comment="high<ema5")
entry_price := close
low_entry_price := low
entry_lowest_low3 := lowest_low_prev_two_bars
fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
order3 := true
if open_condition4 and not order2 and not order1 and not order3 and not order4
strategy.entry("Long", strategy.long, comment="high<ema5444")
entry_price := close
low_entry_price := low
entry_lowest_low4 := lowest_low_prev_two_bars
fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
order4 := true
// Set a stop loss only if the order was opened with the specified conditions
if (not na(entry_price))
if order1
if ta.crossover(ema30,ema10)
strategy.close("Long", comment="stop loss1" )
entry_price := na
order1 := false
low_entry_price := na
if order2
if close < entry_lowest_low2
strategy.close("Long", comment="stop loss2" )
entry_price := na
order2 := false
low_entry_price := na
if order3
if close < entry_lowest_low3
strategy.close("Long", comment="stop loss3" )
entry_price := na
order3 := false
low_entry_price := na
if order4
if close < entry_lowest_low4
strategy.close("Long", comment="stop loss4" )
entry_price := na
order4 := false
low_entry_price := na
if low[1] > ema5[1] and low > ema5 and ema5 > ema10 and ema10 > ema30
strategy.close("Long", comment="profit low > ema5")
entry_price := na
order1 := false
order2 := false
order3 := false
order4 := false
low_entry_price := na
// Take profit at Fibonacci extension levels
if high >= fib_extension_level_0_618 and close <= fib_extension_level_0_618
strategy.close("Long", comment="at 0.618 Fib")
entry_price := na
order1 := false
order2 := false
order3 := false
order4 := false
low_entry_price := na
if high >= fib_extension_level_0_786 and close < fib_extension_level_0_786
strategy.close("Long", comment="at 0.786 Fib")
entry_price := na
order1 := false
order2 := false
order3 := false
order4 := false
low_entry_price := na
if high >= fib_extension_level_1 and close < fib_extension_level_1
strategy.close("Long", comment="at 1 Fib")
entry_price := na
order1 := false
order2 := false
order3 := false
order4 := false
low_entry_price := na
if high >= fib_extension_level_1_618
strategy.close("Long", comment="at 1 Fib")
entry_price := na
order1 := false
order2 := false
order3 := false
order4 := false
low_entry_price := na
// Plot the EMAs for visual reference
plot(ema30, color=color.blue, title="EMA 30")
plot(ema10, color=color.orange, title="EMA 10")
plot(ema5, color=color.red, title="EMA 5")