Ý tưởng chính của chiến lược này là xác định hướng dài và ngắn dựa trên xu hướng giá hàng tuần. Trong xu hướng tăng, nó đi dài khi có một mô hình nến tăng. Nó kiếm lợi nhuận khi giá tăng lên mức lợi nhuận được đặt trước và dừng lỗ khi giảm xuống mức dừng lỗ được đặt trước.
Chiến lược đầu tiên xác định các điều kiện để đánh giá xu hướng hàng tuần:
isUptrend = close > close[1]
isDowntrend = close < close[1]
Nếu kết thúc hiện tại cao hơn kết thúc trước đó, nó được đánh giá là xu hướng tăng.
Sau đó, tín hiệu giao dịch trong ngày được xác định:
buyCondition = getPrevDayClose() > getPrevDayOpen() and getPrevDayOpen() > getPrevDayClose()[1] and isUptrend
Đó là, mức đóng trước đó cao hơn mức mở trước đó (cây nến tăng), và mức mở trước đó cao hơn mức đóng trước ngày trước (khoảng cách lên), và nó đang trong xu hướng tăng.
Sau khi nhập vào vị trí, lệnh dừng lỗ được thiết lập với mức đóng cửa trước trừ đi 1,382 lần cơ thể thực tế của ngày trước:
stopLoss = getPrevDayClose() - 1.382 * (getPrevDayClose() - getPrevDayOpen())
Lợi nhuận lấy được đặt theo mức đóng trước cộng với 2 lần sự khác biệt giữa đóng trước và dừng lỗ trước:
takeProfit = getPrevDayClose() + 2 * (getPrevDayClose() - stopLoss)
Điều này thực hiện chiến lược dừng lỗ và lợi nhuận.
Những lợi thế của chiến lược này bao gồm:
Ngoài ra còn có một số rủi ro:
Để kiểm soát những rủi ro này, một số tối ưu hóa có thể được xem xét:
Chiến lược cũng có thể được tối ưu hóa theo những cách sau:
Nói chung, đây là một chiến lược khá thực tế, làm nổi bật giao dịch theo xu hướng trong khi kiểm soát rủi ro. Nó có thể phục vụ như một chiến lược giao dịch trong ngày cơ bản và có thể được tối ưu hóa theo mô-đun cho các thị trường và sản phẩm khác nhau để tạo ra danh mục đầu tư giao dịch đa dạng.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-24 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Trend Following Strategy with Stop Loss and Take Profit", overlay=true) // Function to get previous day's close and open getPrevDayClose() => request.security(syminfo.tickerid, "D", close[1]) getPrevDayOpen() => request.security(syminfo.tickerid, "D", open[1]) // Determine weekly trend isUptrend = close > close[1] isDowntrend = close < close[1] // Determine daily conditions for buy buyCondition = getPrevDayClose() > getPrevDayOpen() and getPrevDayOpen() > getPrevDayClose()[1] and isUptrend // Calculate stop loss and take profit stopLoss = getPrevDayClose() - 1.382 * (getPrevDayClose() - getPrevDayOpen()) takeProfit = getPrevDayClose() + 2 * (getPrevDayClose() - stopLoss) // Strategy logic if (isUptrend) strategy.entry("Buy", strategy.long, when = buyCondition) strategy.exit("Take Profit/Stop Loss", from_entry="Buy", loss=stopLoss, profit=takeProfit) if (isDowntrend) strategy.entry("Sell", strategy.short) // Plotting the trend on the chart plotshape(series=isUptrend, title="Uptrend", color=color.green, style=shape.triangleup, location=location.abovebar) plotshape(series=isDowntrend, title="Downtrend", color=color.red, style=shape.triangledown, location=location.belowbar) // Plotting stop loss and take profit levels on the chart plot(stopLoss, color=color.red, title="Stop Loss", linewidth=2, style=plot.style_cross) plot(takeProfit, color=color.green, title="Take Profit", linewidth=2, style=plot.style_cross)