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.
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.
Phòng ngừa rủi ro:
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.
/*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")