Chuyển động động lực qua các khung thời gian Xu hướng theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-11-17 17:32:11
Tags:

img

Thông tin chi tiết

Chiến lược này sử dụng sự kết hợp giữa các đường trung bình di động trên các khung thời gian, nhận ra sự thay đổi xu hướng trên biểu đồ giờ trung bình lớn, để thực hiện các giao dịch theo dõi xu hướng có rủi ro thấp. Chiến lược có tính linh hoạt, thực hiện đơn giản, hiệu quả tiền tệ cao, phù hợp với các nhà giao dịch nắm giữ đường trung bình và dài để theo dõi xu hướng.

Phân tích nguyên bản

Chiến lược sử dụng ba đường trung bình di chuyển 5, 20 và 40 ngày để xác định sự sắp xếp của xu hướng trong các khung thời gian khác nhau.

Cụ thể, đường nhanh 5 ngày qua đường trung bình 20 ngày được coi là tín hiệu tăng đường ngắn, đường chậm 40 ngày qua đường trung bình 20 ngày được coi là tín hiệu tăng đường trung gian. Khi đường nhanh trung bình chậm 3 ngày là đúng ((5 ngày > 20 ngày > 40 ngày), được đánh giá là chu kỳ đa đầu; khi đường nhanh trung bình chậm 3 ngày là ngược lại ((5 ngày < 20 ngày < 40 ngày), được đánh giá là chu kỳ không đầu.

Do đó, theo hướng xu hướng chu kỳ lớn, kết hợp với sức mạnh chu kỳ nhỏ để phát hiện các bước vào cụ thể. Đó là chỉ khi xu hướng lớn đồng chiều và chu kỳ nhỏ mạnh, bạn có thể lọc hiệu quả các bước đột phá đảo ngược giả để đạt được hoạt động tỷ lệ thắng cao.

Ngoài ra, các chiến lược cũng sử dụng ATR để kiểm soát rủi ro của một khoản tiền để tăng lợi nhuận hơn nữa.

Phân tích ưu thế

  • Thiết lập linh hoạt, người dùng có thể tự điều chỉnh các tham số đường trung bình di động để phù hợp với các giống và sở thích giao dịch khác nhau

  • Việc thực hiện rất đơn giản và dễ dàng cho người mới sử dụng.

  • Sử dụng vốn hiệu quả cao, tận dụng tối đa đòn bẩy của vốn

  • Các cơ chế ngăn chặn rủi ro có khả năng ngăn chặn thiệt hại lớn

  • Khả năng theo dõi xu hướng mạnh mẽ, lợi nhuận bền vững sau khi chu kỳ lớn xác định hướng

  • Tỷ lệ thắng cao, tín hiệu giao dịch chất lượng tốt, ít nhầm đường

Rủi ro và cải tiến

  • Quyết định chu kỳ lớn phụ thuộc vào sắp xếp đường trung tuyến di chuyển, có nguy cơ sai đoán chậm

  • Kiểm tra cường độ chu kỳ nhỏ chỉ bằng một dây K, có thể được kích hoạt sớm, có thể thư giãn thích hợp

  • Lượng dừng cố định, có thể được tối ưu hóa để dừng động

  • Có thể xem xét thêm các điều kiện lọc, chẳng hạn như năng lượng khối lượng giao dịch

  • Bạn có thể thử các tổ hợp các thông số động trung bình khác nhau để tối ưu hóa chiến lược.

Tóm lại

Chiến lược này tích hợp phân tích nhiều khung thời gian và quản lý dừng lỗ, đạt được giao dịch theo dõi xu hướng rủi ro thấp. Bằng cách điều chỉnh các tham số, nó có thể được áp dụng cho các giống khác nhau để đáp ứng nhu cầu của người theo xu hướng. Chiến lược này đưa ra quyết định giao dịch vững chắc hơn và tín hiệu hiệu quả hơn so với hệ thống khung thời gian đơn truyền thống. Nhìn chung, chiến lược có khả năng thích nghi thị trường và triển vọng phát triển tốt.

Tổng quan

Chiến lược này sử dụng sự kết hợp của các đường trung bình động trên các khung thời gian để xác định xoay xu hướng trên biểu đồ hàng giờ, hàng ngày và hàng tuần. Nó cho phép xu hướng rủi ro thấp sau khi giao dịch. Chiến lược linh hoạt, đơn giản để thực hiện, hiệu quả vốn và phù hợp với các nhà giao dịch xu hướng trung hạn và dài hạn.

Logic giao dịch

Chiến lược sử dụng trung bình động 5, 20 và 40 ngày để xác định sự liên kết của các xu hướng trên các khung thời gian khác nhau. Dựa trên sự nhất quán giữa các khung thời gian lớn hơn và nhỏ hơn, nó xác định chu kỳ tăng và giảm.

Cụ thể, việc vượt qua MA nhanh 5 ngày trên MA trung bình 20 ngày cho thấy xu hướng tăng trong ngắn hạn. Việc vượt qua MA trung bình 20 ngày trên MA chậm 40 ngày báo hiệu xu hướng tăng trong trung hạn. Khi các MA nhanh, trung bình và chậm được sắp xếp tích cực (5 ngày > 20 ngày > 40 ngày), đó là chu kỳ tăng. Khi chúng được sắp xếp tiêu cực (5 ngày < 20 ngày < 40 ngày), đó là chu kỳ gấu.

Bằng cách xác định hướng từ các chu kỳ lớn hơn và xác nhận sức mạnh trên các chu kỳ nhỏ hơn, chiến lược này chỉ mở các vị trí khi xu hướng chính và động lực nhỏ phù hợp.

Chiến lược cũng sử dụng các điểm dừng ATR để kiểm soát rủi ro thương mại duy nhất và tiếp tục cải thiện lợi nhuận.

Ưu điểm

  • Các cấu hình linh hoạt phù hợp với các công cụ và phong cách giao dịch khác nhau

  • Dễ dàng thực hiện ngay cả cho các nhà giao dịch mới bắt đầu

  • Hiệu quả vốn cao để tối đa hóa đòn bẩy

  • Kiểm soát rủi ro hiệu quả để tránh tổn thất đáng kể

  • Xu hướng mạnh mẽ sau khả năng lợi nhuận bền vững

  • Tỷ lệ thắng cao do tín hiệu mạnh mẽ và ít chém hơn

Rủi ro và cải tiến

  • MA crossovers có thể bị chậm và gây ra phát hiện xu hướng muộn

  • Khám phá sức mạnh của một ngọn nến duy nhất có thể kích hoạt nhập cảnh sớm, trạng thái thư giãn

  • Thiết lập mất mát dừng ATR, tối ưu hóa đến dừng động

  • Xem xét thêm các bộ lọc bổ sung như khối lượng

  • Khám phá các thông số MA khác nhau để tối ưu hóa

Kết luận

Chiến lược này tích hợp nhiều phân tích khung thời gian và quản lý rủi ro cho xu hướng rủi ro thấp sau giao dịch. Bằng cách điều chỉnh các tham số, nó có thể được điều chỉnh cho các công cụ khác nhau để phù hợp với các nhà giao dịch xu hướng. So với các hệ thống khung thời gian duy nhất, nó đưa ra các quyết định giao dịch mạnh mẽ hơn và tạo ra các tín hiệu hiệu quả cao hơn.


/*backtest
start: 2023-10-17 00:00:00
end: 2023-11-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/
// © kgynofomo

//@version=5
strategy(title="[Salavi] | Andy Advance Pro Strategy [BTC|M15]",overlay = true, pyramiding = 1,initial_capital = 10000, default_qty_type = strategy.cash,default_qty_value = 10000)

ema_short = ta.ema(close,5)
ema_middle = ta.ema(close,20)
ema_long = ta.ema(close,40)

cycle_1 = ema_short>ema_middle and ema_middle>ema_long
cycle_2 = ema_middle>ema_short and ema_short>ema_long
cycle_3 = ema_middle>ema_long and ema_long>ema_short
cycle_4 = ema_long>ema_middle and ema_middle>ema_short
cycle_5 = ema_long>ema_short and ema_short>ema_middle
cycle_6 = ema_short>ema_long and ema_long>ema_middle

bull_cycle = cycle_1 or cycle_2 or cycle_3
bear_cycle = cycle_4 or cycle_5 or cycle_6
// label.new("cycle_1")
// bgcolor(color=cycle_1?color.rgb(82, 255, 148, 60):na)
// bgcolor(color=cycle_2?color.rgb(82, 255, 148, 70):na)
// bgcolor(color=cycle_3?color.rgb(82, 255, 148, 80):na)
// bgcolor(color=cycle_4?color.rgb(255, 82, 82, 80):na)
// bgcolor(color=cycle_5?color.rgb(255, 82, 82, 70):na)
// bgcolor(color=cycle_6?color.rgb(255, 82, 82, 60):na)

// Inputs
a = input(2, title='Key Vaule. \'This changes the sensitivity\'')
c = input(7, title='ATR Period')
h = false

xATR = ta.atr(c)
nLoss = a * xATR

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)

buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop




atr = ta.atr(14)
atr_length = input.int(25)
atr_rsi = ta.rsi(atr,atr_length)
atr_valid = atr_rsi>50

long_condition =  buy and bull_cycle and atr_valid
short_condition =  sell and bear_cycle and atr_valid

Exit_long_condition = short_condition
Exit_short_condition = long_condition

if long_condition
    strategy.entry("Andy Buy",strategy.long, limit=close,comment="Andy Buy Here")

if Exit_long_condition
    strategy.close("Andy Buy",comment="Andy Buy Out")
    // strategy.entry("Andy fandan Short",strategy.short, limit=close,comment="Andy 翻單 short Here")
    // strategy.close("Andy fandan Buy",comment="Andy short Out")


if short_condition
    strategy.entry("Andy Short",strategy.short, limit=close,comment="Andy short Here")


// strategy.exit("STR","Long",stop=longstoploss)
if Exit_short_condition
    strategy.close("Andy Short",comment="Andy short Out")
    // strategy.entry("Andy fandan Buy",strategy.long, limit=close,comment="Andy 翻單 Buy Here")
    // strategy.close("Andy fandan Short",comment="Andy Buy Out")




inLongTrade = strategy.position_size > 0
inLongTradecolor = #58D68D
notInTrade = strategy.position_size == 0
inShortTrade = strategy.position_size < 0

// bgcolor(color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)
plotshape(close!=0,location = location.bottom,color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)


plotshape(long_condition, title='Buy', text='Andy Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(short_condition, title='Sell', text='Andy Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)


//atr > close *0.01* parameter

// MONTHLY TABLE PERFORMANCE - Developed by @QuantNomad
// *************************************************************************************************************************************************************************************************************************************************************************
show_performance = input.bool(true, 'Show Monthly Performance ?', group='Performance - credits: @QuantNomad')
prec = input(2, 'Return Precision', group='Performance - credits: @QuantNomad')

if show_performance
    new_month = month(time) != month(time[1])
    new_year  = year(time)  != year(time[1])
    
    eq = strategy.equity
    
    bar_pnl = eq / eq[1] - 1
    
    cur_month_pnl = 0.0
    cur_year_pnl  = 0.0
    
    // Current Monthly P&L
    cur_month_pnl := new_month ? 0.0 : 
                     (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 
    
    // Current Yearly P&L
    cur_year_pnl := new_year ? 0.0 : 
                     (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1  
    
    // Arrays to store Yearly and Monthly P&Ls
    var month_pnl  = array.new_float(0)
    var month_time = array.new_int(0)
    
    var year_pnl  = array.new_float(0)
    var year_time = array.new_int(0)
    
    last_computed = false
    
    if (not na(cur_month_pnl[1]) and (new_month or barstate.islastconfirmedhistory))
        if (last_computed[1])
            array.pop(month_pnl)
            array.pop(month_time)
            
        array.push(month_pnl , cur_month_pnl[1])
        array.push(month_time, time[1])
    
    if (not na(cur_year_pnl[1]) and (new_year or barstate.islastconfirmedhistory))
        if (last_computed[1])
            array.pop(year_pnl)
            array.pop(year_time)
            
        array.push(year_pnl , cur_year_pnl[1])
        array.push(year_time, time[1])
    
    last_computed := barstate.islastconfirmedhistory ? true : nz(last_computed[1])
    
    // Monthly P&L Table    
    var monthly_table = table(na)
    
    if (barstate.islastconfirmedhistory)
        monthly_table := table.new(position.bottom_center, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1)
    
        table.cell(monthly_table, 0,  0, "",     bgcolor = #cccccc)
        table.cell(monthly_table, 1,  0, "Jan",  bgcolor = #cccccc)
        table.cell(monthly_table, 2,  0, "Feb",  bgcolor = #cccccc)
        table.cell(monthly_table, 3,  0, "Mar",  bgcolor = #cccccc)
        table.cell(monthly_table, 4,  0, "Apr",  bgcolor = #cccccc)
        table.cell(monthly_table, 5,  0, "May",  bgcolor = #cccccc)
        table.cell(monthly_table, 6,  0, "Jun",  bgcolor = #cccccc)
        table.cell(monthly_table, 7,  0, "Jul",  bgcolor = #cccccc)
        table.cell(monthly_table, 8,  0, "Aug",  bgcolor = #cccccc)
        table.cell(monthly_table, 9,  0, "Sep",  bgcolor = #cccccc)
        table.cell(monthly_table, 10, 0, "Oct",  bgcolor = #cccccc)
        table.cell(monthly_table, 11, 0, "Nov",  bgcolor = #cccccc)
        table.cell(monthly_table, 12, 0, "Dec",  bgcolor = #cccccc)
        table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999)
    
    
        for yi = 0 to array.size(year_pnl) - 1
            table.cell(monthly_table, 0,  yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
            
            y_color = array.get(year_pnl, yi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40)
            table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100, prec)), bgcolor = y_color, text_color=color.new(color.white, 0))
            
        for mi = 0 to array.size(month_time) - 1
            m_row   = year(array.get(month_time, mi))  - year(array.get(year_time, 0)) + 1
            m_col   = month(array.get(month_time, mi)) 
            m_color = array.get(month_pnl, mi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40)
            
            table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100, prec)), bgcolor = m_color, text_color=color.new(color.white, 0))



Thêm nữa