Đây là một chiến lược giao dịch dựa trên chéo trung bình động kép. Nó sử dụng sự tương tác giữa trung bình động nhanh và chậm để xác định xu hướng thị trường và tạo ra tín hiệu giao dịch. Khi MA nhanh vượt qua trên MA chậm, một tín hiệu mua được tạo ra. Khi MA nhanh vượt dưới MA chậm, một tín hiệu bán được tạo ra.
Chiến lược này chủ yếu sử dụng khả năng theo dõi xu hướng của đường trung bình động. Đường trung bình động là giá trung bình được tính toán trong một khoảng thời gian nhất định dựa trên giá đóng cửa lịch sử. Chúng có thể làm mịn các biến động nhỏ trong ngày và phản ánh xu hướng khung thời gian lớn hơn. MA nhanh sử dụng một khoảng thời gian ngắn hơn và có thể phản ứng nhanh hơn với những thay đổi giá, trong khi MA chậm sử dụng một khoảng thời gian dài hơn và đại diện cho xu hướng dài hạn.
Chiến lược này tạo ra các tín hiệu giao dịch bằng cách thiết lập các đường trung bình động của các chiều dài chu kỳ khác nhau và sử dụng các chéo chéo của chúng. Khi MA chu kỳ ngắn vượt qua trên MA chu kỳ dài, nó báo hiệu sự cải thiện động lực ngắn hạn và tạo ra tín hiệu mua. Khi MA chu kỳ ngắn vượt qua dưới MA chu kỳ dài, nó chỉ ra xu hướng suy yếu ngắn hạn và tạo ra tín hiệu bán. Mã chiến lược vẽ các MA với chức năng biểu đồ, sử dụng biến xu hướng để xác định các chéo MA, và xuất tín hiệu mua và bán khi xảy ra chéo chéo.
Chiến lược giao thoa MA kép sử dụng khả năng theo dõi xu hướng của các đường trung bình chuyển động và tạo ra các tín hiệu dựa trên các đường giao thoa của chúng. Mặc dù đơn giản và trực quan, nó cũng có một số lỗ hổng. Chúng có thể được khắc phục bằng cách điều chỉnh tham số, thêm xác nhận, tối ưu hóa thuật toán vv để biến nó thành một hệ thống mạnh mẽ. Nhìn chung, chiến lược MA kép là một chiến lược theo xu hướng rất cổ điển và dễ sử dụng.
/*backtest start: 2023-01-01 00:00:00 end: 2023-04-14 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/ // © KivancOzbilgic //@version=4 strategy("pomila", overlay=true) Periods = input(title="ATR Period", type=input.integer, defval=10) src = input(hl2, title="Source") Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false) highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true) barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true) atr2 = sma(tr, Periods) atr= changeATR ? atr(Periods) : atr2 up=src-(Multiplier*atr) up1 = nz(up[1],up) up := close[1] > up1 ? max(up,up1) : up dn=src+(Multiplier*atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) buySignal = trend == 1 and trend[1] == -1 plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0) plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0) dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) sellSignal = trend == -1 and trend[1] == 1 plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0) plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0) longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor) fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor) FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 999) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 999) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false longCondition = buySignal if (longCondition) strategy.entry("BUY", strategy.long, when = window()) shortCondition = sellSignal if (shortCondition) strategy.entry("SELL", strategy.short, when = window()) buy1= barssince(buySignal) sell1 = barssince(sellSignal) color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na barcolor(barcoloring ? color1 : na)