Chiến lược trung bình động xu hướng dao động là một hệ thống theo xu hướng sử dụng trung bình động dài hạn để xác định hướng xu hướng kết hợp với phạm vi trung bình thực để lọc ra các giả mạo và hạn chế giảm tổng thể. Nó sử dụng trung bình động biểu số để xác định hướng xu hướng và sử dụng phạm vi trung bình thực để phát hiện nếu đó là một sự đột phá sai. Điều này có thể lọc hiệu quả các thị trường dao động và giảm giảm tổng thể chiến lược.
Chiến lược được thiết kế dựa trên các nguyên tắc sau:
Chiến lược có những lợi thế sau:
Chiến lược này cũng có một số rủi ro tiềm ẩn:
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Nhìn chung, Chiến lược xu hướng chuyển động trung bình là một chiến lược rất đơn giản và thực tế theo xu hướng. Nó cũng có kiểm soát rủi ro tốt. Mặc dù chiến lược không xem xét nhiều yếu tố, nhưng vẫn cần kiểm tra chi tiết và tối ưu hóa các tham số và phương pháp dừng lỗ. Tuy nhiên, logic giao dịch đơn giản và cài đặt tham số làm cho nó có thể áp dụng rộng rãi cho các sản phẩm khác nhau, đặc biệt phù hợp với giao dịch tiền điện tử như Bitcoin.
/*backtest start: 2023-01-28 00:00:00 end: 2024-02-03 00:00:00 period: 1d basePeriod: 1h 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/ // © Inkedlau //@version=5 strategy('Swing Trend Strategy', overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, commission_value=0.1) use_short = input.bool(false, 'Open Short Positions?') exit_type = input.bool(true, 'Exit trade on Moving Average Cross?') src = input.source(close, 'Source') len = input.int(200, 'Trend Length') ma_type = input.string('ema', 'Moving Average Type', options=['sma', 'ema', 'rma', 'wma', 'vwma'], tooltip='Select the type of Moving Average to use to calculate the Trend') atr_multiplier = input.float(1., 'ATR Threshold', step=0.5, tooltip='Filter the ranging market using the Average True Range') // ----------------------- DESCRIPTION ----------------------- // THIS SCRIPT IS A TREND FOLLOWING SYSTEM THAT USES A COMBINATION OF MOVING AVERAGE AND AVERAGE TRUE RANGE // TO SPOT THE TRENDS AND ENTER THE MARKET ACCODINGLY. // THE MARKET IS CONSIDERED IN AN UPTREND WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE + THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS // THE MARKET IS CONSIDERED IN AN DOWNTREND WHEN THE PRICE CLOSES BLOW THE MOVING AVERAGE - THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS // BY DEFAULT, THE STRATEGY WILL ENTER LONG WHEN AN UPTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES BELOW THE MOVING AVERAGE // THE STRATEGY WILL ENTER SHORT WHEN A DOWNTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE // ------------------ INDICATORS CALCULATION------------------ my_ma()=> ma = close if ma_type == 'sma' ma := ta.sma(src, len) if ma_type == 'ema' ma := ta.ema(src, len) if ma_type == 'rma' ma := ta.rma(src, len) if ma_type == 'wma' ma := ta.wma(src, len) if ma_type == 'vwma' ma := ta.vwma(src, len) ma trend = my_ma() atr = ta.atr(10) uptrend = trend + atr * atr_multiplier downtrend = trend - atr * atr_multiplier // ---------------- ENTRY AND EXIT CONDITIONS ---------------- open_long = strategy.position_size == 0 and src > uptrend close_long = exit_type ? strategy.position_size > 0 and src < trend : strategy.position_size > 0 and src < downtrend open_short = use_short and strategy.position_size == 0 and src < downtrend close_short = exit_type ? strategy.position_size < 0 and src > trend : strategy.position_size < 0 and src > uptrend strategy.entry('long', strategy.long, when=open_long) strategy.close('long', when=close_long) strategy.entry('short', strategy.short, when=open_short) strategy.close('short', when=close_short) // ------------------ PLOTTING AND COLORING ------------------ tcolor = src > uptrend ? color.green : src < downtrend ? color.red : na ptrend = plot(trend, color=color.blue, linewidth=1) puptrend = plot(uptrend, color=color.green, linewidth=1) pdowntrend = plot(downtrend, color=color.red, linewidth=1) pclose = plot(close, color=na) fill(puptrend, pclose, color=close > uptrend ? color.green : na, transp = 90) fill(pdowntrend, pclose, color=close < downtrend ? color.red : na, transp = 90)