Chiến lược R-Breaker về tương lai hàng hóa

Tác giả:Tốt, Tạo: 2020-06-02 08:57:10, Cập nhật: 2023-11-02 19:52:44

img

Tóm lại

Chiến lược R-Breaker được phát triển bởi Richard Saidenberg và được xuất bản vào năm 1994. Nó được tạp chí Futures Truth chọn là một trong mười chiến lược giao dịch có lợi nhuận nhất tại Hoa Kỳ trong 15 năm liên tiếp. So với các chiến lược khác, R-Breaker là một chiến lược giao dịch kết hợp xu hướng và đảo ngược xu hướng.

Kháng và hỗ trợ

Nói một cách đơn giản, chiến lược R-Breaker là một chiến lược hỗ trợ và kháng cự giá. Nó tính toán bảy giá dựa trên giá cao nhất, thấp nhất và đóng cửa hôm qua: một giá trung tâm (pivot) và ba mức hỗ trợ (s1 s2, s3), ba mức kháng cự (r1, r2, r3). Sau đó theo mối quan hệ vị trí giữa giá hiện tại và các mức hỗ trợ và kháng cự này, để hình thành các điều kiện kích hoạt mua và bán, và thông qua một điều chỉnh thuật toán nhất định, điều chỉnh khoảng cách giữa bảy giá này, tiếp tục thay đổi giá kích hoạt của giao dịch.

  • Giá mua phá vỡ (mức kháng cự r3) = giá cao nhất ngày hôm qua + 2 * (giá trung tâm - giá thấp nhất ngày hôm qua) / 2

  • Quan sát giá bán (mức kháng cự r2) = giá trung tâm + (giá cao nhất ngày hôm qua - giá thấp nhất ngày hôm qua)

  • Giá bán ngược (mức kháng cự r1) = 2 * Giá trung tâm - giá thấp nhất hôm qua

  • Giá trung tâm (pivot) = (giá cao nhất hôm qua + giá đóng cửa hôm qua + giá thấp nhất hôm qua) / 3

  • Giá mua ngược (mức hỗ trợ s1) = 2 * Giá trung tâm - giá cao nhất hôm qua

  • Quan sát giá mua (mức hỗ trợ s2) = giá trung tâm - (giá cao nhất ngày hôm qua - giá thấp nhất ngày hôm qua)

  • Giá bán phá vỡ (mức hỗ trợ s3) = giá thấp nhất ngày hôm qua - 2 * (giá cao nhất ngày hôm qua - giá trung tâm)

Từ đây chúng ta có thể thấy rằng chiến lược R-Breaker vẽ một đường giá giống như lưới dựa trên giá hôm qua, và cập nhật các đường giá này một lần mỗi ngày. Trong phân tích kỹ thuật, mức hỗ trợ và kháng cự và vai trò của cả hai có thể được chuyển đổi thành nhau. Khi giá phá vỡ thành công mức kháng cự, mức kháng cự trở thành mức hỗ trợ; khi giá phá vỡ thành công mức hỗ trợ, mức hỗ trợ trở thành mức kháng cự.

Trong giao dịch thực tế, các mức hỗ trợ và kháng cự này cho nhà giao dịch biết hướng mở và đóng các vị trí và các điểm giao dịch chính xác. Các nhà giao dịch có điều kiện mở và đóng cụ thể có thể tùy chỉnh linh hoạt theo giá trong ngày, giá trung tâm, mức kháng cự và mức hỗ trợ, và cũng có thể quản lý các vị trí dựa trên các đường giá lưới này.

Chiến lược logic

Tiếp theo, chúng ta hãy xem chiến lược R-Breaker sử dụng các mức hỗ trợ và kháng cự này như thế nào. Logic của nó hoàn toàn không phức tạp. Nếu không có vị trí giữ, hãy vào chế độ xu hướng. Khi giá lớn hơn giá mua đột phá, mở vị trí dài; khi giá thấp hơn giá bán đột phá, mở vị trí ngắn.

  • Chế độ xu hướng

vị trí mở dài: nếu không có vị trí giữ và giá lớn hơn giá mua đột phá

vị trí mở ngắn: nếu không có vị trí nắm giữ và giá thấp hơn giá bán đột phá

đóng vị trí dài: nếu bạn nắm giữ một vị trí dài, và giá cao nhất trong ngày lớn hơn giá bán quan sát và giá thấp hơn giá bán ngược

đóng vị trí ngắn: nếu bạn nắm giữ một vị trí ngắn, và giá thấp nhất trong ngày thấp hơn giá mua quan sát và giá lớn hơn giá mua ngược

  • Chế độ ngược

Mở vị trí dài: nếu bạn giữ một vị trí ngắn, và giá thấp nhất trong ngày thấp hơn giá mua quan sát và giá lớn hơn giá mua ngược

Mở vị trí ngắn: nếu bạn nắm giữ một vị trí dài, và giá cao nhất trong ngày lớn hơn giá bán quan sát và giá thấp hơn giá bán ngược

