The G-Channel Trend Detection Strategy is a quantitative trading strategy based on the G-Channel indicator. The strategy calculates the upper and lower extremities of the G-Channel and determines the current market trend based on the crossover of the price and the G-Channel moving average, generating buy and sell signals accordingly. Additionally, the strategy sets take profit and stop loss conditions to control risk.
The G-Channel Trend Detection Strategy is a simple quantitative trading strategy based on the G-Channel indicator that generates buy and sell signals by capturing market trends and sets take profit and stop loss conditions to control risk. The strategy logic is clear and easy to implement, making it suitable for beginners in quantitative trading to learn. However, the strategy may generate more false signals in fluctuating markets, and the take profit and stop loss percentages need to be adjusted according to market characteristics. Moreover, it does not consider the specifics of the traded asset. In the future, the strategy can be optimized by introducing other technical indicators, dynamically adjusting take profit and stop loss percentages, and adding risk control modules based on the characteristics of the traded asset to improve the stability and profitability of the strategy.
//@version=5 // Full credit to AlexGrover: https://www.tradingview.com/script/fIvlS64B-G-Channels-Efficient-Calculation-Of-Upper-Lower-Extremities/ strategy("G-Channel Trend Detection Strategy", shorttitle="G-Trend", overlay=true) // Input parameters length = input.int(100, title="Length") src = input(close, title="Source") take_profit_percent = input.float(5.0, title="Take Profit (%)") stop_loss_percent = input.float(2.0, title="Stop Loss (%)") showcross = input.bool(true, title="Show Cross") // Initialize variables var float a = na var float b = na // Calculate a and b a := math.max(src, nz(a[1])) - (nz(a[1]) - nz(b[1])) / length b := math.min(src, nz(b[1])) + (nz(a[1]) - nz(b[1])) / length // Calculate average avg = (a + b) / 2 // Determine trend and color crossup = ta.crossunder(b, close) crossdn = ta.crossunder(a, close) bullish = ta.barssince(crossdn) <= ta.barssince(crossup) c = bullish ? color.lime : color.red // Plotting p1 = plot(avg, "Average", color=c, linewidth=1) p2 = plot(close, "Close price", color=c, linewidth=1) fill(p1, p2, c) // Generate buy and sell signals buy_signal = showcross and bullish and not bullish[1] sell_signal = showcross and not bullish and bullish[1] // Plot buy and sell signals on chart plotshape(buy_signal ? avg : na, location=location.belowbar, style=shape.labeldown, color=color.new(color.lime, 0), size=size.tiny, text="Buy", textcolor=color.white, offset=-1) plotshape(sell_signal ? avg : na, location=location.abovebar, style=shape.labelup, color=color.new(color.red, 0), size=size.tiny, text="Sell", textcolor=color.white, offset=-1) // Alerts alertcondition(buy_signal, title="Buy Signal", message="Buy Signal Detected") alertcondition(sell_signal, title="Sell Signal", message="Sell Signal Detected") // Calculate take profit and stop loss levels take_profit_level = close * (1 + take_profit_percent / 100) stop_loss_level = close * (1 - stop_loss_percent / 100) // Strategy Entry and Exit if (buy_signal) strategy.entry("Buy", strategy.long) if (sell_signal) strategy.entry("Sell", strategy.short) // Define the take profit and stop loss conditions for long positions strategy.exit("Take Profit/Stop Loss", "Buy", limit=take_profit_level, stop=stop_loss_level) // Define the take profit and stop loss conditions for short positions strategy.exit("Take Profit/Stop Loss", "Sell", limit=close * (1 - take_profit_percent / 100), stop=close * (1 + stop_loss_percent / 100))