Chiến lược giảm đột phá đảo ngược trung bình

Tác giả:ChaoZhang, Ngày: 2023-11-02 15:34:22
Tags:

img

Tổng quan

Ý tưởng chính của chiến lược này là để phát hiện nếu giá phá vỡ giá thấp nhất trong một khoảng thời gian nhất định và đi dài, chờ đợi giá quay trở lại mức trung bình.

Chiến lược logic

Chiến lược lấy giá thấp nhất trong một khoảng thời gian nhất định thấp nhất bằng cách sử dụng Pine Script ta.lowest phương pháp và so sánh nó với giá thấp nhất của giai đoạn trước đó preLow.

Nếu giá thấp nhất trong thời gian gần đây nhất thấp nhấtLow thấp hơn giá thấp nhất trong thời gian trước đóprevLow, một tín hiệu dài sẽ được kích hoạt. Sau khi mua dài, nó so sánh với giá cao nhất trong thời gian được chỉ định cao nhất. Nếu giá cao nhất trong thời gian gần đây nhất cao hơn giá cao nhất trước đó, nó đóng vị trí.

Chiến lược 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 nhất trước đó liên tiếp, để kiểm soát tần suất giao dịch.

Nó cũng vẽ đường giá thấp nhất thấp nhất và đường giá cao nhất cao nhất trên biểu đồ để hiển thị trực quan sự thay đổi xu hướng.

Phân tích lợi thế

  • Chiến lược bắt được xu hướng đảo ngược sau khi phá vỡ mức thấp mới với tỷ lệ thắng tương đối cao.

  • Cho phép chọn số lượng giá thấp nhất để kiểm soát tần suất giao dịch.

  • Kéo các đường giúp xác định trực quan các điểm thay đổi xu hướng.

  • Đơn giản và rõ ràng chiến lược logic, dễ hiểu và thực hiện.

  • Có thể được cấu hình và tối ưu hóa trên các cổ phiếu và khoảng thời gian khác nhau.

Phân tích rủi ro

  • Việc phá vỡ đáy sai không thể xác định các điểm đảo ngược xu hướng, có thể dẫn đến tổn thất.

  • Cần thử nghiệm các kết hợp tham số khác nhau để tối ưu hóa cấu hình, nếu không tần suất giao dịch có thể quá cao hoặc quá thấp.

  • Các thông số cần phải được điều chỉnh cho các cổ phiếu khác nhau, không nên áp dụng cơ học.

  • Không đủ thời gian kiểm tra lại có thể gây ra quá độ.

  • Giá có thể đạt mức thấp mới sau khi phá vỡ, cần thiết để thiết lập dừng lỗ để kiểm soát rủi ro.

Hướng dẫn tối ưu hóa

  • Thêm các cơ chế dừng lỗ như dừng lỗ di chuyển, dừng lỗ kéo theo, để giới hạn mỗi lỗ giao dịch.

  • Tối ưu hóa số lượng breakout để cân bằng tần suất giao dịch và chất lượng tín hiệu.

  • Các thông số thử nghiệm trên các cổ phiếu và khoảng thời gian khác nhau.

  • Thêm các bộ lọc để tránh giao dịch thường xuyên trên các thị trường khác nhau.

  • Xem xét thêm các chỉ số xu hướng để tránh giao dịch ngược xu hướng.

  • Kiểm tra các tín hiệu thoát hiểm khác nhau.

Kết luận

Chiến lược này nắm bắt các cơ hội đảo ngược bằng cách theo dõi các đột phá giá thấp nhất, một chiến lược đột phá đảo ngược trung bình điển hình. Những lợi thế là sự đơn giản, tần suất có thể kiểm soát được và có thể áp dụng cho các cổ phiếu khác nhau. Nhưng nó cũng có một số rủi ro đột phá sai.


/*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")




Thêm nữa