Diese Strategie kombiniert mehrere exponentielle gleitende Durchschnitte (EMAs), den Relative Strength Index (RSI) und eine Standardabweichungs-basierte Ausstiegsbedingung, um potenzielle Kauf- und Verkaufsmöglichkeiten zu identifizieren. Sie verwendet kurzfristige (6, 8, 12 Tage), mittelfristige (55 Tage) und langfristige (150, 200, 250 Tage) EMAs, um die Richtung und Stärke der Markttrends zu analysieren. Der RSI, mit konfigurierbaren Kauf (30) und Verkauf (70) Schwellen, wird verwendet, um die Dynamik zu bewerten und überkaufte oder überverkaufte Bedingungen zu identifizieren. Die Strategie verfügt auch über einen einzigartigen Ausstiegsmechanismus, der ausgelöst wird, wenn der Schlusskurs einen konfigurierbaren Standardabweichungsbereich (Standard 0.5) von der 12-Tage-EMA erreicht, was eine Methode zum Schutz von Gewinnen oder zur Minimierung von Verlusten bietet.
Dieser Artikel schlägt eine Kerzenhöhen-Breakout-Handelsstrategie vor, die auf mehreren gleitenden Durchschnitten, RSI und einem Standardabweichungsausstieg basiert. Die Strategie analysiert den Markt sowohl aus Trend- als auch aus Momentumdimensionen, während ein einzigartiger Standardabweichungsausstiegsmechanismus zur Erfassung von Trendchancen und zum Risikomanagement verwendet wird. Die Strategielogik ist klar, streng und die Codeimplementierung präzise und effizient. Mit der richtigen Optimierung hat diese Strategie das Potenzial, zu einer robusten Intraday-Mittel- bis Hochfrequenz-Handelsstrategie zu werden. Allerdings ist es wichtig zu beachten, dass jede Strategie ihre Grenzen hat und eine blinde Nutzung Risiken einführen kann.
/*backtest start: 2023-03-22 00:00:00 end: 2024-03-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Candle Height Breakout with Configurable Exit and Signal Control", shorttitle="CHB Single Signal", overlay=true) // Input parameters for EMA filter and its length useEmaFilter = input.bool(true, "Use EMA Filter", group="Entry Conditions") emaFilterLength = input.int(55, "EMA Filter Length", minval=1, group="Entry Conditions") candleCount = input.int(4, "SamG Configurable Candle Count for Entry", minval=3, maxval=4, step=1, group="Entry Conditions") exitEmaLength = input.int(12, "Exit EMA Length", minval=1, group="Exit Conditions", defval=12) exitStdDevMultiplier = input.float(0.5, "Exit Std Dev Multiplier", minval=0.1, maxval=2.0, step=0.1, group="Exit Conditions") // State variables to track if we are in a long or short position var bool inLong = false var bool inShort = false // Calculating EMAs with fixed periods for visual reference ema6 = ta.ema(close, 6) ema8 = ta.ema(close, 8) ema12 = ta.ema(close, 12) ema55 = ta.ema(close, 55) ema100 = ta.ema(close, 100) ema150 = ta.ema(close, 150) ema200 = ta.ema(close, 200) emaFilter = ta.ema(close, emaFilterLength) exitEma = ta.ema(close, exitEmaLength) // Plotting EMAs plot(ema6, "EMA 6", color=color.red) plot(ema8, "EMA 8", color=color.orange) plot(ema12, "EMA 12", color=color.yellow) plot(ema55, "EMA 55", color=color.green) plot(ema100, "EMA 100", color=color.blue) plot(ema150, "EMA 150", color=color.purple) plot(ema200, "EMA 200", color=color.fuchsia) plot(emaFilter, "EMA Filter", color=color.black) plot(exitEma, "Exit EMA", color=color.gray) // Calculating the highest and lowest of the last N candles based on user input highestOfN = ta.highest(high[1], candleCount) lowestOfN = ta.lowest(low[1], candleCount) // Entry Conditions with EMA Filter longEntryCondition = not inLong and not inShort and (close > highestOfN) and (not useEmaFilter or (useEmaFilter and close > emaFilter)) shortEntryCondition = not inLong and not inShort and (close < lowestOfN) and (not useEmaFilter or (useEmaFilter and close < emaFilter)) // Update position state on entry if (longEntryCondition) strategy.entry("Buy", strategy.long, comment="B") inLong := true inShort := false if (shortEntryCondition) strategy.entry("Sell", strategy.short, comment="S") inLong := false inShort := true // Exit Conditions based on configurable EMA and Std Dev Multiplier smaForExit = ta.sma(close, exitEmaLength) upperExitBand = smaForExit + exitStdDevMultiplier * ta.stdev(close, exitEmaLength) lowerExitBand = smaForExit - exitStdDevMultiplier * ta.stdev(close, exitEmaLength) exitConditionLong = inLong and (close < upperExitBand or close < exitEma) exitConditionShort = inShort and (close > lowerExitBand or close > exitEma) // Strategy exits if (exitConditionLong) strategy.close("Buy", comment="Exit") inLong := false if (exitConditionShort) strategy.close("Sell", comment="Exit") inShort := false // Visualizing entry and exit points plotshape(series=longEntryCondition, style=shape.labelup, location=location.belowbar, color=color.green, size=size.tiny, title="Buy Signal", text="B") plotshape(series=shortEntryCondition, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.tiny, title="Sell Signal", text="S")