Artikel ini akan memperkenalkan strategi perdagangan kuantitatif yang menggabungkan penunjuk tempoh parabolik dan penunjuk pita Bollinger untuk menetapkan strategi stop loss bergerak. Dengan mengira garis tempoh parabolik untuk menilai arah trend pasaran, dan kemudian menggunakan rel atas dan bawah pita Bollinger untuk menetapkan kedudukan stop loss secara dinamik, strategi merealisasikan stop loss bergerak untuk mengunci keuntungan.
Pertama, strategi ini menggunakan penunjuk parabolik untuk menilai trend pasaran semasa. Apabila harga penutupan hari ini melintasi di atas garis tempoh parabolik semalam, ia dianggap bahawa pasaran telah berbalik kepada kenaikan dan boleh pergi panjang; apabila harga penutupan hari ini melintasi di bawah garis tempoh, prospek pasaran adalah menurun dan boleh pergi pendek.
Kedua, strategi ini menggabungkan penunjuk Bollinger Band untuk menetapkan kedudukan stop loss dinamik. Rel atas Bollinger Band boleh dilihat sebagai zon overbought, dan rel bawah adalah zon oversold. Selepas pergi panjang, jika harga jatuh kembali di bawah rel bawah Bollinger Band, hentikan kerugian untuk menutup kedudukan; selepas pergi pendek, jika harga naik di atas rel atas lagi, hentikan kerugian untuk keluar.
Melalui prinsip-prinsip di atas, strategi ini merealisasikan menilai arah pasaran sambil menetapkan mekanisme stop loss dinamik untuk mengesan keuntungan. Ini membolehkan ia menangkap beberapa kenaikan dan penurunan dalam trend utama, sementara juga dapat mengunci keuntungan melalui stop loss untuk mengelakkan risiko.
Berbanding dengan strategi stop loss tradisional yang hanya menetapkan satu kedudukan stop loss tetap, strategi ini menggunakan penunjuk band Bollinger sebagai garis stop loss, supaya garis stop loss dapat bergerak dengan turun naik harga. Ini membolehkan ia mengunci lebih banyak keuntungan dalam pergerakan yang agak besar. Di samping itu, berbanding dengan menggunakan garis tempoh parabolik sahaja, strategi ini menambah penunjuk band Bollinger untuk menentukan kawasan overbought dan oversold, yang boleh lebih tepat.
Risiko utama strategi ini adalah bahawa trend penunjuk parabolik tidak kuat. Di pasaran yang berayun, harga mungkin melintasi garis tempoh parabolik beberapa kali, menyebabkan perdagangan yang menguntungkan yang kerap tetapi kecil untuk strategi. Pada ketika ini, yuran transaksi dan kos geser mungkin menyumbang sebahagian besar dan mengurangkan keuntungan strategi.
Untuk mengatasi risiko di atas, parameter boleh diselaraskan untuk meningkatkan tahap perubahan dalam garis tempoh parabola untuk mengurangkan kebarangkalian penilaian yang salah; atau mempertimbangkan menggabungkan penunjuk lain untuk menapis masa kemasukan.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Mengoptimumkan parameter penunjuk parabola untuk menyesuaikan kadar perubahan penunjuk untuk mengurangkan kebarangkalian pertimbangan yang salah
Meningkatkan penapisan penunjuk teknikal lain, seperti menambah MACD, KD untuk menentukan jenis pasaran, mengelakkan arbitrage dalam pasaran berayun
Mengoptimumkan parameter Bollinger Band untuk menyesuaikan parameter lebar jalur untuk membuat Bollinger Bands melekat lebih dekat dengan perubahan harga
Meningkatkan penunjuk jumlah, seperti jumlah dagangan, kedudukan untuk membantu menilai untuk mengelakkan pecah palsu
Menggabungkan asas saham untuk mengelakkan masalah dengan pendapatan strategi saham memegang
Strategi ini menggabungkan menilai arah trend pasaran dan kekuatan dengan penunjuk parabolik, dan kemudian menggunakan rel atas dan bawah Bollinger Bands sebagai kedudukan stop loss bergerak untuk menetapkan strategi stop loss, mencapai gabungan pengesanan trend dan kawalan risiko. Berbanding dengan strategi stop loss tetap tradisional, strategi ini dapat mencapai pulangan yang lebih tinggi dalam pergerakan yang lebih besar. Dengan mengoptimumkan parameter dan menambah penunjuk penilaian tambahan lain, kestabilan strategi dapat ditingkatkan dan perdagangan yang tidak perlu dikurangkan.
/*backtest start: 2024-01-02 00:00:00 end: 2024-02-01 00:00:00 period: 3h 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/ // © maxencetajet //@version=5 strategy("HA_RSI", overlay=true, initial_capital=1000, default_qty_type=strategy.fixed, default_qty_value=0.5, slippage=25) closeHA = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close) useDateFilter = input.bool(true, title="Filter Date Range of Backtest", group="Backtest Time Period") backtestStartDate = input(timestamp("5 June 2022"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") backtestEndDate = input(timestamp("5 July 2022"), title="End Date", group="Backtest Time Period", tooltip="This end date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") inTradeWindow = true swingHighV = input.int(10, title="Swing High", group="number of past candles") swingLowV = input.int(10, title="Swing Low", group="number of past candles") emaV = input.int(200, title="Ema Period", group="EMA") rsiV = input.int(14, title="RSI Period", group="RSI") start = input(0.02, group="Parabolic SAR") increment = input(0.02, group="Parabolic SAR") maximum = input(0.2, "Max Value", group="Parabolic SAR") ema = ta.ema(closeHA, emaV) rsi = ta.rsi(closeHA, rsiV) SAR = ta.sar(start, increment, maximum) myColor = SAR < low?color.green:color.red longcondition = closeHA > ema and rsi > 50 and closeHA[1] > SAR and closeHA[1] < SAR[1] shortcondition = closeHA < ema and rsi < 50 and closeHA[1] < SAR and closeHA[1] > SAR[1] float risk_long = na float risk_short = na float stopLoss = na float entry_price = na float takeProfit = na risk_long := risk_long[1] risk_short := risk_short[1] swingHigh = ta.highest(closeHA, swingHighV) swingLow = ta.lowest(closeHA, swingLowV) if strategy.position_size == 0 and longcondition and inTradeWindow risk_long := (close - swingLow) / close strategy.entry("long", strategy.long, comment="Buy") if strategy.position_size == 0 and shortcondition and inTradeWindow risk_short := (swingHigh - close) / close strategy.entry("short", strategy.short, comment="Sell") if strategy.position_size > 0 stopLoss := strategy.position_avg_price * (1 - risk_long) entry_price := strategy.position_avg_price strategy.exit("long exit", "long", stop = stopLoss) if strategy.position_size < 0 stopLoss := strategy.position_avg_price * (1 + risk_short) entry_price := strategy.position_avg_price strategy.exit("short exit", "short", stop = stopLoss) if closeHA[1] < SAR and close > strategy.position_avg_price strategy.close("long", comment="Exit Long") if closeHA[1] > SAR and close < strategy.position_avg_price strategy.close("short", comment="Exit Short") p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price') p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss') fill(p_sl, p_ep, color.new(color.red, transp=85)) plot(SAR, "ParabolicSAR", style=plot.style_circles, color=myColor, linewidth=1) plot(ema, color=color.white, linewidth=2, title="EMA")