This strategy is a long-term holding strategy based on determining the trend direction with simple moving average lines and forming breakthrough signals with resistance and support lines. By calculating the price Pivot High and Pivot Low points, plotting the resistance and support lines, going long when the price breaks through the resistance line, and closing positions when the price breaks through the support line. This strategy is suitable for stocks with obvious trends and can obtain a good risk-reward ratio.
This strategy uses simple moving averages to determine the overall trend direction, and then uses key point breakthroughs to generate trading signals, which is a typical breakout strategy. By judging key points and trends, false breakouts can be effectively filtered out.
Risks can be reduced by optimizing parameters through live trading, and incorporating stop loss/take profit strategies.
Overall, this strategy is a typical breakout strategy that relies on parameter optimization and liquidity, suitable for trend traders. As a reference framework, it can be extended according to actual needs by adding mechanisms like stop loss/take profit, signal filtering to reduce risk and improve stability.
/*backtest start: 2023-02-14 00:00:00 end: 2024-02-20 00:00:00 period: 1d basePeriod: 1h 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/ // © CheatCode1 //@version=5 strategy("Quantitative Trend Strategy- Uptrend long", 'Steady Uptrend Strategy', overlay=true, initial_capital = 1500, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.01, default_qty_type = strategy.percent_of_equity) length = input.int(20, minval=1) src = input(close, title="Source") basis = ta.sma(src, length) offset = input.int(0, "Offset", minval = -500, maxval = 500) plot(basis, "Basis", color=#FF6D00, offset = offset) inp1 = input.int(46, 'LookbackLeft') inp2 = input.int(32, 'LookbackRight') l1 = ta.pivothigh(close, inp1, inp2) S1 = ta.pivotlow(close, inp1, inp2) // plot(l1, 'Pivothigh', color.red, 1) // // plot(S1, 'Pivot Low', color.red) l1V = ta.valuewhen(l1, close, 0) S1V = ta.valuewhen(S1, close, 0) Plotl1 = not na(l1) ? l1V : na PlotS1 = not na(S1) ? S1V : na plot(Plotl1, 'Resistance', color.green, 1, plot.style_stepline, true) plot(PlotS1, 'Support', color.red, 1, plot.style_stepline, true) Priceforlong = close > l1V ? true : na Priceforshort = close < S1V ? true : na plotshape(Priceforlong ? high : na, 'p', shape.arrowup, location.abovebar, color.green, size = size.small) plotshape(Priceforshort ? low : na, 's', shape.arrowdown, location.belowbar, color.red, size = size.small) vol = volume volma = ta.sma(vol, 20) Plotl1C = ta.valuewhen(na(Plotl1), l1V, 0) PlotS1C = ta.valuewhen(na(PlotS1), S1V, 0) //Strategy Execution volc = volume > volma Lc1 = Priceforlong Sc1 = Priceforshort sL = Plotl1 < PlotS1 ? close : na sS = PlotS1 > Plotl1 ? close : na if Lc1 strategy.entry('Long', strategy.long) // if Sc1 and C2 // strategy.entry('Short', strategy.short) if Priceforshort strategy.cancel('Long') if Priceforlong strategy.cancel('Short') // Stp1 = ta.crossover(k, d) // Ltp1 = ta.crossunder(k, d) // Ltp = d > 70 ? Ltp1 : na // Stp = d < 30 ? Stp1 : na if strategy.openprofit >= 0 and sL strategy.close('Long') if strategy.openprofit >= 0 and sS strategy.close('Short') takeP = input.float(2, title='Take Profit') / 100 stopL = input.float(1.75, title='Stop Loss') / 100 // // Pre Directionality Stop_L = strategy.position_avg_price * (1 - stopL) Stop_S = strategy.position_avg_price * (1 + stopL) Take_S= strategy.position_avg_price * (1 - takeP) Take_L = strategy.position_avg_price * (1 + takeP) // sL = Plotl1 < PlotS1 ? close : na // sS = PlotS1 < Plotl1 ? close : na // //Post Excecution if strategy.position_size > 0 and not (Lc1) strategy.exit("Close Long", stop = Stop_L, limit = Take_L) if strategy.position_size < 0 and not (Sc1) strategy.exit("Close Short", stop = Stop_S, limit = Take_S)