모멘텀 TD 반전 트레이딩 전략


생성 날짜: 2023-12-18 17:40:10 마지막으로 수정됨: 2023-12-18 17:40:10
복사: 0 클릭수: 845
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

모멘텀 TD 반전 트레이딩 전략

개요

동력 TD 역전 거래 전략은 가격 역전 신호를 식별하는 TD Sequential 지표를 이용한 양적 거래 전략이다. 이 전략은 가격 역전 신호를 확인한 후 가격 동력 분석을 기반으로 상장 또는 상외 지위를 설정한다.

전략 원칙

이 전략은 TD Sequential 지표를 사용하여 가격 변동을 분석하고 9 개의 연속 K 선의 가격 반전 형태를 식별한다. 구체적으로, 9 개의 연속 K 선의 가격 상승 후 하락한 K 선이 발생했을 때, 전략은 적자 기회로 판단한다. 반대로, 9 개의 연속 K 선의 가격 하락 후 상승한 K 선이 발생했을 때, 전략은 더 많은 기회로 판단한다.

TD Sequential 지표의 장점을 활용하여 가격 반전 신호를 조기에 잡을 수 있다. 이 전략에 있는 일정량의 추격-하위 메커니즘과 결합하여, 반전 신호가 확인된 후, 적시에 상장 또는 상장 포지션을 구축할 수 있어 가격 반전이 시작되는 단계에서 더 나은 진입 기회를 얻을 수 있다.

우위 분석

  • TD Sequential 지표를 사용하여 가격 반전의 가능성을 미리 판단할 수 있습니다.
  • 가격 반전 확인을 더 빨리 판단할 수 있는 추적 하락 메커니즘을 구축
  • 역형성 단계를 통해 입지를 구축하여 우수한 입점 지점을 얻습니다.

위험 분석

  • TD Sequential 지표에 가짜 돌파구가 발생할 수 있으며, 다른 요소와 함께 확인해야 합니다.
  • 포지션 규모와 포지션 시간을 적절히 통제하여 위험을 줄여야 합니다.

최적화 방향

  • 다른 지표와 함께 역전 신호를 확인하여 가짜 돌파 위험을 피하십시오.
  • 단편적 손실을 통제하기 위한 손해 방지 장치 구축
  • 포지션 규모와 포지션 보유 시간을 최적화하고 수익 규모와 위험 통제를 균형 잡는다

요약하다

동력 TD 역전 거래 전략은 TD Sequential 지표를 통해 가격 역전을 미리 판단하고 역전 확인 후 신속하게 포지션을 구축하는 동력 트레이더가 사용하는 매우 적합한 전략이다. 이 전략은 역전 기회를 식별하는 장점이 있지만 가짜 돌파로 인해 큰 손실을 피하기 위해 위험을 통제하는 데 주의를 기울여야 한다. 추가 최적화를 통해 위험과 이익이 균형 잡힌 거래 전략이다.

전략 소스 코드
/*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)