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


Ngày tạo: 2023-12-18 17:40:10 sửa đổi lần cuối: 2023-12-18 17:40:10
sao chép: 0 Số nhấp chuột: 845
1
tập trung vào
1621
Người theo dõi

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

Tổng quan

Chiến lược giao dịch biến động TD 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 biến động giá. Chiến lược này dựa trên phân tích biến động giá, thiết lập vị trí mua hoặc bán sau khi xác nhận tín hiệu biến động giá.

Nguyên tắc chiến lược

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 hình thức đảo ngược giá của 9 đường K liên tiếp. Cụ thể, khi xác định 9 đường K liên tiếp tăng giá và sau đó có đường K giảm giá, chiến lược đánh giá là cơ hội giảm giá. Ngược lại, khi xác định 9 đường K liên tiếp giảm giá và sau đó có đường K tăng giá, chiến lược đánh giá là nhiều cơ hội.

Sử dụng lợi thế của chỉ số TD Sequential, bạn có thể bắt được tín hiệu đảo ngược giá sớm. Kết hợp với một số cơ chế giết chết giảm theo dõi trong chiến lược này, bạn có thể thiết lập vị trí mua nhiều hoặc bán ngắn trong thời gian, sau khi tín hiệu đảo ngược được xác nhận, do đó có cơ hội nhập vào tốt hơn trong giai đoạn bắt đầu của sự đảo ngược giá.

Phân tích lợi thế

  • Sử dụng chỉ số TD Sequential để đoán trước cơ hội biến động giá
  • Thiết lập cơ chế theo dõi giảm giá để xác định giá sớm hơn
  • Xây dựng cơ sở để có được điểm vào tốt hơn bằng cách đảo ngược giai đoạn hình thành

Phân tích rủi ro

  • TD Sequential có thể bị phá vỡ và cần được xác nhận kết hợp với các yếu tố khác
  • Cần kiểm soát đúng quy mô và thời gian vị trí để giảm rủi ro

Hướng tối ưu hóa

  • Kết hợp với các chỉ số khác để xác định tín hiệu đảo ngược, tránh nguy cơ đột phá giả
  • Thiết lập các cơ chế ngăn chặn để kiểm soát tổn thất đơn lẻ
  • Tối ưu hóa quy mô và thời gian giữ vị trí, cân bằng quy mô lợi nhuận và kiểm soát rủi ro

Tóm tắt

Chiến lược giao dịch đảo ngược động lực TD là một chiến lược rất phù hợp cho các nhà giao dịch động lực. Chiến lược này có lợi thế trong việc xác định cơ hội đảo ngược, nhưng cần chú ý kiểm soát rủi ro để tránh thiệt hại lớn do phá vỡ giả.

Mã nguồn chiến lược
/*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)