Strategi ini adalah sistem dagangan berdasarkan analisis pelbagai jangka masa, menggabungkan Bollinger Bands, Hull Moving Average, dan Weighted Moving Average untuk menjana isyarat dagangan. Strategi ini beroperasi terutamanya pada jangka masa 1 jam sambil mengintegrasikan data pasaran dari tempoh 5 minit, 1 jam, dan 3 jam. Ia menggunakan pelbagai penunjuk teknikal untuk mengesahkan peluang dagangan dan melaksanakan mekanisme berhenti rugi dan mengambil keuntungan yang dinamik, menyesuaikan saiz kedudukan secara automatik berdasarkan ekuiti akaun untuk kawalan risiko yang berkesan.
Logik terasnya adalah berdasarkan pengesahan silang beberapa penunjuk teknikal. Strategi ini memantau hubungan harga dengan pelbagai purata bergerak dalam beberapa jangka masa, termasuk VWMA 5 minit, VWMA 1 jam, dan HMA 3 jam. Isyarat panjang dihasilkan apabila harga melanggar ambang atas sementara berada di atas semua penunjuk jangka masa; sebaliknya, isyarat pendek berlaku apabila harga melanggar ambang bawah sementara berada di bawah semua penunjuk. Strategi ini menggabungkan pengiraan penyimpangan untuk menetapkan ambang masuk dan keluar dinamik, meningkatkan fleksibiliti perdagangan.
Strategi ini membina sistem perdagangan yang agak lengkap melalui analisis pelbagai jangka masa dan pelbagai penunjuk teknikal. Kekuatannya terletak pada kebolehpercayaan isyarat dan pengurusan risiko yang berkesan, walaupun ia menghadapi cabaran dengan kelewatan isyarat dan pengoptimuman parameter. Melalui peningkatan dan pengoptimuman yang berterusan, strategi menunjukkan potensi untuk mengekalkan prestasi yang stabil di pelbagai keadaan pasaran.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-28 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("1H- 280, 2.7", overlay=true) // Fetch the indicator values from different timeframes vwma5 = request.security(syminfo.tickerid, "5", ta.wma(close, 233), lookahead = barmerge.lookahead_off) vwma_hourly = request.security(syminfo.tickerid, "60", ta.wma(close, 89), lookahead = barmerge.lookahead_off) hullma155_3h = request.security(syminfo.tickerid, "180", ta.hma(close, 155), lookahead = barmerge.lookahead_off) // Calculate the deviation value deviation = close * 0.032 // Initialize the signal variables var float signalLine = na var color lineColor = na // Long Entry Conditions longCondition_5min = close > vwma5 longCondition_hourly = close > vwma_hourly longCondition_3h = close > hullma155_3h // Short Entry Conditions shortCondition_5min = close < vwma5 shortCondition_hourly = close < vwma_hourly shortCondition_3h = close < hullma155_3h // Long Entry if longCondition_5min and longCondition_hourly and longCondition_3h signalLine := close + deviation lineColor := color.rgb(0, 255, 0, 1) // Short Entry if shortCondition_5min and shortCondition_hourly and shortCondition_3h signalLine := close - deviation lineColor := color.rgb(255, 0, 0, 1) // Plotting the connecting line plot(signalLine, title="Signal Line", color=lineColor, linewidth=1, style=plot.style_line) // Colorize the signal line bgcolor(signalLine > close ? color.rgb(0, 255, 0, 99) : color.rgb(255, 0, 0, 99), transp=90) // Strategy settings useTPSL = input(true, "Use TP/SL for closing long positions?") useDownbreakOutbreak = input(false, "Use Downbreak and Outbreak for closing positions?") useM7FClosing = input(false, "Use M7F Signal for closing positions?") length1 = input.int(280, minval=1) src = input(close, title="Source") mult = input.float(2.7, minval=0.001, maxval=50, title="StdDev") basis = ta.vwma(src, length1) dev = mult * ta.stdev(src, length1) upper = basis + dev lower = basis - dev offset = input.int(0, "Offset", minval = -500, maxval = 500) length2 = input.int(55, minval=1) src2 = input(close, title="Source") hullma = ta.wma(2 * ta.wma(src2, length2 / 2) - ta.wma(src2, length2), math.floor(math.sqrt(length2))) hullmacrosslower = ta.crossover(hullma, lower) hullmacrossupper = ta.crossunder(hullma, upper) breakout = ta.crossover(ohlc4, upper) breakdown = ta.crossunder(ohlc4, upper) outbreak = ta.crossover(ohlc4, lower) downbreak = ta.crossunder(ohlc4, lower) // Calculate position size and leverage margin_pct = 1 leverage = 1 position_size = strategy.equity * margin_pct qty = position_size / close / leverage // Define take profit and stop loss levels take_profit = 0.14 stop_loss = 0.06 // Opening a long position if breakout strategy.entry("Long", strategy.long, qty, limit=close*(1+take_profit), stop=close*(1-stop_loss)) // Opening a short position if downbreak strategy.entry("Short", strategy.short, qty, limit=close*(1-take_profit), stop=close*(1+stop_loss)) // Closing positions based on chosen method if useTPSL // Using TP/SL for closing long positions if strategy.position_size > 0 and breakdown strategy.close("Long", comment="Breakdown") else if useDownbreakOutbreak // Using Downbreak and Outbreak for closing positions if strategy.position_size > 0 and (breakdown or downbreak) strategy.close("Long", comment="Breakdown") if strategy.position_size < 0 and (outbreak or downbreak) strategy.close("Short", comment="Outbreak") else if useM7FClosing // Using M7F Signal for closing positions if strategy.position_size > 0 and (signalLine < close) strategy.close("Long", comment="M7F Signal") if strategy.position_size < 0 and (signalLine > close) strategy.close("Short", comment="M7F Signal") // Plotting entry signals plotshape(hullmacrosslower, title="High Bear Volatility", style=shape.arrowup, text="^^^^^", color=color.rgb(75, 202, 79), location=location.belowbar) plotshape(hullmacrossupper, title="High Bull Volatility", style=shape.arrowdown, text="-----", color=color.rgb(215, 72, 72), location=location.abovebar) plotshape(breakout ? 1 : na, title="Breakout", style=shape.arrowup, text="", color=color.rgb(75, 202, 79), location=location.belowbar, size=size.tiny) plotshape(breakdown ? 1 : na, title="Breakdown", style=shape.arrowdown, text="", color=color.rgb(201, 71, 71), location=location.abovebar, size=size.tiny) plotshape(outbreak ? 1 : na, title="Outbreak", style=shape.arrowup, text="", color=color.rgb(0, 110, 255), location=location.belowbar, size=size.tiny) plotshape(downbreak ? 1 : na, title="Downbreak", style=shape.arrowdown, text="", color=color.rgb(255, 111, 0), location=location.abovebar, size=size.tiny)