Strategi Dagangan Pembalikan Momentum TD

Penulis:ChaoZhang, Tarikh: 2023-12-18 17:40:10
Tag:

img

Ringkasan

Strategi Dagangan Pembalikan Momentum TD adalah strategi perdagangan kuantitatif yang menggunakan penunjuk TD Sequential untuk mengenal pasti isyarat pembalikan harga. Strategi ini berdasarkan analisis momentum dan mengambil kedudukan panjang atau pendek selepas mengesahkan isyarat pembalikan harga.

Logika Strategi

Strategi ini menggunakan penunjuk TD Sequential untuk menganalisis turun naik harga dan mengenal pasti corak pembalikan harga selepas 9 lilin berturut-turut. Khususnya, apabila ia mengesan lilin kemerosotan selepas 9 lilin yang meningkat berturut-turut, strategi menentukan ia sebagai peluang pendek. Sebaliknya, apabila ia mengenal pasti lilin kenaikan selepas 9 lilin yang jatuh berturut-turut, strategi menganggapnya sebagai peluang panjang.

Dengan memanfaatkan kelebihan penunjuk TD Sequential, strategi ini dapat menangkap isyarat pembalikan harga sebelum pasaran. Bersama-sama dengan mekanisme mengejar-naik-membunuh-jatuhkan dalam strategi ini, ia boleh tepat pada masanya menubuhkan kedudukan panjang atau pendek selepas mengesahkan isyarat pembalikan, untuk mendapatkan peluang kemasukan yang lebih baik pada peringkat awal pembalikan harga.

Analisis Kelebihan

  • Gunakan penunjuk TD Sequential untuk mengenal pasti peluang pembalikan harga terlebih dahulu
  • Menetapkan mekanisme mengejar-naik-membunuh-jatuhkan untuk menentukan pengesahan pembalikan harga lebih tepat pada masanya
  • Masukkan kedudukan pada peringkat pembentukan pembalikan untuk mendapatkan titik masuk yang agak lebih baik

Analisis Risiko

  • TD Indikator berurutan mungkin mempunyai pecah palsu. faktor lain diperlukan untuk mengesahkan isyarat
  • Mengendalikan kedudukan yang sesuai dan tempoh pegangan untuk mengurangkan risiko

Arahan pengoptimuman

  • Menggabungkan penunjuk lain untuk mengesahkan isyarat pembalikan untuk mengelakkan risiko pecah palsu
  • Menubuhkan mekanisme stop loss untuk mengawal kerugian perdagangan tunggal
  • Mengoptimumkan saiz kedudukan dan tempoh pegangan untuk mengimbangi skala keuntungan dan pengurusan risiko

Kesimpulan

Strategi Dagangan Pembalikan Momentum TD menggunakan penunjuk TD Sequential untuk menilai pembalikan harga terlebih dahulu dan menubuhkan kedudukan dengan cepat selepas pengesahan, menjadikannya sangat sesuai untuk peniaga momentum. Strategi ini mempunyai kelebihan mengenal pasti peluang pembalikan, tetapi masih memerlukan kawalan risiko yang betul untuk mengelakkan kerugian besar yang disebabkan oleh pecah palsu. Dengan pengoptimuman lanjut, ia boleh menjadi strategi seimbang mengenai nisbah risiko-balasan.


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-17 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//This strategy is based on TD sequential study from glaz. 
//I made some improvement and modification to comply with pine script version 4.
//Basically, it is a strategy based on proce action, supports and resistance.

strategy("Sequential Up/Down", overlay=true )
source = input(close)
BarsCount = input(9, "Count of consecutive bars")
useLinearRegression = input(false)
LR_length = input(13,"Linear Regression length")
SR = input(true,"Shows Supports and Resistance lines")
Barcolor = input(true,"Color bars when there is a signal")
transp = input(0, "Transparency of triangle Up or Downs")
Numbers = input(true,"Plot triangle Up or Downs at signal")

