Chiến lược theo dõi xu hướng kênh trung bình động đa kỳ


Ngày tạo: 2024-02-20 13:45:42 sửa đổi lần cuối: 2024-02-20 13:45:42
sao chép: 2 Số nhấp chuột: 607
1
tập trung vào
1617
Người theo dõi

Chiến lược theo dõi xu hướng kênh trung bình động đa kỳ

Tổng quan

Chiến lược này là một chiến lược xoay, áp dụng cho thị trường xu hướng như tiền điện tử và cổ phiếu, sử dụng khung thời gian lớn hơn, chẳng hạn như 8 giờ. Chiến lược này sử dụng nhiều đường trung bình di chuyển bao gồm SMA, EMA, VWMA, ALMA, SMMA, LSMA và VWMA, được áp dụng cho các điểm cao và thấp, tạo thành hai kênh trung bình.

Đặt nhiều khi giá đóng cửa cao hơn mức trung bình áp dụng cho điểm cao; Đặt trống khi giá đóng cửa thấp hơn mức trung bình áp dụng cho điểm thấp.

Nguyên tắc chiến lược

Chiến lược này sử dụng 7 chỉ số trung bình di chuyển khác nhau, bao gồm SMA, EMA, VWMA, ALMA, SMMA, LSMA và VWMA. Các trung bình di chuyển này được áp dụng cho giá cao nhất và giá thấp nhất của đường K, tạo ra hai đường trung bình.

Mức trung bình được áp dụng cho giá cao nhất được gọi là avg_high và mức trung bình được áp dụng cho giá thấp nhất được gọi là avg_low. Hai mức trung bình này tạo thành một kênh.

Khi giá đóng cửa lớn hơn mức trung bình_ cao, hãy làm nhiều hơn; khi giá đóng cửa thấp hơn mức trung bình_ thấp, hãy làm trống.

Lệnh dừng là giá mở và lệnh dừng là giá mở.(1+tp_long); khi mở lỗ, đường dừng là giá mở và đường dừng là giá mở(1-tp_short)。

Phân tích lợi thế

Lợi thế lớn nhất của chiến lược này là sử dụng nhiều chỉ số trung bình di chuyển để tăng khả năng kiếm lợi nhuận. Các chỉ số trung bình di chuyển với các chu kỳ khác nhau và cách tính toán khác nhau phản ứng với giá khác nhau, kết hợp với việc sử dụng có thể tạo ra tín hiệu giao dịch đáng tin cậy hơn.

Một lợi thế khác là giao dịch theo phương thức kênh. Các kênh lên xuống giới hạn phạm vi dừng, giảm rủi ro và phù hợp hơn với chiến lược xoay.

Phân tích rủi ro

Chiến lược này có hai rủi ro chính:

  1. Nhiều tổ hợp chỉ số trung bình di chuyển được sử dụng, các tham số được thiết lập phức tạp hơn, cần nhiều thử nghiệm và tối ưu hóa để tìm ra tổ hợp tham số tối ưu.

  2. Trong thị trường ngang và không có xu hướng rõ ràng, chiến lược này dễ gây ra tổn thất và nhiều tín hiệu giao dịch không hiệu quả.

Để giảm thiểu các rủi ro này, cần chọn các loại giao dịch có xu hướng rõ ràng, đồng thời thực hiện nhiều phản hồi và tối ưu hóa đối với các tham số để tìm các thiết lập tham số phù hợp nhất với tình trạng thị trường hiện tại.

Hướng tối ưu hóa

Chiến lược này cũng cần phải được tối ưu hóa về những khía cạnh sau:

  1. Kiểm tra nhiều loại trung bình di chuyển hơn để tìm một sự kết hợp tốt hơn. Bạn có thể xem xét SMA, EMA, KAMA, TEMA, v.v.

  2. Tối ưu hóa tham số cho chiều dài đường trung bình di chuyển và chiều rộng đường dẫn để tìm các thiết lập tham số tối ưu.

  3. Kiểm tra các thiết lập dừng dừng khác nhau. Bạn có thể xem xét các phương pháp như dừng trailing hoặc dừng động.

  4. Kết hợp các chỉ số định hướng để tránh giao dịch thường xuyên trong các thị trường không có xu hướng rõ ràng. Ví dụ: ADX, ATR, v.v.

  5. Tối ưu hóa logic entry và exit, thiết lập các điều kiện lọc bổ sung, giảm giao dịch không hiệu lực.

Tóm tắt

Chiến lược này là một chiến lược theo dõi xu hướng chuyển động. Chiến lược này được áp dụng cho các loại giao dịch có xu hướng rõ ràng, hiệu quả tốt hơn sau khi tối ưu hóa các tham số. Tuy nhiên, khi thị trường chuyển hướng dễ chịu tổn thất lớn hơn, cần tối ưu hóa thêm để giảm rủi ro.

Mã nguồn chiến lược
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 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/
// © exlux99

//@version=4

strategy(title="High/Low channel swing", shorttitle="Multi MA swing", overlay=true)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

//////
length_ma= input(defval=12, title="Length Moving averages", minval=1)

////////////////////////////////SETUP///////////////////////////////////////////

sma_high   = sma(high, length_ma)
ema_high   = ema(high, length_ma)
wma_high   = wma(high, length_ma)
alma_high  = alma(high,length_ma, 0.85, 6)
smma_high = rma(high,length_ma)
lsma_high = linreg(high, length_ma, 0)
vwma_high = vwma(high,length_ma)



avg_high = (sma_high+ema_high+wma_high+alma_high+smma_high+lsma_high+vwma_high)/7

///////////////////////////////////////////

sma_low   = sma(low, length_ma)
ema_low   = ema(low, length_ma)
wma_low   = wma(low, length_ma)
alma_low  = alma(low,length_ma, 0.85, 6)
smma_low = rma(low,length_ma)
lsma_low = linreg(low, length_ma, 0)
vwma_low = vwma(low,length_ma)



avg_low = (sma_low+ema_low+wma_low+alma_low+smma_low+lsma_low+vwma_low)/7

////////////////////////////PLOTTING////////////////////////////////////////////


plot(avg_high , title="avg", color=color.green, linewidth = 4)
plot(avg_low , title="avg", color=color.red, linewidth = 4)

long= close > avg_high
short = close < avg_low

tplong=input(0.06, title="TP Long", step=0.01)
sllong=input(0.05, title="SL Long", step=0.01)

tpshort=input(0.045, title="TP Short", step=0.01)
slshort=input(0.05, title="SL Short", step=0.01)

if(time_cond)
    strategy.entry("long",1,when=long)
    strategy.exit("closelong", "long" , profit = close * tplong / syminfo.mintick, loss = close * sllong / syminfo.mintick, alert_message = "closelong")
    strategy.close("long", when=crossunder(low,avg_low))
    
    
    strategy.entry("short",0,when=short)
    strategy.exit("closeshort", "short" , profit = close * tpshort / syminfo.mintick, loss = close * slshort / syminfo.mintick, alert_message = "closeshort")
    strategy.close("short",when=crossover(high,avg_high))