Эта стратегия использует индикатор оценки тренда ADX и скользящие средние для определения и отслеживания тенденций.
Эта стратегия всесторонне использует скользящие средние, индикаторы тренда и ключевые уровни цен для точного определения рыночных тенденций. Она определяет обратные тенденции к прорывам торговли и отслеживает новое направление тренда для краткосрочной прибыли. Дальнейшая оптимизация может улучшить производительность.
/*backtest start: 2023-12-27 00:00:00 end: 2023-12-29 23:00:00 period: 3m basePeriod: 1m 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/ // © mariocastel //@version=5 strategy("Wave Rider", overlay=true, initial_capital = 100000) session = input(defval = "1400-1500", title = "Session Time") t = not na(time(timeframe.period,session)) RR = input.float(1.5, "Risk to reward", step=0.5) var bool movetoBE = input(false, "Move to Break Even") BE = input.float(1, "Break Even at", step=0.5) vwap_mult = 0.001 * input(3, "VWAP Multiplier") aboveVWAP = ta.vwap(close) * (1 + vwap_mult) belowVWAP = ta.vwap(close) * (1 - vwap_mult) sym = input("BTC_USDT:swap", "VWAP Source") QQQaboveVWAP = request.security(sym, "3", aboveVWAP) QQQbelowVWAP = request.security(sym, "3", belowVWAP) QQQclose = request.security(sym, "3", close) ema20 = ta.ema(close, 20) ema50 = ta.ema(close, 50) ema60 = ta.ema(close, 60) ema9 = ta.ema(close, 9) opentrades = strategy.opentrades > 0 aboveEMA = close > ema60 belowEMA = close < ema60 uptrend = aboveEMA and aboveEMA[1] and aboveEMA[2] and aboveEMA[3] and aboveEMA[4] and aboveEMA[5] and aboveEMA[6] and aboveEMA[7] and aboveEMA[8] and aboveEMA[9] and aboveEMA[10] and aboveEMA[11] and aboveEMA[12] and aboveEMA[13] and aboveEMA[14] and aboveEMA[15] and aboveEMA[16] and aboveEMA[17] and aboveEMA[18] and aboveEMA[19] and aboveEMA[20] and aboveEMA[21] and aboveEMA[22] and aboveEMA[23] and aboveEMA[24] and aboveEMA[25] and aboveEMA[26] and aboveEMA[27] and aboveEMA[28] and aboveEMA[29] downtrend = belowEMA and belowEMA[1] and belowEMA[2] and belowEMA[3] and belowEMA[4] and belowEMA[5] and belowEMA[6] and belowEMA[7] and belowEMA[8] and belowEMA[9] and belowEMA[10] and belowEMA[11] and belowEMA[12] and belowEMA[13] and belowEMA[14] and belowEMA[15] and belowEMA[16] and belowEMA[17] and belowEMA[18] and belowEMA[19] and belowEMA[20] and belowEMA[21] and belowEMA[22] and belowEMA[23] and belowEMA[24] and belowEMA[25] and belowEMA[26] and belowEMA[27] and belowEMA[28] and belowEMA[29] buy = (low < ema20 and low > ema50 and close > ema9) and QQQclose > QQQaboveVWAP or (low[1] < ema20 and low[1] > ema50 and close > ema9) and QQQclose > QQQaboveVWAP and uptrend sell = (high > ema20 and high < ema50 and close < ema9) and QQQclose < QQQbelowVWAP or (high[1] > ema20 and high[1] < ema50 and close < ema9) and QQQclose < QQQbelowVWAP and downtrend var float entry = na var float sl = na var float qty = na var float tp = na var float be = na if ema20 > ema50 and ema9 > ema20 if buy and not opentrades and t and uptrend alert("Wave Rider Setup") entry := close sl := ema50 qty := 1000/(close - sl) * 1 if close - sl > syminfo.mintick*300 tp := close + ((close - sl)*1) else tp := close + ((close - sl)*RR) be := close + ((close - sl)*BE) strategy.entry("Buy", strategy.long, qty=qty) strategy.exit("Close Buy", "Buy",qty=qty, stop=sl, limit=tp) if ema20 < ema50 and ema9 < ema20 if sell and not opentrades and t and downtrend alert("Wave Rider Setup") entry := close sl := ema50 qty := 1000/(sl - close) * 1 if sl - close > syminfo.mintick*300 tp := close - ((sl - close)*1) else tp := close - ((sl - close)*RR) be := close - ((sl - close)*BE) strategy.entry("Sell", strategy.short, qty=qty) strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp) // Adjust BEs if movetoBE == true if strategy.position_size > 0 if high >= be sl := entry strategy.cancel("Close Buy") strategy.exit("Close Buy", "Buy", qty=qty, stop=sl, limit=tp) if strategy.position_size < 0 if low <= be sl := entry strategy.cancel("Close Sell") strategy.exit("Close Sell", "Sell", qty=qty, stop=sl, limit=tp) EoD_time = timestamp(year, month, dayofmonth, 15, 58, 00) EoD = time == EoD_time if EoD strategy.close_all() barcolor(color=buy ? color.rgb(191, 255, 131): na) barcolor(color=sell ? color.rgb(255, 149, 149): na) ema20plot = plot(ema20, color=color.rgb(168, 131, 131, 55)) ema50plot = plot(ema50, color=color.black) fill(ema20plot, ema50plot, color=color.rgb(168, 131, 131, 85)) plot(ema9, color=color.red) plot(ema60, color=color.purple) plot(QQQaboveVWAP) plot(QQQbelowVWAP) plotshape(uptrend, style=shape.triangleup, location=location.belowbar, color=color.black) plotshape(downtrend, style=shape.triangledown, location=location.abovebar, color=color.black)