Strategi ini adalah sistem perdagangan trend-mengikuti berdasarkan Bull Market Support Band. Ini terutama menggunakan sinyal crossover antara 20-minggu Simple Moving Average (SMA) dan 21-minggu Exponential Moving Average (EMA) untuk menentukan arah tren pasar dan membuat keputusan perdagangan. Strategi ini menghasilkan sinyal panjang ketika rata-rata bergerak melintasi ke atas dan keluar ketika mereka melintasi ke bawah, bertujuan untuk menangkap peluang tren jangka menengah hingga panjang.
Logika inti dari strategi ini adalah untuk memantau posisi relatif SMA 20 minggu dan EMA 21 minggu untuk menilai tren pasar. Ketika rata-rata jangka pendek (20 minggu SMA) melanggar di atas rata-rata jangka panjang (21-minggu EMA), itu menunjukkan potensi uptrend, memicu entri posisi panjang. Ketika rata-rata jangka pendek jatuh di bawah rata-rata jangka panjang, itu menandakan potensi akhir dari uptrend, memicu penutupan posisi. Strategi ini menggunakan manajemen posisi saham, dengan komisi perdagangan 0,1% dan slippage 3 basis point.
Strategi trading bull market support band adalah sistem mengikuti tren berdasarkan teori analisis teknis klasik. Strategi ini menangkap peluang tren jangka menengah hingga panjang melalui crossover rata-rata bergerak jangka waktu mingguan, menampilkan logika yang jelas dan risiko yang dapat dikendalikan. Namun, strategi ini berkinerja buruk di berbagai pasar dan menunjukkan beberapa keterlambatan. Melalui penambahan indikator tambahan, pengoptimalan stop-loss, dan manajemen modal yang lebih baik, strategi ini memiliki ruang yang signifikan untuk optimasi.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 // © zkdev //@version=6 strategy(title='Demo GPT - Bull Market Support Band', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3) // ------------------------------------------------------------------------- // Compile-time timestamp constants for default date range // (2018-01-01 00:00:00 UTC -> 1514764800000 // 2069-12-31 23:59:59 UTC -> 3155759999000) // ------------------------------------------------------------------------- const int defaultFromDate = 1514764800000 const int defaultToDate = 3155759999000 // ------------------------------------------------------------------------- // Inputs: date range // ------------------------------------------------------------------------- fromDate = input(title='Start Date', defval=defaultFromDate) toDate = input(title='End Date', defval=defaultToDate) // ------------------------------------------------------------------------- // Indicator settings & calculations // ------------------------------------------------------------------------- smaLength = 20 emaLength = 21 source = close sma = ta.sma(source, smaLength) ema = ta.ema(source, emaLength) // ------------------------------------------------------------------------- // Fetch weekly SMA & EMA // ------------------------------------------------------------------------- outSma = request.security(syminfo.tickerid, 'W', sma, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) outEma = request.security(syminfo.tickerid, 'W', ema, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) // ------------------------------------------------------------------------- // Plot visuals (20w SMA, 21w EMA, fill in between) // ------------------------------------------------------------------------- smaPlot = plot(outSma, color=color.new(color.red, 0), title='20w SMA') emaPlot = plot(outEma, color=color.new(color.green, 0), title='21w EMA') fill(smaPlot, emaPlot, color=color.new(color.orange, 75), fillgaps=true) // ------------------------------------------------------------------------- // We evaluate crossover/crossunder on *every bar* and store the result // ------------------------------------------------------------------------- crossUp = ta.crossover(outSma, outEma) crossDown = ta.crossunder(outSma, outEma) // ------------------------------------------------------------------------- // Trade logic: only operate within chosen date range // Buy when outSma crosses above outEma; Sell (close) when outSma crosses below outEma // ------------------------------------------------------------------------- inDateRange = true if inDateRange // If we have a crossUp event on this bar, buy (go Long) if crossUp strategy.entry('Long', strategy.long) // If we have a crossDown event on this bar, sell (close Long) if crossDown strategy.close('Long')