Chiến lược chéo giữa hai mức trung bình động

Tác giả:ChaoZhang, Ngày: 2023-10-07 15:18:44
Tags:

Tổng quan

Đâ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.

Nguyên tắc

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.

Ưu điểm

  • Sử dụng MA chéo để xác định sự thay đổi xu hướng là một kỹ thuật đơn giản và hiệu quả
  • Các MA có thể lọc tiếng ồn thị trường một cách hiệu quả và tránh những sự cố
  • Điều chỉnh thời gian MA nhanh và chậm có thể thích nghi với các điều kiện thị trường khác nhau
  • Nhìn thấy các tín hiệu xu hướng và điểm chuyển hướng
  • Dễ hiểu, điều chỉnh tham số linh hoạt

Rủi ro

  • Crossover hai MA có thời gian trễ và có thể bỏ lỡ các điểm rẽ
  • Không phù hợp với các thị trường phạm vi, có thể tạo ra nhiều tín hiệu sai hơn
  • Các thiết lập thời gian MA không chính xác có thể gây ra quá nhạy cảm hoặc chậm.
  • Cần các chỉ số khác để xác nhận bối cảnh và thời gian xu hướng

Hướng dẫn tối ưu hóa

  • Đánh giá lợi nhuận của các thông số giai đoạn MA khác nhau và chọn các thông số tối ưu
  • Thêm các bộ lọc khác như các chỉ số kênh, các mẫu nến vv
  • Kết hợp các chỉ số biến động để tối ưu hóa dừng lỗ và lấy lợi nhuận
  • Sử dụng thuật toán học máy để tự động tối ưu hóa các thông số và quy tắc
  • Thêm các mô-đun giao dịch thuật toán để thực thi tự động lệnh

Tóm lại

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)

Thêm nữa