// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © EmreKb //@version=6 strategy("Supertrend & TrendAlert", overlay=false) trend_alert_group = "Trend Alert" trend_alert_res_lt_1 = input.timeframe("120", "LT 1", inline="1", group=trend_alert_group) trend_alert_res_mt_1 = input.timeframe("1", "MT 1", inline="1", group=trend_alert_group) trend_alert_res_lt_2 = input.timeframe("60", "LT 2", inline="2", group=trend_alert_group) trend_alert_res_mt_2 = input.timeframe("1", "MT 2", inline="2", group=trend_alert_group) trend_alert_res_lt_3 = input.timeframe("30", "LT 3", inline="3", group=trend_alert_group) trend_alert_res_mt_3 = input.timeframe("1", "MT 3", inline="3", group=trend_alert_group) trend_alert_res_lt_4 = input.timeframe("15", "LT 4", inline="4", group=trend_alert_group) trend_alert_res_mt_4 = input.timeframe("1", "MT 4", inline="4", group=trend_alert_group) supertrend_group = "Supertrend" supertrend_atr_length = input.int(7, "ATR", group=supertrend_group) supertrend_atr_mult = input.float(6.0, "Factor", group=supertrend_group) trendalert_delay_count = input.int(4, "Supertrend Delay Count") position_management_group = "Position Management" account_balance = input.float(1000, "Account Balance", minval=0, group=position_management_group) risk_percent = input.float(1, "Risk Percentage", minval=0, maxval=100, group=position_management_group) rr_ratio = input.float(2.5, "R:R Ratio", minval=0, group=position_management_group) direction_change_exit = input.bool(true, "Direction Change Exit", "Exit when direction changed long to short or short to long", group=position_management_group) risk_amount = account_balance * risk_percent / 100 TrendAlert(tfL, tfM) => data = ticker.heikinashi(syminfo.tickerid) [LTo, LTc] = request.security(data, tfL, [open, close], lookahead=barmerge.lookahead_on) [MTo, MTc] = request.security(data, tfM, [open, close], lookahead=barmerge.lookahead_on) LTlong = LTc > LTo LTshort = LTc < LTo MTema20 = ta.ema(MTc,20) MTema20delta= ta.change(MTema20) MTlong = MTc > MTo and MTc > MTema20 and MTema20delta > 0 MTshort = MTc < MTo and MTc < MTema20 and MTema20delta < 0 Long = MTlong and LTlong Short = MTshort and LTshort Long ? 1 : Short ? -1 : 0 trend_alert_1 = TrendAlert(trend_alert_res_lt_1, trend_alert_res_mt_1) trend_alert_2 = TrendAlert(trend_alert_res_lt_2, trend_alert_res_mt_2) trend_alert_3 = TrendAlert(trend_alert_res_lt_3, trend_alert_res_mt_3) trend_alert_4 = TrendAlert(trend_alert_res_lt_4, trend_alert_res_mt_4) trend_alert_sum = trend_alert_1 + trend_alert_2 + trend_alert_3 + trend_alert_4 [supertrend, direction] = ta.supertrend(supertrend_atr_mult, supertrend_atr_length) direction_change = ta.change(direction) != 0 direction_change_since = ta.barssince(direction_change) trend_alert_long = trend_alert_sum == 4 trend_alert_short = trend_alert_sum == -4 trend_alert_long_since = ta.barssince(trend_alert_long) trend_alert_short_since = ta.barssince(trend_alert_short) long_condition = direction < 0 and trend_alert_long_since <= direction_change_since and trend_alert_long_since <= trendalert_delay_count short_condition = direction > 0 and trend_alert_short_since <= direction_change_since and trend_alert_short_since <= trendalert_delay_count plot(supertrend, "Up direction", color=direction < 0 ? color.green : color.red, style=plot.style_linebr, force_overlay=true, linewidth=2) plot(trend_alert_sum, "Trend Alert Sum", color=trend_alert_sum > 0 ? color.green : color.red, style=plot.style_columns) hline(4, "Top Limit", color.red, hline.style_dashed, 2) hline(-4, "Bottom Limit", color.red, hline.style_dashed, 2) var entry = 0.0 var tp = 0.0 var stop = 0.0 in_trade = strategy.position_size != 0 if not in_trade entry := close stop := supertrend stop_distance = math.abs(entry - stop) qty = risk_amount / stop_distance if long_condition tp := entry + stop_distance * rr_ratio strategy.entry("Long", strategy.long, qty=qty) strategy.exit("Long Exit", "Long", limit=tp, stop=stop) if short_condition tp := entry - stop_distance * rr_ratio strategy.entry("Short", strategy.short, qty=qty) strategy.exit("Short Exit", "Short", limit=tp, stop=stop) else if direction_change and direction_change_exit strategy.close_all("Direction Change Exit") in_trade := strategy.position_size != 0 p0 = plot(in_trade ? stop : na, "SL", color.new(color.red, 65), 2, plot.style_linebr, force_overlay=true) p1 = plot(in_trade ? entry : na, "EP", color.new(color.blue, 65), 2, plot.style_linebr, force_overlay=true) p2 = plot(in_trade ? tp : na, "TP", color.new(color.green, 65), 2, plot.style_linebr, force_overlay=true) // Fill between entry and stop (red) fill(p1, p0, color.new(color.red, 85), "Stop Range") // Fill between entry and tp (green) fill(p1, p2, color.new(color.green, 85), "Target Range") pos_size = strategy.position_size plotshape(pos_size > 0 and pos_size[1] == 0, "Long", shape.triangleup, location.belowbar, color.green, size=size.small, force_overlay=true) plotshape(pos_size < 0 and pos_size[1] == 0, "Short", shape.triangledown, location.abovebar, color.red, size=size.small, force_overlay=true) if in_trade and not in_trade[1] label.new(chart.point.now(entry), str.format("SL = {0}\nProfit = {1}", str.tostring(math.abs(entry - stop), format.mintick), str.tostring(math.abs(entry - tp), format.mintick)), color=color.blue, style=label.style_label_right, force_overlay=true)