
Chiến lược này được gọi là chiến lược theo dõi xu hướng dựa trên hệ thống đường trung bình SMA, và ý tưởng chính của nó là sử dụng đường trung bình SMA của các chiều dài tham số khác nhau để xây dựng tín hiệu giao dịch, vào vào điểm phá vỡ, đồng thời kết hợp với cơ chế kiểm soát rủi ro của hệ thống dừng lỗ.
Chiến lược này sử dụng hai đường trung bình SMA, đó là SMA1 và SMA2. Trong đó, SMA1 có chiều dài 1 và SMA2 có chiều dài 3. Bằng cách tính toán hai đường trung bình SMA này, chiến lược tạo ra tín hiệu mua khi vượt qua SMA2 trên SMA1 và tạo ra tín hiệu bán khi vượt qua SMA2 dưới SMA1 để nắm bắt xu hướng giá.
Cụ thể, chiến lược đánh giá mối quan hệ đột phá của đường trung bình SMA thông qua các hàm ta.crossover và ta.crossunder, từ đó tạo ra các biến longCondition và shortCondition bull. Khi longCondition đúng, tạo ra tín hiệu mua; khi shortCondition đúng, tạo ra tín hiệu bán. Chiến lược sẽ được thực hiện tại điểm tín hiệu, đồng thời cập nhật các biến profitAccumulated và lastTradeProfit để theo dõi thu nhập tích lũy.
Để kiểm soát rủi ro, chiến lược cũng thiết lập một cơ chế dừng lỗ dựa trên số điểm cố định. Bắt đầu từ điểm vào, nếu giá đạt đến điểm dừng lỗ được thiết lập, thì sẽ kích hoạt lệnh dừng lỗ.
Ưu điểm lớn nhất của chiến lược này là sử dụng tính năng theo dõi xu hướng của đường trung bình SMA để nắm bắt hiệu quả sự thay đổi trong xu hướng giá. So với chiến lược đường trung bình đơn, chiến lược hai đường trung bình có thể sử dụng mối quan hệ chéo giữa các đường trung bình để xác định xu hướng, do đó tạo ra tín hiệu giao dịch. Ngoài ra, chiến lược này đã thêm một cơ chế dừng lỗ, có thể kiểm soát hiệu quả tổn thất đơn.
Rủi ro chính của chiến lược này là chiến lược đường trung bình dễ tạo ra tín hiệu giả. Đường trung bình SMA có thể xuyên qua thường xuyên khi có biến động giá, dẫn đến tín hiệu giao dịch không cần thiết. Tại thời điểm này, nếu không có hiệu quả dừng lỗ, có thể tạo ra tổn thất lớn hơn.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Điều chỉnh tham số SMA để tìm kiếm kết hợp chiều dài đường trung bình tốt nhất. Các tham số tối ưu có thể được lấy bằng cách đi qua đo đạc.
Thêm các điều kiện lọc, đặt các điều kiện phá vỡ giá gần điểm giao nhau của đường trung bình, tránh tín hiệu giả.
Có thể thử nghiệm nhiều loại phương pháp dừng lỗ khác nhau, chẳng hạn như dừng di chuyển, dừng đơn treo.
Tăng khả năng kiểm soát kích thước vị trí và tối ưu hóa hiệu quả sử dụng vốn.
Chiến lược này nói chung là một chiến lược theo dõi xu hướng điển hình. Nó sử dụng mối quan hệ đột phá của đường trung bình SMA để xác định xu hướng của giá, vào điểm thay đổi xu hướng. Đồng thời, chiến lược có chức năng dừng lỗ cố định để kiểm soát rủi ro.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © cesarpieres72
//@version=5
strategy("Estrategia SMA y Ganancias Acumuladas con Stop Loss", shorttitle="SMA_Ganancias", overlay=true)
// Definir las variables de las medias móviles
sma1_length = input(1, title="SMA 1 Longitud")
sma2_length = input(3, title="SMA 2 Longitud")
// Calcular las medias móviles
sma1 = ta.sma(close, sma1_length)
sma2 = ta.sma(close, sma2_length)
// Condiciones para las señales de compra y venta
longCondition = ta.crossover(sma1, sma2)
shortCondition = ta.crossunder(sma1, sma2)
// Acumular las ganancias
var float profitAccumulated = 0.0
var float lastTradeProfit = na
if (longCondition)
strategy.entry("Buy", strategy.long)
lastTradeProfit := strategy.netprofit - (profitAccumulated + lastTradeProfit)
profitAccumulated := strategy.netprofit
if (shortCondition)
strategy.entry("Sell", strategy.short)
lastTradeProfit := strategy.netprofit - (profitAccumulated + lastTradeProfit)
profitAccumulated := strategy.netprofit
// Mostrar las señales en el gráfico
plot(sma1, color=color.blue, title="SMA 1")
plot(sma2, color=color.red, title="SMA 2")
// Añadir stop loss
stopLossPips = input(5000, title="Stop Loss (en pips)")
stopLossPrice = strategy.position_avg_price * (1 - stopLossPips * syminfo.mintick)
strategy.exit("SL", "Buy", stop=stopLossPrice)