Momentum TD Umkehrhandelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-18 17:40:10
Tags:

img

Übersicht

Die Momentum TD Reversal Trading Strategie ist eine quantitative Handelsstrategie, die den TD Sequential Indikator zur Identifizierung von Preisumkehrsignalen verwendet.

Strategie Logik

Diese Strategie verwendet den TD Sequential-Indikator, um Preisschwankungen zu analysieren und das Preisumkehrmuster nach 9 aufeinanderfolgenden Kerzen zu identifizieren. Insbesondere, wenn sie nach 9 aufeinanderfolgenden steigenden Kerzen eine Abwärtskerze erkennt, bestimmt die Strategie sie als kurze Gelegenheit. Im Gegenteil, wenn sie nach 9 aufeinanderfolgenden fallenden Kerzen eine Aufwärtskerze identifiziert, betrachtet die Strategie sie als lange Gelegenheit.

Durch die Nutzung des Vorteils des TD Sequential-Indikators kann die Strategie Preisumkehrsignale vor dem Markt erfassen. Zusammen mit dem Chase-Rise-Kill-Drop-Mechanismus in dieser Strategie kann sie nach Bestätigung der Umkehrsignale rechtzeitig Long- oder Short-Positionen einrichten, um relativ bessere Einstiegsmöglichkeiten in der Anfangsphase von Preisumkehrungen zu erhalten.

Pro-Analyse

  • Verwendung des TD Sequential-Indikators zur Vorausbestimmung von Möglichkeiten zur Preisumkehrung
  • Einrichtung des Mechanismus "Chase-Rise-Kill-Drop" zur rechtzeitigen Bestätigung von Preisumkehrungen
  • Eintritt in Positionen in der Entstehung der Umkehrungen, um relativ bessere Einstiegspunkte zu erhalten

Risikoanalyse

  • TD Der Sequenzindikator kann falsche Ausbrüche aufweisen.
  • Um Risiken abzuschwächen, ist die Positionsgrößenordnung und die Haltezeit angemessen zu kontrollieren.

Optimierungsrichtlinien

  • Einbeziehung anderer Indikatoren zur Validierung von Umkehrsignalen zur Vermeidung falscher Ausbruchrisiken
  • Einrichtung eines Stop-Loss-Mechanismus zur Kontrolle einzelner Handelsverluste
  • Optimierung der Positionsgröße und der Haltezeit, um die Gewinnskala und das Risikomanagement auszugleichen

Schlussfolgerung

Die Momentum TD Reversal Trading Strategie nutzt den TD Sequential Indikator, um Preisumkehrungen im Voraus zu beurteilen und Positionen schnell nach Bestätigungen zu etablieren, was sie für Momentum-Trader sehr geeignet macht. Diese Strategie hat den Vorteil, Umkehrmöglichkeiten zu identifizieren, erfordert aber immer noch eine angemessene Risikokontrolle, um riesige Verluste durch falsche Ausbrüche zu vermeiden. Mit weiteren Optimierungen kann sie eine ausgewogene Strategie in Bezug auf das Risiko-Rendite-Verhältnis werden.


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



Mehr