Strategi Mengikuti Trend Harga Momentum


Tarikh penciptaan: 2023-11-13 16:44:58 Akhirnya diubah suai: 2023-11-13 16:44:58
Salin: 0 Bilangan klik: 648
1
fokus pada
1617
Pengikut

Strategi Mengikuti Trend Harga Momentum

Gambaran keseluruhan

Strategi pengesanan trend harga dinamik menggunakan pelbagai indikator dinamik untuk mengenal pasti trend harga, membina kedudukan pada peringkat permulaan trend, mengunci keuntungan dengan menetapkan hentian hentian, untuk mengesan trend harga.

Prinsip Strategi

Strategi untuk mengesan trend harga momentum menggunakan petunjuk teknikal berikut:

  1. Penunjuk ROC: Penunjuk ini menilai pergerakan harga dengan mengira peratusan kelajuan perubahan harga dalam jangka masa tertentu. Apabila ROC adalah positif, harga menunjukkan kenaikan; apabila ROC adalah negatif, harga menunjukkan penurunan.

  2. Indikator tenaga kosong: Indikator ini mencerminkan perbandingan antara kekuatan kepala kosong dan kepala kosong. Tenaga kosong > 0 bermaksud kekuatan kepala kosong lebih besar daripada kekuatan kepala kosong, harga naik; sebaliknya, harga turun.

  3. Penunjuk penyimpangan: Penunjuk ini menilai pembalikan trend dengan mengira perpindahan harga dan jumlah transaksi. Strategi menggunakan isyarat penyimpangan sebagai masa masuk.

  4. Saluran Donchian: Indikator ini membina saluran melalui harga tertinggi dan terendah, dan sempadan saluran berfungsi sebagai titik sokongan dan rintangan. Strategi menggunakan saluran untuk menentukan arah trend.

  5. Rata-rata bergerak: Indikator ini dapat menghapuskan pergerakan harga yang disokong dan mendedahkan arah trend utama. Strategi menggunakannya untuk menentukan pergerakan harga secara keseluruhan.

Strategi berdasarkan beberapa petunjuk di atas untuk menilai trend harga dan masa pembalikan, pada peringkat permulaan trend, bina kedudukan overhead atau kosong berdasarkan isyarat petunjuk. Kemudian berdasarkan titik henti henti rugi, kunci keuntungan dengan tepat pada masanya, capture trend harga.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan pelbagai petunjuk untuk menilai trend, mengurangkan kemungkinan kesalahan penilaian.

  2. Menggunakan penunjuk untuk capture trend tipping point dengan tepat.

  3. Mengambil kira arah trend utama dengan menggunakan saluran dan rata-rata bergerak.

  4. Tetapkan titik hentian hentian, dapat menghentikan hentian tepat pada masanya, untuk mengelakkan penarikan balik.

  5. Ia boleh disesuaikan mengikut parameter, dan boleh digunakan untuk pelbagai kitaran dan jenis transaksi.

  6. Logik strategi jelas dan mudah difahami untuk pengoptimuman kemudian.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Keputusan gabungan pelbagai indikator meningkatkan kebarangkalian isyarat yang salah, perlu menyesuaikan parameter untuk mengoptimumkan berat indikator.

  2. Penetapan titik berhenti yang terlalu kecil boleh meningkatkan kebarangkalian berhenti, dan penetapan yang terlalu besar boleh memperluaskan penarikan balik. Perlu dipertimbangkan secara menyeluruh untuk menentukan titik berhenti yang munasabah.

  3. Parameter kitaran pasaran yang berbeza memerlukan penyesuaian, dan penggunaan buta mungkin menyebabkan ketidaksesuaian dengan keadaan pasaran.

  4. Ia memerlukan dana yang mencukupi untuk menyokong perdagangan serentak berbilang unit, atau ia sukar untuk mendapatkan pulangan berlebihan.

  5. Perdagangan prosedur mempunyai risiko kecocokan yang telah diukur, dan terdapat beberapa ketidakpastian mengenai keberkesanan cakera.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Mengoptimumkan parameter penunjuk untuk mencari kombinasi parameter yang optimum untuk pelbagai kitaran dan varieti.

  2. Menambah algoritma pembelajaran mesin untuk mencari parameter optimum secara automatik.

  3. Menambah mekanisme penangguhan kerugian yang menyesuaikan diri, menyesuaikan titik penangguhan mengikut keadaan pasaran.

  4. Gabungan faktor frekuensi tinggi dan petunjuk asas untuk meningkatkan alpha strategi.

  5. Membangunkan kerangka ujian automatik, menyesuaikan kombinasi parameter dan mengesahkan keberkesanan transaksi.

  6. Memperkenalkan modul pengurusan risiko, mengawal saiz kedudukan dan mengurangkan pengeluaran.

  7. Menambah perdagangan simulasi dan pengesahan dalam talian untuk meningkatkan kestabilan strategi.

ringkaskan

Strategi ini menggunakan pelbagai indikator dinamik untuk menentukan trend harga dan menetapkan stop loss untuk mengunci keuntungan. Strategi ini dapat menangkap trend harga dengan berkesan dan mempunyai kestabilan yang kuat. Dengan menyesuaikan parameter, mengoptimumkan struktur dan mengawal risiko, strategi ini dapat meningkatkan lagi keberkesanan dan mengurangkan risiko perdagangan.

Kod sumber strategi
/*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" +
      "╚═══════╝")