この戦略は,複数のタイムフレームとボリンジャーバンドを介してスーパートレンド指標を組み込み,トレンド方向と主要なサポート/レジスタンスレベルを特定し,波動性中にブレイクアウトで取引を行う.主に金,銀,原油などの非常に波動性の高い商品先物向けに設計されています.
カスタム パインスクリプト機能pine_supertrend()
異なる時間枠 (例えば1分と5分) のスーパートレンドを計算し,より大きな時間枠のトレンドの方向性を決定するために実装されます.
ボリンジャーバンド 上部/下部帯はチャネルとして機能する.ブレイクアウトはトレンド方向性をシグナルする.上部帯の上部を閉じるとブレイクアウトを意味する.下部帯を下部を閉じると下降を意味する.
入力信号:
長: 閉じる > 上部帯と閉じる > スーパートレンド (複数 TF) ショート: 閉じる < 下帯 AND 閉じる < スーパートレンド (複数 TF)
出口:
長い出口: 接近 < 5m スーパートレンド ショートアウト: 閉じる> 5m スーパートレンド
超トレンドとBBの間の共鳴を捉えるのです
リスク軽減
この戦略は,超トレンドとボリンジャーバンドの力を組み合わせ,クロスタイムフレーム分析とチャネルブレイクアウトを使用して高確率取引を行う.リスクを効果的に制御し,不安定なインスツメントで良い利益を生むことができる.さらなる最適化と指標組み合わせによりパフォーマンスを向上させる.
/*backtest start: 2023-10-24 00:00:00 end: 2023-11-23 00:00:00 period: 1h 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/ // © ambreshc95 //@version=5 strategy("Comodity_SPL_Strategy_01", overlay=false) // function of st // [supertrend, direction] = ta.supertrend(3, 10) // plot(direction < 0 ? supertrend : na, "Up direction", color = color.green, style=plot.style_linebr) // plot(direction > 0 ? supertrend : na, "Down direction", color = color.red, style=plot.style_linebr) // VWAP // src_vwap = input(title = "Source", defval = hlc3, group="VWAP Settings") // [_Vwap,stdv,_] = ta.vwap(src_vwap,false,1) // plot(_Vwap, title="VWAP", color = color.rgb(0, 0, 0)) // The same on Pine Script® pine_supertrend(factor, atrPeriod,len_ma) => h= ta.sma(high,len_ma) l= ta.sma(low,len_ma) hlc_3 = (h+l)/2 src = hlc_3 atr = ta.atr(atrPeriod) upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand int direction = na float superTrend = na prevSuperTrend = superTrend[1] if na(atr[1]) direction := 1 else if prevSuperTrend == prevUpperBand direction := close > upperBand ? -1 : 1 else direction := close < lowerBand ? 1 : -1 superTrend := direction == -1 ? lowerBand : upperBand [superTrend, direction] len_ma_given = input(75, title="MA_SMA_ST") [Pine_Supertrend, pineDirection] = pine_supertrend(3, 10,len_ma_given) // plot(pineDirection < 0 ? Pine_Supertrend : na, "Up direction", color = color.green, style=plot.style_linebr) // plot(pineDirection > 0 ? Pine_Supertrend : na, "Down direction", color = color.red, style=plot.style_linebr) // // Define Supertrend parameters atrLength = input(10, title="ATR Length") factor = input(3.0, title="Factor") // // Calculate Supertrend [supertrend, direction] = ta.supertrend(factor, atrLength) st_color = supertrend > close ? color.red : color.green // // Plot Supertrend // plot(supertrend, "Supertrend", st_color) // // BB Ploting length = input.int(75, minval=1) maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"]) src = input(close, title="Source") mult = input.float(2.5, minval=0.001, maxval=50, title="StdDev") ma(source, length, _type) => switch _type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) basis = ma(src, length, maType) dev = mult * ta.stdev(src, length) upper = basis + dev lower = basis - dev offset = input.int(0, "Offset", minval = -500, maxval = 500) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) // h= ta.sma(high,60) // l= ta.sma(low,60) // c= sma(close,60) // hlc_3 = (h+l)/2 // supertrend60 = request.security(syminfo.tickerid, supertrend) // // Define timeframes for signals tf1 = input(title="Timeframe 1", defval="1") tf2 = input(title="Timeframe 2",defval="5") // tf3 = input(title="Timeframe 3",defval="30") // // // Calculate Supertrend on multiple timeframes supertrend_60 = request.security(syminfo.tickerid, tf1, Pine_Supertrend) supertrend_5m = request.security(syminfo.tickerid, tf2, supertrend) // supertrend3 = request.security(syminfo.tickerid, tf3, supertrend) // // Plot Supertrend_60 st_color_60 = supertrend_60 > close ? color.rgb(210, 202, 202, 69) : color.rgb(203, 211, 203, 52) plot(supertrend_60, "Supertrend_60", st_color_60) // // Plot Supertrend_5m st_color_5m = supertrend_5m > close ? color.red : color.green plot(supertrend_5m, "Supertrend_5m", st_color_5m) ma21 = ta.sma(close,21) // rsi = ta.rsi(close,14) // rsima = ta.sma(rsi,14) // Define the Indian Standard Time (IST) offset from GMT ist_offset = 5.5 // IST is GMT+5:30 // Define the start and end times of the trading session in IST // start_time = timestamp("GMT", year, month, dayofmonth, 10, 0) + ist_offset * 60 * 60 // end_time = timestamp("GMT", year, month, dayofmonth, 14, 0) + ist_offset * 60 * 60 // Check if the current time is within the trading session // in_trading_session = timenow >= start_time and timenow <= end_time in_trading_session = not na(time(timeframe.period, "0945-1430")) // bgcolor(inSession ? color.silver : na) out_trading_session = not na(time(timeframe.period, "1515-1530")) // // // Define buy and sell signals buySignal = close>upper and close > supertrend_5m and close > supertrend_60 and close > ma21 and in_trading_session //close > supertrend and sellSignal = close<lower and close < supertrend_5m and close < supertrend_60 and close < ma21 and in_trading_session //close < supertrend and var bool long_position = false var bool long_exit = false var float long_entry_price = 0 var float short_entry_price = 0 if buySignal and not long_position // label.new(bar_index, na, yloc = yloc.belowbar, style = label.style_label_up, color = color.green, size = size.small) long_position := true strategy.entry("Buy",strategy.long) long_exit := (close < supertrend_5m) if long_position and long_exit // label.new(bar_index, na, yloc = yloc.belowbar, style = label.style_xcross, color = color.green, size = size.tiny) long_position := false strategy.exit("Exit","Buy",stop = close) var bool short_position = false var bool short_exit = false if sellSignal and not short_position // label.new(bar_index, na, yloc = yloc.abovebar, style = label.style_label_down, color = color.red, size = size.small) short_position := true strategy.entry("Sell",strategy.short) short_exit := (close > supertrend_5m) if short_position and short_exit // label.new(bar_index, na, yloc = yloc.belowbar, style = label.style_xcross, color = color.red, size = size.tiny) short_position := false strategy.exit("Exit","Sell", stop = close) if out_trading_session long_position := false strategy.exit("Exit","Buy",stop = close) short_position := false strategy.exit("Exit","Sell", stop = close) // if long_position // long_entry_price := close[1] + 50//bar_index // if short_position // short_entry_price := close[1] - 50//bar_index // if (long_position and high[1] > long_entry_price) // label.new(bar_index, na, yloc = yloc.abovebar, style = label.style_triangledown, color = color.yellow, size = size.tiny) // if (short_position and low[1] < short_entry_price) // label.new(bar_index, na, yloc = yloc.belowbar, style = label.style_triangleup, color = color.yellow, size = size.tiny)