//Calculation
src=useLinearRegression?linreg(source,LR_length,0):source
UP = 0
DW = 0
UP := src > src[4] ? nz(UP[1]) + 1 : 0
DW := src < src[4] ? nz(DW[1]) + 1 : 0

UPUp = UP - valuewhen(UP < UP[1], UP, 1)
DWDn = DW - valuewhen(DW < DW[1], DW, 1)

plotshape(Numbers ? UPUp == BarsCount ? true : na : na, style=shape.triangledown, text="", color=color.green, location=location.abovebar, transp=transp)
plotshape(Numbers ? DWDn == BarsCount ? true : na : na, style=shape.triangleup, text="", color=color.red, location=location.belowbar, transp=transp)


// S/R Code By johan.gradin
//------------//
// Sell Setup //
//------------//
priceflip = barssince(src < src[4])
sellsetup = src > src[4] and priceflip
sell = sellsetup and barssince(priceflip != BarsCount)
sellovershoot = sellsetup and barssince(priceflip != BarsCount+4)
sellovershoot1 = sellsetup and barssince(priceflip != BarsCount+5)
sellovershoot2 = sellsetup and barssince(priceflip != BarsCount+6)
sellovershoot3 = sellsetup and barssince(priceflip != BarsCount+7)

//----------//
// Buy setup//
//----------//
priceflip1 = barssince(src > src[4])
buysetup = src < src[4] and priceflip1
buy = buysetup and barssince(priceflip1 != BarsCount)
buyovershoot = barssince(priceflip1 != BarsCount+4) and buysetup
buyovershoot1 = barssince(priceflip1 != BarsCount+5) and buysetup
buyovershoot2 = barssince(priceflip1 != BarsCount+6) and buysetup
buyovershoot3 = barssince(priceflip1 != BarsCount+7) and buysetup

//----------//
// TD lines //
//----------//
TDbuyh = valuewhen(buy, high, 0)
TDbuyl = valuewhen(buy, low, 0)
TDsellh = valuewhen(sell, high, 0)
TDselll = valuewhen(sell, low, 0)

//----------//
//   Plots  //
//----------//

plot(SR ? TDbuyh ? TDbuyl : na : na, style=plot.style_circles, linewidth=1, color=color.red)
plot(SR ? TDselll ? TDsellh : na : na, style=plot.style_circles, linewidth=1, color=color.lime)
barcolor(Barcolor ? sell ? #FF0000 : buy ? #00FF00 : sellovershoot ? #FF66A3 : sellovershoot1 ? #FF3385 : sellovershoot2 ? #FF0066 : sellovershoot3 ? #CC0052 : buyovershoot ? #D6FF5C : buyovershoot1 ? #D1FF47 : buyovershoot2 ? #B8E62E : buyovershoot3 ? #8FB224 : na : na)

//  Strategy: (Thanks to JayRogers)
// === STRATEGY RELATED INPUTS ===
//tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 0, title = "Take Profit Points", minval = 0)
inpStopLoss     = input(defval = 0, title = "Stop Loss Points", minval = 0)
inpTrailStop    = input(defval = 100, title = "Trailing Stop Loss Points", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset Points", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => buy or buyovershoot or buyovershoot1 or buyovershoot2 or buyovershoot3// functions can be used to wrap up and work out complex conditions
//exitLong() => oscillator <= 0
strategy.entry(id = "Buy", long = true, when = enterLong() )// use function or simple condition to decide when to get in
//strategy.close(id = "Buy", when = exitLong() )// ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => sell or sellovershoot or sellovershoot2 or sellovershoot3
//exitShort() => oscillator >= 0
strategy.entry(id = "Sell", long = false, when = enterShort())
//strategy.close(id = "Sell", when = exitShort() )

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Buy", from_entry = "Buy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Sell", from_entry = "Sell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)



Lebih lanjut