Strategi pelacakan tren harga momentum menggunakan beberapa indikator momentum untuk mengidentifikasi tren harga, menetapkan posisi di awal tren, dan mengunci keuntungan melalui pengaturan stop profit dan stop loss untuk melacak tren harga.
Strategi pelacakan tren harga momentum terutama menerapkan indikator teknis berikut:
Indikator ROC: Indikator ini menghitung tingkat persentase perubahan harga selama periode tertentu untuk menentukan momentum harga. Ketika ROC positif, itu berarti harga naik. Ketika ROC negatif, itu berarti harga turun. Strategi menggunakan indikator ROC untuk menentukan arah tren harga.
Indikator Bulls Power and Bears Power: Indikator ini mencerminkan perbandingan kekuatan antara banteng dan beruang. Bulls Power > 0 menunjukkan kekuatan banteng lebih besar dari kekuatan beruang dan harga naik. Strategi menggunakan indikator ini untuk memprediksi arah harga dengan membandingkan kekuatan banteng dan beruang.
Divergensi: Indikator ini mengidentifikasi pembalikan tren dengan menghitung divergensi harga dan volume.
Channel Donchian: Indikator ini membangun saluran menggunakan harga tertinggi dan terendah, dan batas saluran dapat berfungsi sebagai dukungan dan resistensi.
Moving Average: Indikator ini meratakan fluktuasi harga untuk mengidentifikasi arah tren keseluruhan.
Strategi ini menentukan tren harga dan titik pembalikan berdasarkan indikator di atas, dan menetapkan posisi panjang atau pendek sesuai dengan sinyal indikator pada awal tren.
Keuntungan dari strategi ini meliputi:
Menggunakan beberapa indikator untuk menentukan tren mengurangi kemungkinan penilaian yang salah.
Menggunakan divergensi indikator memungkinkan untuk menangkap dengan akurat titik pembalikan tren.
Menggabungkan saluran dan rata-rata bergerak membantu menentukan tren keseluruhan.
Menetapkan stop profit dan stop loss memastikan keuntungan tepat waktu dan menghindari penarikan yang diperluas.
Parameter yang dapat disesuaikan membuat strategi dapat disesuaikan dengan periode dan produk yang berbeda.
Logika yang jelas memfasilitasi optimasi lebih lanjut.
Risiko potensial dari strategi ini meliputi:
Beberapa indikator dapat meningkatkan probabilitas sinyal yang salah.
Titik stop loss yang ditetapkan terlalu kecil dapat meningkatkan probabilitas stop loss, sementara terlalu luas dapat memperluas drawdown.
Aplikasi buta di berbagai periode pasar dapat menyebabkan ketidakcocokan.
Modal yang cukup untuk mendukung unit posisi tinggi diperlukan untuk mencapai hasil yang berlebihan.
Risiko overfiting backtest ada. kinerja perdagangan nyata memiliki ketidakpastian.
Strategi dapat dioptimalkan dalam aspek berikut:
Mengoptimalkan parameter indikator untuk menemukan kombinasi optimal untuk periode dan produk yang berbeda.
Memperkenalkan algoritma pembelajaran mesin untuk menemukan parameter optimal secara otomatis.
Membangun mekanisme stop loss adaptif berdasarkan kondisi pasar.
Masukkan faktor frekuensi tinggi dan fundamental untuk meningkatkan alfa.
Mengembangkan kerangka pengujian otomatis untuk optimasi parameter dan verifikasi kinerja.
Memperkenalkan modul manajemen risiko untuk mengontrol ukuran posisi dan mengurangi penarikan.
Tambahkan perdagangan dan pengujian simulasi dan langsung untuk meningkatkan stabilitas.
Strategi ini menggabungkan beberapa indikator momentum untuk menentukan tren harga dan menggunakan stop profit / loss untuk mengunci keuntungan. Ini dapat secara efektif menangkap tren dengan stabilitas yang kuat. Peningkatan lebih lanjut dalam penyesuaian parameter, optimasi struktur dan pengendalian risiko akan meningkatkan kinerja dan manajemen risiko. Strategi ini menyediakan solusi trend berikut yang andal dan mudah digunakan untuk perdagangan kuantitatif.
/*backtest start: 2023-11-05 00:00:00 end: 2023-11-09 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © mbagheri746 //@version=4 strategy("Bagheri IG Ether v2", overlay=true, margin_long=100, margin_short=100) TP = input(3000, minval = 1 , title ="Take Profit") SL = input(2200, minval = 1 , title ="Stop Loss") //_________________ RoC Definition _________________ rocLength = input(title="ROC Length", type=input.integer, minval=1, defval=186) smoothingLength = input(title="Smoothing Length", type=input.integer, minval=1, defval=50) src = input(title="Source", type=input.source, defval=close) ma = ema(src, smoothingLength) mom = change(ma, rocLength) sroc = nz(ma[rocLength]) == 0 ? 100 : mom == 0 ? 0 : 100 * mom / ma[rocLength] //srocColor = sroc >= 0 ? #0ebb23 : color.red //plot(sroc, title="SROC", linewidth=2, color=srocColor, transp=0) //hline(0, title="Zero Level", linestyle=hline.style_dotted, color=#989898) //_________________ Donchian Channel _________________ length1 = input(53, minval=1, title="Upper Channel") length2 = input(53, minval=1, title="Lower Channel") offset_bar = input(91,minval=0, title ="Offset Bars") upper = highest(length1) lower = lowest(length2) basis = avg(upper, lower) DC_UP_Band = upper[offset_bar] DC_LW_Band = lower[offset_bar] l = plot(DC_LW_Band, style=plot.style_line, linewidth=1, color=color.red) u = plot(DC_UP_Band, style=plot.style_line, linewidth=1, color=color.aqua) fill(l,u,color = color.new(color.aqua,transp = 90)) //_________________ Bears Power _________________ wmaBP_period = input(65,minval=1,title="BearsP WMA Period") line_wma = ema(close, wmaBP_period) BP = low - line_wma //_________________ Balance of Power _________________ ES_BoP=input(15, title="BoP Exponential Smoothing") BOP=(close - open) / (high - low) SBOP = rma(BOP, ES_BoP) //_________________ Alligator _________________ //_________________ CCI _________________ //_________________ Moving Average _________________ sma_period = input(74, minval = 1 , title = "SMA Period") sma_shift = input(37, minval = 1 , title = "SMA Shift") sma_primary = sma(close,sma_period) SMA_sh = sma_primary[sma_shift] plot(SMA_sh, style=plot.style_line, linewidth=2, color=color.yellow) //_________________ Long Entry Conditions _________________// MA_Lcnd = SMA_sh > low and SMA_sh < high ROC_Lcnd = sroc < 0 DC_Lcnd = open < DC_LW_Band BP_Lcnd = BP[1] < BP[0] and BP[1] < BP[2] BOP_Lcnd = SBOP[1] < SBOP[0] //_________________ Short Entry Conditions _________________// MA_Scnd = SMA_sh > low and SMA_sh < high ROC_Scnd = sroc > 0 DC_Scnd = open > DC_UP_Band BP_Scnd = BP[1] > BP[0] and BP[1] > BP[2] BOP_Scnd = SBOP[1] > SBOP[0] //_________________ OPEN POSITION __________________// if strategy.position_size == 0 strategy.entry(id = "BUY", long = true , when = MA_Lcnd and ROC_Lcnd and DC_Lcnd and BP_Lcnd and BOP_Lcnd) strategy.entry(id = "SELL", long = false , when = MA_Scnd and ROC_Scnd and DC_Scnd and BP_Scnd and BOP_Scnd) //_________________ CLOSE POSITION __________________// strategy.exit(id = "CLOSE BUY", from_entry = "BUY", profit = TP , loss = SL) strategy.exit(id = "CLOSE SELL", from_entry = "SELL" , profit = TP , loss = SL) //_________________ TP and SL Plot __________________// currentPL= strategy.openprofit pos_price = strategy.position_avg_price open_pos = strategy.position_size TP_line = (strategy.position_size > 0) ? (pos_price + TP/100) : strategy.position_size < 0 ? (pos_price - TP/100) : 0.0 SL_line = (strategy.position_size > 0) ? (pos_price - SL/100) : strategy.position_size < 0 ? (pos_price + SL/100) : 0.0 // hline(TP_line, title = "Take Profit", color = color.green , linestyle = hline.style_dotted, editable = false) // hline(SL_line, title = "Stop Loss", color = color.red , linestyle = hline.style_dotted, editable = false) Tline = plot(TP_line != 0.0 ? TP_line : na , title="Take Profit", color=color.green, trackprice = true, show_last = 1) Sline = plot(SL_line != 0.0 ? SL_line : na, title="Stop Loss", color=color.red, trackprice = true, show_last = 1) Pline = plot(pos_price != 0.0 ? pos_price : na, title="Stop Loss", color=color.gray, trackprice = true, show_last = 1) fill(Tline , Pline, color = color.new(color.green,transp = 90)) fill(Sline , Pline, color = color.new(color.red,transp = 90)) //_________________ Alert __________________// //alertcondition(condition = , title = "Position Alerts", message = "Bagheri IG Ether\n Symbol: {{ticker}}\n Type: {{strategy.order.id}}") //_________________ Label __________________// inMyPrice = input(title="My Price", type=input.float, defval=0) inLabelStyle = input(title="Label Style", options=["Upper Right", "Lower Right"], defval="Lower Right") posColor = color.new(color.green, 25) negColor = color.new(color.red, 25) dftColor = color.new(color.aqua, 25) posPnL = (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0 posDir = (strategy.position_size > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat" posCol = (strategy.openprofit > 0) ? posColor : (strategy.openprofit < 0) ? negColor : dftColor myPnL = (inMyPrice != 0) ? (close * 100 / inMyPrice - 100) : 0.0 var label lb = na label.delete(lb) lb := label.new(bar_index, close, color=posCol, style=inLabelStyle=="Lower Right"?label.style_label_upper_left:label.style_label_lower_left, text= "╔═══════╗" +"\n" + "Pos: " +posDir +"\n" + "Pos Price: "+tostring(strategy.position_avg_price) +"\n" + "Pos PnL: " +tostring(posPnL, "0.00") + "%" +"\n" + "Profit: " +tostring(strategy.openprofit, "0.00") + "$" +"\n" + "TP: " +tostring(TP_line, "0.00") +"\n" + "SL: " +tostring(SL_line, "0.00") +"\n" + "╚═══════╝")