Chiến lược giao dịch đảo ngược động lực TD

Tác giả:ChaoZhang, Ngày: 2023-12-18 17:40:10
Tags:

img

Tổng quan

Chiến lược giao dịch đảo ngược TD Momentum là một chiến lược giao dịch định lượng sử dụng chỉ số TD Sequential để xác định tín hiệu đảo ngược giá.

Chiến lược logic

Chiến lược này sử dụng chỉ số TD Sequential để phân tích biến động giá và xác định mô hình đảo ngược giá sau 9 ngọn nến liên tiếp. Cụ thể, khi nó phát hiện một ngọn nến giảm sau 9 ngọn nến tăng liên tiếp, chiến lược xác định nó là một cơ hội ngắn. Ngược lại, khi nó xác định một ngọn nến tăng sau 9 ngọn nến giảm liên tiếp, chiến lược coi nó là một cơ hội dài.

Bằng cách tận dụng lợi thế của chỉ số TD Sequential, chiến lược có thể nắm bắt các tín hiệu đảo ngược giá trước thị trường. Cùng với cơ chế theo đuổi tăng-giết-thả trong chiến lược này, nó có thể kịp thời thiết lập các vị trí dài hoặc ngắn sau khi xác nhận các tín hiệu đảo ngược, để có được cơ hội nhập cảnh tương đối tốt hơn ở giai đoạn đầu của sự đảo ngược giá.

Phân tích lợi thế

  • Sử dụng chỉ số TD Sequential để xác định trước các cơ hội đảo ngược giá
  • Thiết lập cơ chế theo đuổi tăng-giết-thả để xác định xác nhận sự đảo ngược giá kịp thời hơn
  • Nhập các vị trí ở giai đoạn hình thành của sự đảo ngược để có được các điểm nhập tương đối tốt hơn

Phân tích rủi ro

  • TD Dấu hiệu liên tục có thể có sự đột phá sai.
  • Kiểm soát đúng mức độ định giá và thời gian nắm giữ để giảm thiểu rủi ro

Hướng dẫn tối ưu hóa

  • Bao gồm các chỉ số khác để xác nhận các tín hiệu đảo ngược để tránh rủi ro đột phá sai
  • Thiết lập cơ chế dừng lỗ để kiểm soát lỗ giao dịch duy nhất
  • Tối ưu hóa kích thước vị trí và thời gian nắm giữ để cân bằng quy mô lợi nhuận và quản lý rủi ro

Kết luận

Chiến lược giao dịch đảo ngược TD Momentum sử dụng chỉ số TD Sequential để đánh giá sự đảo ngược giá trước và thiết lập các vị trí nhanh chóng sau khi xác nhận, làm cho nó rất phù hợp với các nhà giao dịch động lực. Chiến lược này có lợi thế xác định các cơ hội đảo ngược, nhưng vẫn yêu cầu kiểm soát rủi ro thích hợp để tránh tổn thất lớn do phá vỡ sai. Với các tối ưu hóa hơn nữa, nó có thể trở thành một chiến lược cân bằng về tỷ lệ rủi ro - phần thưởng.


/*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)



Thêm nữa