
Chiến lược này sử dụng độ lệch chéo của hai đường trung bình di chuyển chỉ số ((EMA) với độ dài khác nhau để tạo ra tín hiệu theo dõi xu hướng. Sử dụng EMA với độ dài 130 và 400 theo mặc định, sự kết hợp của hai tham số này hoạt động tốt.
Làm nhiều khi đường thẳng EMA trên đường thẳng EMA đi qua đường thẳng EMA và giá trên EMA 200 chu kỳ; làm trống khi đường thẳng EMA dưới đường thẳng EMA đi qua đường thẳng EMA và giá dưới 200 chu kỳ.
Hạ điểm khi giao ngược chiều nghiêng.
Chiến lược này hoạt động tốt nhất trên Bitcoin và các Altcoin có giá trị thị trường cao và có tính thanh khoản cao, nhưng cũng hoạt động tốt trên các tài sản có tính biến động cao, đặc biệt là khi các tài sản này thường xuyên xuất hiện trong các xu hướng.
Tốt nhất là trong khung thời gian 4 giờ.
Nó cũng đi kèm với một bộ lọc tỷ lệ dao động tùy chọn, chỉ mở vị trí khi chênh lệch giữa hai độ dốc lớn hơn một ngưỡng nhất định, nhằm tránh mở vị trí khi tiếng ồn lớn hơn tín hiệu khi giá dao động ngang.
Hãy thưởng thức!
Cốt lõi của chiến lược này là so sánh độ lệch của hai đường trung bình di chuyển của chỉ số EMA với độ dài khác nhau.
Đầu tiên tính EMA với độ dài 130 và 400, sau đó tính độ dốc của mỗi bên, sau đó tính độ dốc của mỗi bên với độ dài 3 để có được đường cong dốc mịn.
Tín hiệu mua được tạo ra khi đường thẳng EMA trên đường thẳng EMA đi qua đường thẳng EMA; Tín hiệu bán được tạo ra khi đường thẳng EMA dưới đường thẳng EMA đi qua đường thẳng EMA.
Để lọc biến động, bạn có thể chọn EMA 200 chu kỳ làm bộ lọc xu hướng, chỉ xem xét nhiều tín hiệu khi giá cao hơn EMA và xem xét tín hiệu trống khi giá thấp hơn.
Ngoài ra, một bộ lọc tỷ lệ dao động có thể được tùy chọn, chỉ phát ra tín hiệu khi chênh lệch giữa hai độ dốc lớn hơn so với giá trị giới hạn mặc định, do đó lọc các trường hợp có độ dao động không đủ.
Khi đường nghiêng ngược lại, vị trí dừng lỗ khi cân bằng.
Sử dụng chéo độ dốc để tạo ra tín hiệu, có thể theo dõi xu hướng hiệu quả
Điều chỉnh các tham số EMA chu kỳ để phù hợp với các môi trường thị trường khác nhau
Bộ lọc xu hướng có thể tránh bị lừa bởi các biến động
Bộ lọc tỷ lệ dao động có thể lọc tín hiệu giả
Quy tắc đơn giản, rõ ràng và dễ hiểu
Có thể sử dụng trên nhiều khung thời gian
Có thể xảy ra nhiều Open và Close trong các trường hợp sốc lớn
Các tham số EMA không đúng chu kỳ có thể bỏ lỡ điểm biến động xu hướng
Cần điều chỉnh hợp lý các tham số để phù hợp với môi trường thị trường thay đổi
Tương tự như hệ thống MA, cuối xu hướng lớn có thể đảo ngược tổn thất
Thử các tham số kết hợp khác nhau của chu kỳ EMA để tìm tham số tốt nhất
Các tham số lựa chọn dựa trên các đặc điểm của các loại tiền tệ khác nhau và môi trường thị trường
Có thể xem xét thêm các chiến lược kiểm soát rủi ro để ngăn chặn tổn thất
Có thể xem xét động điều chỉnh EMA tham số chu kỳ
Thử các tham số giá trị mốc khác nhau
Kiểm tra hiệu quả trên các khung thời gian khác nhau
Chiến lược tổng thể của chiến lược này rất rõ ràng và dễ hiểu, sử dụng EMA để tạo tín hiệu chéo, có thể theo dõi xu hướng một cách hiệu quả; bộ lọc xu hướng và bộ lọc tỷ lệ dao động có thể làm giảm tiếng ồn giao dịch. Bằng cách điều chỉnh các tham số EMA theo chu kỳ, nó có thể thích ứng với các môi trường thị trường khác nhau.
/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// strategy(title="Slopes",initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.06, slippage = 2, default_qty_value=30, overlay=false)
//definizione input
start = timestamp(input(2018, "start year"), input(1, "start month"), input(1, "start day"), 00, 00)
end = timestamp(input(2020, "end year"), input(1, "end month"), input(1, "end day"), 00, 00)
average = input (title="Source MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])
len1=input(130,title="Fast MA Length")
len2=input(400,title="Slow MA Length")
smoothingavg = input (title="Smoothing MAs Type", type=input.string, defval="EMA",options=["EMA","SMA"])
smoothingavglen = input (3,title="Smoothing MAs Length")
trendfilter=input(true,title="Trend Filter")
trendfilterperiod=input(200,title="Trend Filter MA Period")
trendfiltertype=input (title="Trend Filter MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])
volatilityfilter=input(false,title="Volatility Filter")
volatilitydelta=input(0.0003,step=0.0001,title="Delta Slopes EMA")
//variabili
m1 = if average == "EMA"
ema(close,len1)
else
sma(close,len1)
m2=if average == "EMA"
ema(close,len2)
else
sma(close,len2)
slp1=(m1-m1[1])/m1
slp2=(m2-m2[1])/m2
e1=if smoothingavg == "EMA"
ema(slp1,smoothingavglen)
else
sma(slp1,smoothingavglen)
e2=if smoothingavg == "EMA"
ema(slp2,smoothingavglen)
else
sma(slp2,smoothingavglen)
plot(e1,color=color.yellow)
plot(e2,color=color.red)
//plot (abs(e1-e2),color=color.white)
//plot (ema(e1-e2,9),color=color.yellow)
//variabili accessorie e condizioni
TrendConditionL=if trendfiltertype =="EMA"
close>ema(close,trendfilterperiod)
else
close>sma(close,trendfilterperiod)
TrendConditionS=if trendfiltertype =="EMA"
close<ema(close,trendfilterperiod)
else
close<sma(close,trendfilterperiod)
VolatilityCondition = abs(e1-e2) > volatilitydelta
ConditionEntryL= if trendfilter == true
if volatilityfilter == true
e1>e2 and TrendConditionL and VolatilityCondition
else
e1>e2 and TrendConditionL
else
if volatilityfilter == true
e1>e2 and VolatilityCondition
else
e1>e2
ConditionEntryS= if trendfilter == true
if volatilityfilter == true
e1<e2 and TrendConditionS and VolatilityCondition
else
e1<e2 and TrendConditionS
else
if volatilityfilter == true
e1<e2 and VolatilityCondition
else
e1<e2
ConditionExitL=crossunder(e1,e2)
ConditionExitS=crossover(e1,e2)
if true
if ConditionExitS
if strategy.position_size < 0
strategy.close("SLPShort")
if true
if ConditionExitL
if strategy.position_size > 0
strategy.close("SLPLong")
if true
if ConditionEntryL
strategy.entry ("SLPLong",long=true)
if true
if ConditionEntryS
strategy.entry("SLPShort",long=false)