This strategy calculates the moving average and standard deviation CHANNEL of the price to form dynamic upper and lower rails, and combines the average value of the highest and lowest prices to form the middle rail, so as to judge the current trend direction. When the price breaks through the upper rail, it means long. When the price breaks through the lower rail, it means short. This implements a strategy that trades based on trend changes.
The overall idea of this strategy is clear and easy to understand. By dynamically capturing trends through Channel and generating trading signals with multiple middle rail designs, it can effectively track trend directions for trading and obtain good returns. In actual application, attention should be paid to stop loss strategies, capital management, Parameters optimization, etc., so as to obtain stable returns in the long run.
/*backtest start: 2023-09-10 00:00:00 end: 2023-10-10 00:00:00 period: 4h basePeriod: 15m 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/ // © ErdemDemir //@version=4 strategy("Lawyers Trend Pro Strategy", shorttitle="Lawyers Trend Pro Strategy", overlay=true) src = close mult = 2.0 basis = sma(src, 20) dev = mult * stdev(src, 20) upper = basis + dev lower = basis - dev offset = 0 lower2 = lowest(20) upper2 = highest(20) basis2 = avg(upper2, lower2) MB= (basis+basis2)/2 col1=close>MB col3=MB>close colorE = col1 ? color.blue : col3 ? color.red : color.yellow p3=plot(MB, color=colorE, linewidth=3) // Deternine if we are currently LONG isLong = false isLong := nz(isLong[1], false) // Determine if we are currently SHORT isShort = false isShort := nz(isShort[1], false) // Buy only if the buy signal is triggered and we are not already long buySignal = not isLong and crossover(close,MB) // Sell only if the sell signal is triggered and we are not already short sellSignal= not isShort and crossover(MB,close) if (buySignal) isLong := true isShort := false if (sellSignal) isLong := false isShort := true /// LONG strategy.entry("long", true , when = buySignal, comment="Open Long") strategy.close("long", when=sellSignal, comment = "Close Long") /// SHORT strategy.entry("short", false, when = sellSignal, comment="Open Short") strategy.close("short", when=buySignal, comment = "Close Short")template: strategy.tpl:40:21: executing "strategy.tpl" at <.api.GetStrategyListByName>: wrong number of args for GetStrategyListByName: want 7 got 6