Chiến lược đột phá đường trung bình động


Ngày tạo: 2023-09-26 16:18:37 sửa đổi lần cuối: 2023-09-26 16:18:37
sao chép: 0 Số nhấp chuột: 884
1
tập trung vào
1617
Người theo dõi

Tổng quan

Chiến lược phá vỡ đường trung bình là một chiến lược giao dịch đường ngắn sử dụng đường trung bình di chuyển để đưa ra phán đoán. Chiến lược này được thực hiện bằng cách thiết lập chiều dài đường trung bình và mua và bán khi đường trung bình bị phá vỡ. Nó được đặc trưng bởi hoạt động đơn giản và dễ nắm bắt.

Nguyên tắc chiến lược

Chiến lược này chủ yếu sử dụng hai đường trung bình di chuyển, đường nhanh và đường chậm, để xác định xu hướng của giá. Dòng nhanh có chu kỳ ngắn, nhạy cảm với phản ứng; Dòng chậm có chu kỳ dài, phản ứng đều đặn.

Mã định nghĩa chu kỳ đường nhanh shortPeriod và chu kỳ đường chậm longPeriod bằng cách đặt tham số đầu vào. Sau đó tính giá trị của hai đường trung bình shortSMA và longSMA.

Khi đường trung bình ngắn hạn từ dưới lên phá vỡ đường trung bình dài hạn, cho thấy xu hướng giá từ giảm xuống, làm nhiều; khi đường trung bình ngắn hạn từ trên xuống phá vỡ đường trung bình dài hạn, cho thấy xu hướng giá từ giảm xuống, làm trống.

Các điều kiện để tham gia vào một vị trí đa vị trí:

快线由下向上突破慢线
快线>慢线

Các điều kiện để tham gia vào các vị trí bán khống:

快线由上向下跌破慢线  
快线<慢线

Ngoài ra, chiến lược cũng đặt các tham số như Stop Loss, Stop Loss, và Amount để kiểm soát rủi ro.

Lợi thế chiến lược

  • Dễ sử dụng, dễ nắm bắt và phù hợp với người mới bắt đầu
  • Dòng trung bình có khả năng lọc xu hướng, có thể lọc một phần tiếng ồn
  • Có thể điều chỉnh linh hoạt chu kỳ trung tuyến để thích ứng với các hoạt động chu kỳ khác nhau
  • Có thể đặt trước điểm dừng lỗ, kiểm soát rủi ro

Rủi ro chiến lược

  • Dễ bị đột phá giả tạo, dẫn đến tín hiệu sai
  • Không phù hợp với thị trường biến động lớn, nên chọn khi xu hướng rõ ràng
  • Hệ thống đường trung bình chậm trễ, thời gian nhập cảnh không đúng
  • Không có khả năng lọc hiệu quả sự thay đổi trong xu hướng mạnh mẽ

Phòng ngừa rủi ro:

  • Kiểm tra kết hợp các chỉ số khác để tránh các tín hiệu giả
  • Chọn sử dụng khi có xu hướng rõ ràng, không sử dụng trong thị trường biến động
  • Điều chỉnh các tham số đường trung bình để tối ưu hóa thời gian nhập cảnh
  • Giới hạn lỗ hổng thích hợp để tránh bị mắc kẹt

Hướng tối ưu hóa chiến lược

  • Tối ưu hóa các tham số hệ thống đồng tuyến để tìm kết hợp chu kỳ tốt nhất
  • Thêm các chỉ số khác, chẳng hạn như BOLL channel, KD và nhiều hơn nữa
  • Tối ưu hóa chiến lược quản lý vị trí để tối đa hóa lợi nhuận
  • Kiểm tra sức mạnh tham số của các hợp đồng khác nhau
  • Tăng các thuật toán học máy để tối ưu hóa dữ liệu lớn

Tóm tắt

Khái niệm của chiến lược phá vỡ đường trung bình rất đơn giản, dễ sử dụng và dễ dàng sử dụng. Tuy nhiên, có một số vấn đề, chẳng hạn như phá vỡ giả mạo, chậm trễ. Có thể cải thiện bằng cách tối ưu hóa tham số, kết hợp các chỉ số khác.

Mã nguồn chiến lược
/*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")