Strategi trend following adalah strategi trading trend yang didasarkan pada perpindahan rata-rata bergerak. Strategi ini menggunakan perpindahan rata-rata bergerak eksponensial (EMA) dan rata-rata bergerak Hull (HMA) untuk menentukan arah tren dan menghasilkan sinyal perdagangan sesuai. Strategi ini bertujuan untuk mengikuti tren harga jangka panjang daripada osilasi jangka pendek.
Strategi ini menggunakan dua rata-rata bergerak dengan parameter yang berbeda: EMA yang lebih cepat dan HMA yang lebih lambat.
Ketika EMA yang lebih cepat melintasi di atas HMA yang lebih lambat, itu dipandang sebagai awal dari tren kenaikan, dan strategi akan menempatkan pesanan panjang dengan harga pasar pada bar terbuka berikutnya.
Untuk mengoptimalkan waktu masuk, strategi ini menggabungkan opsi Heikin-Ashi. Ketika diaktifkan, sinyal beli dan jual akan didasarkan pada batang Heikin-Ashi bukan lilin normal.
Strategi ini juga menggunakan pengaturan stop loss. Ketika kerugian posisi mencapai persentase stop loss yang telah ditetapkan sebelumnya, posisi akan ditutup dengan harga pasar, membatasi kerugian maksimum per perdagangan.
Keuntungan dari strategi ini meliputi:
Menggunakan EMA dan HMA crossover untuk menentukan tren dapat memanfaatkan rata-rata bergerak periode yang berbeda dan meningkatkan akurasi.
Perdagangan berdasarkan tren menghindari berputar pada osilasi kecil dan mengurangi perdagangan yang tidak perlu.
Opsi Heikin-Ashi mengoptimalkan waktu masuk dengan menyaring sinyal palsu.
Stop loss bergerak secara efektif membatasi kerugian maksimum per perdagangan.
Parameter yang dapat disesuaikan memungkinkan optimasi untuk produk dan kerangka waktu yang berbeda.
Risiko dari strategi ini meliputi:
Sebagai sistem yang mengikuti tren, ia berkinerja buruk selama pasar yang terikat rentang.
Hal ini dapat menimbulkan kerugian besar ketika pembalikan tren datang.
Pengaturan stop loss yang tidak benar dapat menyebabkan stop loss yang tidak perlu atau memperbesar kerugian.
Penyesuaian parameter yang buruk dapat menyebabkan overtrading atau ketidakaktifan.
Periode EMA dan HMA perlu dioptimalkan untuk produk dan kerangka waktu yang berbeda.
Heikin-Ashi tidak bisa sepenuhnya menghindari risiko kebocoran palsu.
Strategi dapat ditingkatkan dari aspek berikut:
Menggunakan lebih banyak indikator seperti MACD, KDJ untuk meningkatkan akurasi tren.
Tambahkan lebih banyak filter seperti volume, ATR untuk mengurangi pemutusan palsu.
Mengoptimalkan parameter rata-rata bergerak berdasarkan produk dan kerangka waktu.
Perbaiki persentase stop loss untuk perilaku stop loss yang lebih baik.
Pertimbangkan fitur mengambil keuntungan seperti memindahkan profit stop dan mengambil keuntungan parsial.
Uji cara alternatif untuk menghitung basis biaya posisi untuk optimasi.
Strategi trend following mengidentifikasi tren menggunakan crossover rata-rata bergerak, dan mengoptimalkan kinerja melalui Heikin-Ashi dan stop loss bergerak. Ini cocok untuk perdagangan tren jangka menengah hingga panjang, dan dapat ditingkatkan lebih lanjut melalui penyesuaian parameter dan perluasan fitur. Tetapi pengguna harus menyadari risiko pembalikan dan stop loss yang tidak tepat. Secara keseluruhan, ini menyediakan kerangka kerja universal dan dapat disesuaikan untuk perdagangan tren yang bekerja di berbagai produk dan kerangka waktu. Pengujian parameter yang tepat diperlukan saat menerapkannya.
/*backtest start: 2022-10-30 00:00:00 end: 2023-11-05 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("𝐉𝐔𝐈𝐂𝐘 𝐓𝐑𝐄𝐍𝐃", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=15) //Heikin Ashi Option ha = input(true, title = "Heikin Ashi Source") src = ha ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, barmerge.gaps_off, barmerge.lookahead_off) : close usestoploss = input(true, title="Stop Loss") //EMA len1 = input.int(9, minval=1, title="EMA Length") ema = ta.ema(src, len1) emaline = plot(ema, title="EMA", color=color.blue, linewidth=2) //HMA len2 = input.int(69, minval=1, title="HMA Length") hma = ta.wma(2*ta.wma(src, len2/2)-ta.wma(src, len2), math.floor(math.sqrt(len2))) hmaline = plot(hma, title="HMA", color=color.purple, linewidth=2) fillcolor = hma < ema ? color.blue : color.purple fill(emaline, hmaline, title="EMA Fill", color=color.new(fillcolor, 80), editable=true) //Stop Loss Conditions stoplosspercent = input.float(title="Stop Loss (%)", defval=-6.5, minval=-50, maxval=0, step=.1) / 100 stoploss = strategy.position_avg_price * (1 + stoplosspercent) stop = stoploss > close and stoploss[1] < close[1] and strategy.position_size > 0 and usestoploss //Buy Sell Conditions buy = hma < ema sell = hma > ema //Trades and Alerts if buy strategy.entry("Long Position", strategy.long, comment="BUY") // alert("{\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar) if sell and strategy.openprofit > 0 strategy.close("Long Position", comment="SELL") // alert("{\n\"action\": \"close_at_market_price\",\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar) if stop strategy.close("Long Position", comment="STOP") // alert("{\n\"action\": \"close_at_market_price\",\n\"message_type\": \"bot\",\n\"bot_id\": 6477543,\n\"email_token\": \"9b842a1b-9cb4-48ac-9ed4-524c98557e5f\",\n\"delay_seconds\": 0\n}", alert.freq_once_per_bar) //Alternate Labels var pos = 0 if buy and pos <= 0 pos := 1 if sell and pos >= 0 pos := -1 buylabel = pos == 1 and (pos != 1)[1] selllabel = pos == -1 and (pos != -1)[1] //Plot Labels plotshape(buylabel, style=shape.labelup, location=location.belowbar, color=color.blue, text="BUY", textcolor=color.white, size=size.tiny) plotshape(selllabel, style=shape.labeldown, location=location.abovebar, color=color.purple, text="SELL", textcolor=color.white, size=size.tiny) plotshape(stop, style=shape.labeldown, location=location.abovebar, color=color.yellow, text="STOP", textcolor=color.white, size=size.tiny)