Die Positive Bars Percentage Breakout Strategie ist eine quantitative Handelsstrategie, die auf Preisbeurteilungen basiert. Sie berechnet den Prozentsatz der Aufwärtstrendkerzen in einem bestimmten Zeitraum, um festzustellen, ob sich der Markt derzeit in einem Aufwärtstrendzustand befindet. Wenn der Prozentsatz der Aufwärtstrendkerzen höher als die vom Benutzer definierte obere Grenze ist, beurteilt die Strategie, dass sich der Markt derzeit in einem Aufwärtstrend befindet und lang geht. Wenn der Prozentsatz niedriger als die vom Benutzer definierte untere Grenze ist, beurteilt die Strategie, dass sich der Markt derzeit in einem Abwärtstrend befindet und kurz geht.
Der Kernindikator dieser Strategie ist der Prozentsatz der Aufwärtstrendkerzen. Eine Aufwärtstrendkerze öffnet sich unter dem vorherigen Tief und schließt über dem Offen, was darauf hindeutet, dass der Preis in diesem Zeitraum gestiegen ist. Die Strategie zählt die Anzahl der Aufwärtstrendkerzen in der vom Benutzer definierten Rückblicksperiode und berechnet den Prozentsatz der Aufwärtstrendkerzen unter allen Kerzen. Wenn der Prozentsatz höher als die obere Grenze ist, beurteilt die Strategie, dass der Markt in einem anhaltenden Aufwärtstrend ist und geht lang. Wenn der Prozentsatz niedriger als die untere Grenze ist, beurteilt die Strategie, dass der Markt in einem Abwärtstrend ist und geht kurz. Die Stop-Loss- und Take-Profit-Orders werden nach der vom Benutzer definierten Stop-Loss-Methode festgelegt.
Wenn der Benutzer beispielsweise die Lookback-Periode auf 20, die obere Grenze auf 70, die untere Grenze auf 30 setzt, verfolgt die Strategie die letzten 20 Kerzen. Wenn 16 von ihnen Aufwärtstrendkerzen sind, wäre der Prozentsatz 16/20=80%. Da 80% über der oberen Grenze von 70% liegt, wird die Strategie einen Long-Order ausführen. Wenn unter den letzten 20 Kerzen nur 5 Aufwärtstrendkerzen sind, dann wäre der Prozentsatz 5/20=25%. Dies ist niedriger als die untere Grenze von 30%, wird die Strategie einen Short-Order ausführen.
Die wichtigsten Vorteile dieser Strategie sind:
Die wichtigsten Risiken dieser Strategie sind:
Die Risiken können verringert werden, indem
Die wichtigsten Richtungen zur Optimierung dieser Strategie sind:
Die Positive Bars Percentage Breakout Strategie hat eine einfache und unkomplizierte Logik, um Trends zu erfassen, indem die Persistenz von Aufwärtstrends/Abwärtstrends statistisch beurteilt wird. Sie ist einfach zu verstehen und benutzerfreundlich, geeignet für Anfänger.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-04 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © ZenAndTheArtOfTrading // © TweakerID // Based on the calculations by ZenAndTheArtOfTrading, I added stop loss, take profit and reverse line codes. // The Positive Bars % calculates the number of green (positive) bars, relative to a lookback period, defined // by the user. If the percentage is low, it means that there was a bigger number of red candles in the // lookback period. The strategy goes long when the percentage is high and short when it's low, although // this logic can be reversed with positive results on different time frames. //@version=4 strategy("Positive Bars % Strat", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, commission_value=0.04, calc_on_every_tick=false, slippage=0) direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1) strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long)) /////////////////////// STRATEGY INPUTS //////////////////////////////////////// title1=input(true, "-----------------Strategy Inputs-------------------") lookback = input(title="Lookback", type=input.integer, defval=13) upperLimit = input(title="Upper Limit", type=input.integer, defval=70) lowerLimit = input(title="Lower Limit", type=input.integer, defval=30) /////////////////////// BACKTESTER ///////////////////////////////////////////// title2=input(true, "-----------------General Inputs-------------------") // Backtester General Inputs i_SL=input(true, title="Use Stop Loss and Take Profit") i_SLType=input(defval="ATR Stop", title="Type Of Stop", options=["Strategy Stop", "Swing Lo/Hi", "ATR Stop"]) i_SPL=input(defval=10, title="Swing Point Lookback") i_PercIncrement=input(defval=2, step=.1, title="Swing Point SL Perc Increment")*0.01 i_ATR = input(14, title="ATR Length") i_ATRMult = input(10, step=.1, title="ATR Multiple") i_TPRRR = input(1.6, step=.1, title="Take Profit Risk Reward Ratio") // Bought and Sold Boolean Signal bought = strategy.position_size > strategy.position_size[1] or strategy.position_size < strategy.position_size[1] // Price Action Stop and Take Profit LL=(lowest(i_SPL))*(1-i_PercIncrement) HH=(highest(i_SPL))*(1+i_PercIncrement) LL_price = valuewhen(bought, LL, 0) HH_price = valuewhen(bought, HH, 0) entry_LL_price = strategy.position_size > 0 ? LL_price : na entry_HH_price = strategy.position_size < 0 ? HH_price : na tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR // ATR Stop ATR=atr(i_ATR)*i_ATRMult ATRLong = ohlc4 - ATR ATRShort = ohlc4 + ATR ATRLongStop = valuewhen(bought, ATRLong, 0) ATRShortStop = valuewhen(bought, ATRShort, 0) LongSL_ATR_price = strategy.position_size > 0 ? ATRLongStop : na ShortSL_ATR_price = strategy.position_size < 0 ? ATRShortStop : na ATRtp=strategy.position_avg_price + (strategy.position_avg_price - LongSL_ATR_price)*i_TPRRR ATRstp=strategy.position_avg_price - (ShortSL_ATR_price - strategy.position_avg_price)*i_TPRRR // Strategy Stop float LongStop = na float ShortStop = na float StratTP = na float StratSTP = na /////////////////////// STRATEGY LOGIC ///////////////////////////////////////// //Calculations positiveBars = 0 for i = (lookback - 1) to 0 if close[i] > open[i] positiveBars := positiveBars + 1 positiveBarsPercent = (positiveBars / lookback) * 100 BUY=positiveBarsPercent >= upperLimit SELL=positiveBarsPercent <= lowerLimit //Trading Inputs DPR=input(true, "Allow Direct Position Reverse") reverse=input(false, "Reverse Trades") // Entries if reverse if not DPR strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0) strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0) else strategy.entry("long", strategy.long, when=SELL) strategy.entry("short", strategy.short, when=BUY) else if not DPR strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0) strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0) else strategy.entry("long", strategy.long, when=BUY) strategy.entry("short", strategy.short, when=SELL) SL= i_SLType == "Swing Lo/Hi" ? entry_LL_price : i_SLType == "ATR Stop" ? LongSL_ATR_price : LongStop SSL= i_SLType == "Swing Lo/Hi" ? entry_HH_price : i_SLType == "ATR Stop" ? ShortSL_ATR_price : ShortStop TP= i_SLType == "Swing Lo/Hi" ? tp : i_SLType == "ATR Stop" ? ATRtp : StratTP STP= i_SLType == "Swing Lo/Hi" ? stp : i_SLType == "ATR Stop" ? ATRstp : StratSTP strategy.exit("TP & SL", "long", limit=TP, stop=SL, when=i_SL) strategy.exit("TP & SL", "short", limit=STP, stop=SSL, when=i_SL) /////////////////////// PLOTS ////////////////////////////////////////////////// plot(i_SL and strategy.position_size > 0 ? SL : na , title='SL', style=plot.style_cross, color=color.red) plot(i_SL and strategy.position_size < 0 ? SSL : na , title='SSL', style=plot.style_cross, color=color.red) plot(i_SL and strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green) plot(i_SL and strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green) // Draw price action setup arrows plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, color=color.green, title="Bullish Setup", size=size.auto) plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, color=color.red, title="Bearish Setup", size=size.auto)