Close long position: nếu các vị trí long được giữ và giá thấp hơn giá bán đột phá

Close short position: nếu bạn nắm giữ short position và giá cao hơn giá mua đột phá

Nếu có các vị trí giữ, nó đi vào chế độ đảo ngược. Khi có giữ các vị trí dài, và giá cao nhất trong ngày lớn hơn giá bán quan sát, và giá giảm xuống dưới giá bán ngược, vị trí dài sẽ được đóng và vị trí ngắn sẽ được mở đồng bộ. Khi giữ các vị trí ngắn, và giá thấp nhất trong ngày thấp hơn giá mua quan sát, và giá phá vỡ giá mua ngược, vị trí ngắn sẽ được đóng và vị trí dài sẽ được mở.

Viết chiến lược

'''backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 5m
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''

# Strategy main function
def onTick():
    # retrieve data
    exchange.SetContractType(contract_type)   # Subscribe to futures products
    bars_arr = exchange.GetRecords(PERIOD_D1)  # Get daily K line array
    if len(bars_arr) < 2:  # If the number of K lines is less than 2
        return
    yesterday_open = bars_arr[-2]['Open']     # Yesterday's opening price
    yesterday_high = bars_arr[-2]['High']     # Yesterday's highest price
    yesterday_low = bars_arr[-2]['Low']       # Yesterday's lowest price
    yesterday_close = bars_arr[-2]['Close']   # Yesterday's closing price

    # Calculation
    pivot = (yesterday_high + yesterday_close + yesterday_low) / 3 # Pivot point
    r1 = 2 * pivot - yesterday_low # Resistance level 1
    r2 = pivot + (yesterday_high - yesterday_low) # Resistance level 2
    r3 = yesterday_high + 2 * (pivot - yesterday_low) # Resistance level 3
    s1 = 2 * pivot - yesterday_high  # Support level 1
    s2 = pivot - (yesterday_high - yesterday_low)  # Support level 2
    s3 = yesterday_low - 2 * (yesterday_high - pivot)  # Support level 3

    today_high = bars_arr[-1]['High'] # Today's highest price
    today_low = bars_arr[-1]['Low'] # Today's lowest price
    current_price = _C(exchange.GetTicker).Last # Current price

    # Get positions
    position_arr = _C(exchange.GetPosition)  # Get array of positions
    if len(position_arr) > 0:  # If the position array length is greater than 0
        for i in position_arr:
            if i['ContractType'] == contract_type:  # If the position variety equals the subscription variety
                if i['Type'] % 2 == 0:  # If it is long position
                    position = i['Amount']  # The number of assigned positions is positive
                else:
                    position = -i['Amount']  # The number of assigned positions is negative
                profit = i['Profit']  # Get position profit and loss
    else:
        position = 0  # The number of assigned positions is 0
        profit = 0  # The value of the assigned position is 0
        
    if position == 0:  # If there is no position
        if current_price > r3:  # If the current price is greater than Resistance level 3
            exchange.SetDirection("buy")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # open long position
        if current_price < s3:  # If the current price is less than Support level 3
            exchange.SetDirection("sell")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # open short position
        
    if position > 0:  # if holding long position
        if today_high > r2 and current_price < r1 or current_price < s3:  # If today's highest price is greater than Resistance level 2, and the current price is less than Resistance level 1
            exchange.SetDirection("closebuy")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # close long position
            exchange.SetDirection("sell")  # Set transaction direction and type
            exchange.Sell(current_price - 1, 1)  # open short position

    if position < 0:  # if holding short position
        if today_low < s2 and current_price > s1 or current_price > r3:  # If today's lowest price is less than Support level 2, and the current price is greater than Support level 1
            exchange.SetDirection("closesell")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # close short position
            exchange.SetDirection("buy")  # Set transaction direction and type
            exchange.Buy(current_price + 1, 1)  # open long position

            
# Program main function
def main():
    while True:     # loop
        onTick()    # Execution strategy main function
        Sleep(1000) # Sleep for 1 second

Sao chép toàn bộ chiến lược

Chiến lược hoàn chỉnh đã được công bố trên nền tảng FMZ (FMZ.COM), nhấp vào liên kết bên dưới để sao chép trực tiếp, và bạn có thể backtest mà không cần cấu hình:https://www.fmz.com/strategy/187009

Tóm lại

Lý do tại sao chiến lược R-Breaker phổ biến là vì nó không chỉ đơn thuần là một chiến lược theo dõi xu hướng, mà là một chiến lược hỗn hợp để kiếm được cả xu hướng alpha và thu nhập alpha ngược. Chiến lược trong bài viết này chỉ dành cho việc chứng minh, mà không tối ưu hóa các thông số và biến thể thích hợp. Ngoài ra, chiến lược hoàn chỉnh cũng phải bao gồm chức năng dừng lỗ, và bạn bè quan tâm có thể cải thiện nó.


Có liên quan

Thêm nữa