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.
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.
Quản lý rủi ro:
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")