Chiến lược thoát trung bình di chuyển

Tác giả:ChaoZhang, Ngày: 2023-09-26 16:18:37
Tags:

Tổng quan

Chiến lược đột phá trung bình động là một chiến lược giao dịch ngắn hạn sử dụng trung bình động để xác định các bước vào và ra.

Chiến lược logic

Lý thuyết cốt lõi dựa trên hai đường trung bình động, một đường nhanh và một đường chậm, để đo lường xu hướng của giá.

Mã cho phép người dùng thiết lập thời gian đường nhanh shortPeriod và thời gian đường chậm longPeriod thông qua các tham số đầu vào. Các giá trị của hai đường trung bình động được tính là shortSMA và longSMA.

Khi đường trung bình di chuyển nhanh vượt trên đường trung bình di chuyển chậm, nó báo hiệu một sự đột phá tăng và bước vào dài. Khi đường MA nhanh vượt dưới đường MA chậm, nó báo hiệu một sự đột phá giảm và bước vào ngắn.

Điều kiện nhập dài:

Fast MA crosses above slow MA
Fast MA > Slow MA

Điều kiện nhập cảnh ngắn:

Fast MA crosses below slow MA
Fast MA < Slow MA 

Chiến lược cũng kết hợp các thiết lập dừng lỗ, lấy lợi nhuận và kích thước vị trí để kiểm soát rủi ro.

Ưu điểm

  • Dễ sử dụng, dễ hiểu cho người mới bắt đầu
  • Trung bình di chuyển lọc ra một số tiếng ồn
  • Sự linh hoạt trong thời gian điều chỉnh chính xác MA cho các khung thời gian khác nhau
  • Định nghĩa trước stop loss và take profit

Rủi ro

  • Có khả năng thoát ra và bị chọc
  • Không lý tưởng cho các thị trường hỗn loạn giới hạn phạm vi
  • Chỉ báo chậm trễ, có thể có sự chậm trễ.
  • Không thể lọc các biến động xu hướng hiệu quả

Quản lý rủi ro:

  • Thêm bộ lọc để tránh tín hiệu sai
  • Áp dụng chiến lược khi xu hướng rõ ràng
  • Tối ưu hóa các tham số MA cho các mục nhập tốt hơn
  • Cho phép dừng rộng hơn để tránh dừng sớm

Cơ hội gia tăng

  • Tối ưu hóa các tham số MA để tìm kết hợp tốt nhất
  • Thêm các chỉ số bổ sung như kênh BOLL hoặc KD
  • Cải thiện các quy tắc thoát để tối đa hóa lợi nhuận
  • Kiểm tra độ bền trên các thiết bị khác nhau
  • Kết hợp học máy sử dụng dữ liệu lớn

Kết luận

Chiến lược breakout trung bình động rất dễ hiểu, tạo ra các tín hiệu với MAs nhanh và chậm. Nhưng nó cũng có một số lỗ hổng như phá vỡ sai và các vấn đề chậm. Với điều chỉnh tham số, bộ lọc bổ sung và các cải tiến khác, chiến lược có thể được cải thiện.


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 1h
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/
// © YohanNaftali

//@version=5

///////////////////////////////////////////////////////////////////////////////
// Heikin Ashi Candle Startegy
// ver 2021.12.29
// © YohanNaftali
// This script composed by Yohan Naftali for educational purpose only 
// Reader who will use this signal must do own research
///////////////////////////////////////////////////////////////////////////////
strategy(
     title = 'Heikin Ashi Candle Startegy Long',  
     shorttitle = 'HA Strategy Long',  
     format = format.price,
     precision = 0,
     overlay = true)

// Input
validationPeriod = input.int( 
     defval = 3, 
     title = 'Validation Period', 
     group = 'Candle')

qtyOrder = input.float(
     defval = 1.0,
     title = 'Qty', 
     group = 'Order')

maxActive = input.float(
     defval = 1.0,
     title = 'Maximum Active Open Position', 
     group = 'Order')

// Long Strategy
tpLong = input.float(
     defval = 1,
     title = "Take Profit (%)",
     minval = 0.0, 
     step = 0.1, 
     group = "Long") * 0.01

slLong = input.float(
     defval = 25,
     title = "Stop Loss (%)", 
     minval=0.0, 
     step=0.1,
     group="Long") * 0.01

trailingStopLong = input.float(
     defval = 0.2,
     title = "Trailing Stop (%)",
     minval = 0.0, 
     step = 0.1,
     group = 'Long') * 0.01

// Calculation
haTicker = ticker.heikinashi(syminfo.tickerid)
haClose = request.security(haTicker, timeframe.period, close)
haOpen = request.security(haTicker, timeframe.period, open)

// Long
limitLong = tpLong > 0.0 ? strategy.position_avg_price * (1 + tpLong) : na
stopLong = slLong > 0.0 ? strategy.position_avg_price * (1 - slLong) : na
float trailLong = 0.0
trailLong := if strategy.position_size > 0
    trailClose = close * (1 - trailLong)
    math.max(trailClose, trailLong[1])
else
    0

isGreen = true
for i = 0 to validationPeriod-1
    isGreen := isGreen and haClose[i] > haOpen[i]        
isLong = isGreen and haClose[validationPeriod] < haOpen[validationPeriod]



plot(
     limitLong,
     title = 'Limit', 
     color = color.rgb(0, 0, 255, 0), 
     style = plot.style_stepline,
     linewidth = 1)

plot(
     trailLong,
     title = 'Trailing', 
     color = color.rgb(255, 255, 0, 0), 
     style = plot.style_stepline,
     linewidth = 1)

plot(
     stopLong,
     title = 'Stop', 
     style = plot.style_stepline,
     color = color.rgb(255, 0, 0, 0), 
     linewidth = 1)

// plotshape(
//      isLong, 
//      title = 'Entry', 
//      style = shape.arrowup, 
//      location = location.belowbar, 
//      offset = 1, 
//      color = color.new(color.green, 0), 
//      text = 'Long Entry',
//      size = size.small)

// Strategy
strategy.risk.max_position_size(maxActive)
strategy.risk.allow_entry_in(strategy.direction.long)

strategy.entry(
     id = "Long", 
     direction = strategy.long, 
     qty = qtyOrder,  
     when = isLong,       
     alert_message = "LN")
if (strategy.position_size > 0)
    strategy.exit(
         id = "Long Exit",
         from_entry = "Long",
         limit = limitLong,
         stop = stopLong,
         trail_price = trailLong,
         alert_message = "LX")      

Thêm nữa