Chiến lược đột phá băng tần trung bình di chuyển

Tác giả:ChaoZhang, Ngày: 2023-09-17 18:33:57
Tags:

Tổng quan

Chiến lược này sử dụng đường trung bình động để tạo ra một kênh giá và tạo ra tín hiệu khi giá vượt ra khỏi dải kênh.

Chiến lược logic

  1. Tính toán trung bình động, với các tùy chọn như SMA / EMA / WMA / RMA.

  2. Dải trên là một phần trăm tăng của trung bình động. Dải dưới là một phần trăm giảm.

  3. Đi dài trên phá vỡ trên dải trên, đi ngắn trên phá vỡ dưới dải dưới. Các tùy chọn cho giao dịch chỉ dài, chỉ ngắn hoặc hai hướng.

  4. Đặt điểm dừng lỗ và lấy lợi nhuận. Điểm lấy lợi nhuận là một phần trăm tăng giá nhập khẩu. Điểm dừng lỗ là một phần trăm giảm giá nhập khẩu.

Phân tích lợi thế

  1. Dễ dàng thực hiện xác định xu hướng bằng cách sử dụng đường trung bình động.

  2. Các thông số có thể điều chỉnh phù hợp với các khoảng thời gian nắm giữ và ưu tiên rủi ro khác nhau.

  3. Các hướng dài / ngắn tùy chọn thích nghi với các điều kiện thị trường khác nhau.

  4. Phân phần cố định dừng lỗ và lấy lợi nhuận cho phép kiểm soát.

Phân tích rủi ro

  1. Có xu hướng bị mắc kẹt khi xu hướng thay đổi đột ngột.

  2. Điều chỉnh tham số không chính xác có nguy cơ giao dịch quá mức hoặc tụt hậu.

  3. Phân phần cố định dừng lỗ/lợi nhuận thiếu sự linh hoạt.

  4. Tăng tần suất giao dịch và chi phí hoa hồng với giao dịch hai chiều.

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

  1. Tối ưu hóa các thông số trung bình động để cân bằng sự chậm trễ và tiếng ồn.

  2. Tối ưu hóa băng thông kênh để phù hợp với tần số biến động thị trường.

  3. Kiểm tra các cấu hình dừng lỗ và lấy lợi nhuận khác nhau.

  4. Thêm các chỉ số xu hướng và dao động để đánh giá các điều kiện thị trường tổng thể.

  5. Thực hiện các bộ lọc thời gian để tránh tác động của sự kiện quan trọng.

Tóm lại

Chiến lược đạt được xu hướng đơn giản theo dõi thông qua các kênh trung bình động, nhưng cần tối ưu hóa tham số và kiểm soát rủi ro mạnh hơn.


/*backtest
start: 2023-08-17 00:00:00
end: 2023-09-16 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/
// © TaylorTneh
//@version=4

// strategy("Moving Average Band Taylor V1",shorttitle="MA Band+",overlay=true,default_qty_type=strategy.cash,default_qty_value=1000,initial_capital=1000,currency=currency.USD,commission_value=.1)

price = input(close, title="Source")
mabtype = input(title="Moving Average Type", defval="RMA", options=["SMA", "EMA", "RMA", "WMA"])
malen = input(10, "MA Period : 10")
magap = input(0.6, "Band Gap : 0.6", minval = -10, maxval = 10, step = 0.1)
mabup = if mabtype == "SMA"
    sma(high, malen)
else
    if mabtype == "EMA"
        ema(high, malen)
    else
        if mabtype == "WMA"
            wma(high, malen)
        else
            if mabtype == "RMA"
                rma(high, malen)
                    
mabdn = if mabtype == "SMA"
    sma(low, malen)
else
    if mabtype == "EMA"
        ema(low, malen)
    else
        if mabtype == "WMA"
            wma(low, malen)
        else
            if mabtype == "RMA"
                rma(low, malen)
                    
upex = mabup * (1 + magap/100)
dnex = mabdn * (1 - magap/100)
plot(upex, "Upper MA Band", color.orange)
plot(dnex, "Lower MA Band", color.orange)


//-------------------------------------------- (Strategy)
strategy.entry("Long", strategy.long, stop = upex)
strategy.entry("Short", strategy.short, stop = dnex)
//Long Only//strategy.entry("Long", strategy.long, stop = upex)
//Long Only//strategy.exit("Short", stop = dnex)
//Short Only//strategy.entry("Short", strategy.short, stop = dnex)
//Short Only//strategy.exit("Long", stop = upex)


//-------------------------------------------- (Take Profit & Stop Lose)
stopPer = input(500.0, title='# Stop Loss %', type=input.float) / 100
takePer = input(500.0, title='# Take Profit %', type=input.float) / 100
//Determine where you've entered and in what direction
longStop = strategy.position_avg_price * (1 - stopPer)
shortStop = strategy.position_avg_price * (1 + stopPer)
shortTake = strategy.position_avg_price * (1 - takePer)
longTake = strategy.position_avg_price * (1 + takePer)
if strategy.position_size > 0 
    strategy.exit(id="L-TP/SL", stop=longStop, limit=longTake)
if strategy.position_size < 0 
    strategy.exit(id="S-TP/SL", stop=shortStop, limit=shortTake)


//-------------------------------------------- (Sample Time Filter Strategy)
//fromyear = input(2018, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
//toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
//frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
//tomonth = input(10, defval = 10, minval = 01, maxval = 12, title = "To Month")
//fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
//today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//strategy.entry("Long", strategy.long, stop = upex, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
//strategy.entry("Short", strategy.short, stop = dnex, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
//--------------------------------------------


Thêm nữa