Strategi Pelacakan Tren Harga Momentum

Penulis:ChaoZhang, Tanggal: 2023-11-13 16:44:58
Tag:

img

Gambaran umum

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.

Logika Strategi

Strategi pelacakan tren harga momentum terutama menerapkan indikator teknis berikut:

  1. 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.

  2. 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.

  3. Divergensi: Indikator ini mengidentifikasi pembalikan tren dengan menghitung divergensi harga dan volume.

  4. Channel Donchian: Indikator ini membangun saluran menggunakan harga tertinggi dan terendah, dan batas saluran dapat berfungsi sebagai dukungan dan resistensi.

  5. 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.

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Menggunakan beberapa indikator untuk menentukan tren mengurangi kemungkinan penilaian yang salah.

  2. Menggunakan divergensi indikator memungkinkan untuk menangkap dengan akurat titik pembalikan tren.

  3. Menggabungkan saluran dan rata-rata bergerak membantu menentukan tren keseluruhan.

  4. Menetapkan stop profit dan stop loss memastikan keuntungan tepat waktu dan menghindari penarikan yang diperluas.

  5. Parameter yang dapat disesuaikan membuat strategi dapat disesuaikan dengan periode dan produk yang berbeda.

  6. Logika yang jelas memfasilitasi optimasi lebih lanjut.

Analisis Risiko

Risiko potensial dari strategi ini meliputi:

  1. Beberapa indikator dapat meningkatkan probabilitas sinyal yang salah.

  2. Titik stop loss yang ditetapkan terlalu kecil dapat meningkatkan probabilitas stop loss, sementara terlalu luas dapat memperluas drawdown.

  3. Aplikasi buta di berbagai periode pasar dapat menyebabkan ketidakcocokan.

  4. Modal yang cukup untuk mendukung unit posisi tinggi diperlukan untuk mencapai hasil yang berlebihan.

  5. Risiko overfiting backtest ada. kinerja perdagangan nyata memiliki ketidakpastian.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Mengoptimalkan parameter indikator untuk menemukan kombinasi optimal untuk periode dan produk yang berbeda.

  2. Memperkenalkan algoritma pembelajaran mesin untuk menemukan parameter optimal secara otomatis.

  3. Membangun mekanisme stop loss adaptif berdasarkan kondisi pasar.

  4. Masukkan faktor frekuensi tinggi dan fundamental untuk meningkatkan alfa.

  5. Mengembangkan kerangka pengujian otomatis untuk optimasi parameter dan verifikasi kinerja.

  6. Memperkenalkan modul manajemen risiko untuk mengontrol ukuran posisi dan mengurangi penarikan.

  7. Tambahkan perdagangan dan pengujian simulasi dan langsung untuk meningkatkan stabilitas.

Kesimpulan

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" +
      "╚═══════╝")






Lebih banyak