
Đây là một chiến lược dừng chân di động nhiều bước dựa trên chỉ số Supertrend kép. Chiến lược này sử dụng hai chỉ số Supertrend khác nhau để đánh giá xu hướng thị trường và giao dịch đa chiều theo hướng xu hướng.
Chỉ số Supertrend kép: Chiến lược sử dụng hai tham số đặt các chỉ số Supertrend khác nhau để đánh giá xu hướng. Khi hai chỉ số cùng lúc hiển thị xu hướng tăng, kích hoạt nhiều tín hiệu; Khi hai chỉ số cùng lúc hiển thị xu hướng giảm, kích hoạt tín hiệu trống.
Hạn chế di chuyển nhiều bước: Chiến lược đặt 4 mục tiêu dừng có thể điều chỉnh. Mỗi mục tiêu có tỷ lệ phần trăm dừng và tỷ lệ vị trí bình yên tương ứng. Ví dụ: mục tiêu dừng đầu tiên có thể được đặt là 6% lợi nhuận và xóa 12% vị trí, mục tiêu thứ hai có thể là 12% lợi nhuận và xóa 8% vị trí, v.v..
Định hướng giao dịch linh hoạt: Chiến lược cho phép người dùng lựa chọn giao dịch chỉ nhiều, chỉ ngắn hoặc hai chiều để phù hợp với môi trường thị trường và sở thích giao dịch khác nhau.
Hạn chế động: Mặc dù không có cài đặt dừng rõ ràng trong mã, nhưng chiến lược sẽ tự động thanh toán khi chỉ số Supertrend đảo ngược, và điều này thực sự đóng vai trò của Hạn chế động.
Quản lý rủi ro được tối ưu hóa: Cơ chế dừng di động nhiều bước cải thiện đáng kể tỷ lệ lợi nhuận rủi ro của chiến lược. Bằng cách khóa lợi nhuận theo từng bước, chiến lược có thể làm giảm rủi ro rút lui trong khi vẫn giữ được không gian để tăng.
Giảm tín hiệu giả: Việc sử dụng chỉ số Supertrend kép làm giảm đáng kể tác động của tín hiệu giả, tăng độ chính xác và độ tin cậy của giao dịch.
Khả năng thích ứng: Chiến lược có thể điều chỉnh hướng giao dịch và tham số dừng tùy theo sở thích của người dùng và tình hình thị trường, phù hợp với nhiều loại giao dịch và thời gian.
Mức độ tự động hóa cao: Chiến lược hoàn toàn tự động, không cần sự can thiệp của con người từ khi vào, dừng và ra sân, làm giảm đáng kể khả năng ảnh hưởng cảm xúc và sai lầm điều hành.
Quản lý tiền linh hoạt: Bằng cách thiết lập tỷ lệ dừng khác nhau, chiến lược có thể quản lý tiền linh hoạt, đảm bảo khóa một phần lợi nhuận nhanh chóng và cho phép các vị trí còn lại tiếp tục kiếm lợi nhuận.
Tính nhạy cảm của tham số: hiệu suất của chiến lược phụ thuộc rất nhiều vào các thiết lập tham số Supertrend và Stop Stop. Các tham số không phù hợp có thể dẫn đến giao dịch quá mức hoặc bỏ lỡ cơ hội quan trọng.
Xu hướng phụ thuộc: là một chiến lược theo dõi xu hướng, có thể đi vào và ra ngoài thường xuyên trong thị trường biến động, gây ra chi phí giao dịch không cần thiết.
Rủi ro trượt: Trong trường hợp nhanh chóng, thực hiện nhiều bước dừng có thể bị ảnh hưởng bởi điểm trượt, và giá thực hiện thực tế có thể lệch so với dự kiến.
Rủi ro tối ưu hóa quá mức: Chiến lược có nhiều tham số có thể điều chỉnh, dễ rơi vào bẫy tối ưu hóa quá mức, dẫn đến kết quả phản hồi khác biệt lớn so với hiệu suất thực.
Tiếp cận bộ lọc biến động: xem xét kết hợp ATR hoặc các chỉ số biến động khác, giảm tần suất giao dịch trong thời gian biến động thấp và cải thiện khả năng thích ứng của chiến lược trong các môi trường thị trường khác nhau.
Điều chỉnh tham số động: Bạn có thể khám phá các tham số Supertrend và mục tiêu dừng động bằng thuật toán thích ứng để thích ứng tốt hơn với sự thay đổi của thị trường.
Tăng cơ chế dừng lỗ: Mặc dù Supertrend cung cấp một số chức năng dừng lỗ ngược lại, nhưng bạn có thể xem xét thêm các cơ chế dừng lỗ linh hoạt hơn, chẳng hạn như theo dõi dừng lỗ, để kiểm soát rủi ro hơn nữa.
Kết hợp với các chỉ số kỹ thuật khác: Có thể xem xét việc giới thiệu các chỉ số kỹ thuật khác như RSI, MACD, để cải thiện độ chính xác của nhập cảnh và xuất cảnh thông qua cộng hưởng đa chỉ số.
Tối ưu hóa quản lý tiền: Có thể khám phá các chiến lược quản lý tiền phức tạp hơn, chẳng hạn như thay đổi kích thước vị trí động theo lợi nhuận của tài khoản để cân bằng tốt hơn giữa rủi ro và lợi nhuận.
Tối ưu hóa phản hồi: thực hiện phản hồi toàn diện hơn, bao gồm phân tích hiệu suất theo các chu kỳ thời gian khác nhau, các điều kiện thị trường khác nhau, để tìm ra kịch bản ứng dụng và cài đặt tham số tốt nhất cho chiến lược.
Chiến lược dừng chân di động nhiều bước này dựa trên chỉ số Supertrend kép, cân bằng rủi ro và lợi nhuận thông qua cơ chế dừng chân nhiều bước linh hoạt. Ưu điểm chính của chiến lược là khả năng quản lý rủi ro tốt và nhạy cảm với xu hướng. Tuy nhiên, người dùng cần chú ý đến cài đặt tham số và ảnh hưởng của môi trường thị trường khi áp dụng.
/*backtest
start: 2024-05-21 00:00:00
end: 2024-06-20 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Strategic Multi-Step Supertrend Trader - Strategy [presentTrading]", overlay=true )
// this strategy utilizes a double Supertrend indicator to determine entry and exit conditions for both long and short trades, with user-configurable take profit levels and trade direction settings.
// The strategy dynamically updates highest and lowest prices during trades and exits positions based on multi-step profit targets or opposing Supertrend signals.
// User inputs for take profit settings
// Grouping Take Profit settings
useTakeProfit = input.bool(true, title="Use Take Profit", group="Take Profit Settings")
takeProfitPercent1 = input.float(6.0, title="Take Profit % Step 1", group="Take Profit Settings")
takeProfitPercent2 = input.float(12.0, title="Take Profit % Step 2", group="Take Profit Settings")
takeProfitPercent3 = input.float(18.0, title="Take Profit % Step 3", group="Take Profit Settings")
takeProfitPercent4 = input.float(50.0, title="Take Profit % Step 4", group="Take Profit Settings")
takeProfitAmount1 = input.float(12, title="Take Profit Amount % Step 1", group="Take Profit Settings")
takeProfitAmount2 = input.float(8, title="Take Profit Amount % Step 2", group="Take Profit Settings")
takeProfitAmount3 = input.float(4, title="Take Profit Amount % Step 3", group="Take Profit Settings")
takeProfitAmount4 = input.float(0, title="Take Profit Amount % Step 4", group="Take Profit Settings")
numberOfSteps = input.int(3, title="Number of Take Profit Steps", minval=1, maxval=4, group="Take Profit Settings")
// Grouping Trade Direction
tradeDirection = input.string("Both", title="Trade Direction", options=["Long", "Short", "Both"], group="Trade Direction")
// Grouping Supertrend settings
atrPeriod1 = input(10, title="ATR Length for Supertrend 1", group="Supertrend Settings")
factor1 = input.float(3.0, title="Factor for Supertrend 1", step=0.01, group="Supertrend Settings")
atrPeriod2 = input(5, title="ATR Length for Supertrend 2", group="Supertrend Settings")
factor2 = input.float(4.0, title="Factor for Supertrend 2", step=0.01, group="Supertrend Settings")
// Function to calculate Supertrend
supertrend(factor, atrPeriod) =>
[a, direction] = ta.supertrend(factor, atrPeriod)
direction
// Calculate Double Supertrend
supertrend1 = supertrend(factor1, atrPeriod1)
supertrend2 = supertrend(factor2, atrPeriod2)
// Entry conditions
longCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Long" or tradeDirection == "Both")
shortCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Short" or tradeDirection == "Both")
// Exit conditions
longExitCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Long" or tradeDirection == "Both")
shortExitCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Short" or tradeDirection == "Both")
// Variables to store the highest and lowest prices during the trade
var float highestPrice = na
var float lowestPrice = na
// Get the entry price from open trades
entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)
// Reset highestPrice or lowestPrice when entering new trades
if (longCondition and strategy.position_size <= 0)
highestPrice := na // Reset the highest price
strategy.entry("My Long Entry Id", strategy.long) // Enter long position
strategy.close("My Short Entry Id", "Short Exit") // Close short position if any
if (shortCondition and strategy.position_size >= 0)
lowestPrice := na // Reset the lowest price
strategy.entry("My Short Entry Id", strategy.short) // Enter short position
strategy.close("My Long Entry Id", "Long Exit") // Close long position if any
// Exit trades based on conditions
if (longExitCondition and strategy.position_size > 0)
strategy.close("My Long Entry Id", "Long Exit") // Exit long position
if (shortExitCondition and strategy.position_size < 0)
strategy.close("My Short Entry Id", "Short Exit") // Exit short position
if (strategy.position_size > 0)
// Update the highest price for long positions
highestPrice := na(highestPrice) ? high : math.max(highestPrice, high)
// Step 1
if (useTakeProfit and numberOfSteps >= 1)
strategy.exit("Take Profit 1", from_entry="My Long Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 + takeProfitPercent1 / 100))
// Step 2
if (useTakeProfit and numberOfSteps >= 2)
strategy.exit("Take Profit 2", from_entry="My Long Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 + takeProfitPercent2 / 100))
// Step 3
if (useTakeProfit and numberOfSteps >= 3)
strategy.exit("Take Profit 3", from_entry="My Long Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 + takeProfitPercent3 / 100))
// Step 4
if (useTakeProfit and numberOfSteps == 4)
strategy.exit("Take Profit 4", from_entry="My Long Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 + takeProfitPercent4 / 100))
if (strategy.position_size < 0)
// Update the lowest price for short positions
lowestPrice := na(lowestPrice) ? low : math.min(lowestPrice, low)
// Step 1
if (useTakeProfit and numberOfSteps >= 1)
strategy.exit("Take Profit 1", from_entry="My Short Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 - takeProfitPercent1 / 100))
// Step 2
if (useTakeProfit and numberOfSteps >= 2)
strategy.exit("Take Profit 2", from_entry="My Short Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 - takeProfitPercent2 / 100))
// Step 3
if (useTakeProfit and numberOfSteps >= 3)
strategy.exit("Take Profit 3", from_entry="My Short Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 - takeProfitPercent3 / 100))
// Step 4
if (useTakeProfit and numberOfSteps == 4)
strategy.exit("Take Profit 4", from_entry="My Short Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 - takeProfitPercent4 / 100))