
Ý tưởng chính của chiến lược này là để phát hiện liệu giá có phá vỡ mức giá thấp nhất trong chu kỳ được chỉ định hay không, nếu phá vỡ, hãy làm nhiều hơn và chờ đợi giá quay trở lại đường trung bình. Nó thuộc loại chiến lược theo dõi xu hướng.
Chiến lược này lấy giá thấp nhất trong chu kỳ được chỉ định bằng cách gọi phương thức ta.lowest của kịch bản Pine và so sánh với giá thấp nhất của chu kỳ trước.
Nếu giá thấp nhất của chu kỳ mới nhất thấp hơn giá thấp nhất của chu kỳ trước đó, sẽ phát ra một tín hiệu nhiều. Sau khi làm nhiều, bằng cách so sánh với giá cao nhất trong chu kỳ nhất định. Nếu giá cao nhất của chu kỳ mới nhất lớn hơn giá cao nhất của chu kỳ trước đó, thì sẽ bằng phẳng.
Chiến lược này cho phép chọn điều kiện kích hoạt, tức là giá thấp nhất cần phá vỡ 1, 2, 3 hoặc 4 giá thấp trước đó liên tiếp, do đó kiểm soát tần suất giao dịch.
Ngoài ra, chiến lược này cũng vẽ đường trung bình giá thấp nhất (lowestLow) và đường trung bình giá cao nhất (highestHigh) trên biểu đồ để hiển thị trực quan sự thay đổi của xu hướng.
Chiến lược này nắm bắt được xu hướng đảo ngược sau khi phá vỡ mức thấp mới và có tỷ lệ thắng cao hơn.
Cho phép chọn số lượng phá vỡ giá thấp nhất, điều khiển tần suất giao dịch.
Vẽ đường trung bình sẽ giúp bạn trực quan đánh giá các điểm thay đổi xu hướng.
Lập luận của chiến lược đơn giản, rõ ràng và dễ hiểu.
Có thể cấu hình các cổ phiếu khác nhau và chu kỳ thời gian để thử nghiệm tối ưu hóa.
Bước đột phá giả mạo không thể xác định được điểm đảo ngược xu hướng và có thể dẫn đến tổn thất.
Cần thử nghiệm các cấu hình tối ưu hóa với các tham số khác nhau, nếu không tần suất giao dịch có thể quá cao hoặc quá thấp.
Cần điều chỉnh các tham số cho các cổ phiếu khác nhau, không phù hợp với ứng dụng máy móc.
Không đủ thời gian phản hồi có thể dẫn đến quá phù hợp của chiến lược.
Sau khi phá vỡ, giá có thể thấp hơn một lần nữa và cần thiết phải đặt lệnh dừng để kiểm soát rủi ro.
Thêm các cơ chế dừng lỗ, chẳng hạn như dừng di động, dừng theo dõi, để kiểm soát tổn thất đơn lẻ.
Tối ưu hóa số lượng đột phá, cân bằng tần số giao dịch và chất lượng tín hiệu.
Kiểm tra các tham số tối ưu hóa cho các cổ phiếu khác nhau và chu kỳ thời gian.
Thêm các điều kiện lọc để tránh giao dịch thường xuyên trong thị trường bất ổn.
Cân nhắc thêm các chỉ số xu hướng để tránh giao dịch ngược.
Kiểm tra các tín hiệu xuất cảnh khác nhau.
Chiến lược này được sử dụng để nắm bắt cơ hội đảo ngược bằng cách theo dõi phá vỡ giá thấp nhất, thuộc chiến lược quay trở lại phá vỡ điển hình. Ưu điểm là đơn giản, dễ hiểu, tần suất giao dịch có thể được kiểm soát và có thể áp dụng cho nhiều loại cổ phiếu. Nhưng cũng có một số rủi ro phá vỡ giả, cần thêm điều kiện phụ trợ để lọc tối ưu hóa, đồng thời kiểm soát rủi ro rất cần thiết.
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 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/
// © merovinh
//@version=5
strategy(title="Merovinh - Mean Reversion Lowest low",
overlay = true,
default_qty_type = strategy.percent_of_equity,
initial_capital = 10000,
default_qty_value = 10,
commission_type = strategy.commission.percent,
slippage = 1,
commission_value = 0.04)
GR_TIME = 'Time Period'
bars = input(9, title = "Minimum number of bars", tooltip = "The minimum number of bars before updating lowest low / highest high")
numberOfLows = input.string(defval='One', title='Number of broken lows', options=['One', 'Two', 'Three', 'Four'])
//Period
var prevLow = .0
var prevHigh = .0
var prevLow2 = .0
var prevLow3 = .0
var prevLow4 = .0
truetime = true
highestHigh = ta.highest(high, bars)
lowestLow = ta.lowest(low, bars)
if numberOfLows == 'One'
if truetime and prevLow > 0 and lowestLow < prevLow
strategy.entry('long', strategy.long)
if numberOfLows == 'Two'
if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2
strategy.entry('long', strategy.long)
if numberOfLows == 'Three'
if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3
strategy.entry('long', strategy.long)
if numberOfLows == 'Four'
if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3 and prevLow3 < prevLow4
strategy.entry('long', strategy.long)
if truetime and prevHigh > 0 and highestHigh > prevHigh
strategy.close('long')
if prevLow != lowestLow
prevLow4 := prevLow3
prevLow3 := prevLow2
prevLow2 := prevLow
prevLow := lowestLow
prevHigh := highestHigh
plot(lowestLow, color=color.green, linewidth=1, title="Lowest Low Line")
plot(highestHigh, color=color.green, linewidth=1, title="Highest High Line")