
Strategi pelacakan tren harga dinamika menggunakan berbagai indikator dinamika untuk mengidentifikasi tren harga, membangun posisi pada tahap awal tren, mengunci keuntungan dengan mengatur stop loss, untuk melacak tren harga.
Strategi pelacakan tren harga momentum terutama menggunakan indikator teknis berikut:
Indikator ROC: Indikator ini menilai pergerakan harga dengan menghitung persentase dari kecepatan perubahan harga dalam jangka waktu tertentu. Ketika ROC positif, berarti harga naik; Ketika ROC negatif, berarti harga turun. Strategi menilai arah tren harga melalui indikator ROC.
Indikator energi kosong: Indikator ini mencerminkan perbandingan antara kekuatan kosong dan kekuatan kosong. Energi kosong > 0 berarti kekuatan kosong lebih besar dari kekuatan kosong, harga naik; sebaliknya harga turun. Strategi menggunakan indikator ini untuk menilai perbandingan kekuatan kosong dan memprediksi arah harga.
Indikator deviasi: Indikator ini digunakan untuk menilai perubahan tren dengan menghitung harga dan volume deviasi. Strategi menggunakan sinyal deviasi sebagai waktu masuk.
Saluran Donchian: indikator ini membangun saluran melalui harga tertinggi dan terendah, batas saluran dapat digunakan sebagai titik dukungan dan resistensi. Strategi menggunakan saluran untuk menilai arah tren.
Moving Average: Indikator ini dapat menyingkirkan pergerakan harga yang didukung dan menunjukkan arah tren utama. Strategi menggunakan ini untuk menentukan pergerakan harga secara keseluruhan.
Strategi berdasarkan beberapa indikator di atas untuk menilai tren harga dan waktu pembalikan, pada tahap awal tren berdasarkan sinyal indikator untuk membangun posisi overhead atau posisi kosong. Kemudian berdasarkan titik stop loss untuk menutup posisi tepat waktu untuk mendapatkan keuntungan, untuk menangkap tren harga.
Strategi ini memiliki keuntungan sebagai berikut:
Menggunakan berbagai indikator untuk menilai tren, mengurangi kemungkinan kesalahan penilaian.
Menggunakan indikator yang menyimpang dari titik balik tren untuk menangkap dengan tepat.
Menggunakan saluran dan rata-rata bergerak untuk menentukan arah tren.
Setting stop loss point, dapat menghentikan stop loss pada waktu yang tepat, untuk menghindari penarikan dan perluasan.
Dapat disesuaikan dengan parameter, berlaku untuk berbagai siklus dan varietas transaksi.
Strategi logis yang jelas dan mudah dipahami untuk optimasi di kemudian hari.
Strategi ini juga memiliki beberapa risiko:
Pertimbangan kombinasi multi-indikator meningkatkan probabilitas sinyal yang salah, yang memerlukan penyesuaian parameter untuk mengoptimalkan bobot indikator.
Stop loss yang terlalu kecil dapat meningkatkan probabilitas stop loss, dan yang terlalu besar dapat memperluas penarikan balik. Perlu pertimbangan komprehensif untuk menentukan stop loss yang masuk akal.
Parameter siklus pasar yang berbeda memerlukan penyesuaian, dan penerapan buta dapat menyebabkan ketidakadaptasi dengan lingkungan pasar.
Dibutuhkan dana yang cukup untuk mendukung transaksi multisite, atau sulit untuk mendapatkan excess returns.
Ada beberapa risiko yang terkait dengan program trading, dan ada beberapa ketidakpastian mengenai efeknya.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Optimalkan parameter indikator untuk menemukan kombinasi optimal parameter untuk berbagai siklus dan varietas.
Menambahkan algoritma pembelajaran mesin untuk mencari parameter optimal secara otomatis.
Menambahkan mekanisme stop loss yang dapat disesuaikan dan menyesuaikan stop loss sesuai dengan kondisi pasar.
Kombinasi faktor frekuensi tinggi dan indikator fundamental meningkatkan alpha dari strategi.
Mengembangkan kerangka pengujian otomatis, menyesuaikan kombinasi parameter dan memverifikasi efektivitas transaksi.
Memperkenalkan modul manajemen risiko untuk mengontrol ukuran posisi dan mengurangi penarikan.
Menambahkan transaksi simulasi dan verifikasi langsung, meningkatkan stabilitas strategi.
Strategi ini menggunakan berbagai indikator dinamis untuk menentukan tren harga, dan mengatur stop loss untuk mengunci keuntungan. Strategi ini mampu menangkap tren harga secara efektif, dan memiliki stabilitas yang kuat. Dengan menyesuaikan parameter, mengoptimalkan struktur, dan pengendalian risiko, strategi ini dapat lebih meningkatkan efektivitas dan mengurangi risiko perdagangan.
/*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" +
"╚═══════╝")