
Đây là một chiến lược theo dõi xu hướng động của ETF chỉ số dựa trên đường trung bình di chuyển. Nó sử dụng đường hướng và độ lệch của đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm để xác định hướng xu hướng và thực hiện theo dõi xu hướng động của tài sản ETF chỉ số rủi ro thấp.
Chiến lược này sử dụng các đường trung bình di chuyển 50 chu kỳ và 150 chu kỳ. Khi đường trung bình di chuyển nhanh vượt qua đường trung bình di chuyển chậm và độ lệch của đường trung bình di chuyển nhanh lớn hơn ngưỡng, coi đó là xu hướng chuyển hướng, làm nhiều hơn; khi đường trung bình di chuyển chậm vượt qua đường trung bình di chuyển nhanh, hoặc độ lệch của đường trung bình di chuyển nhanh nhỏ hơn ngưỡng, coi đó là xu hướng đảo ngược, cân bằng.
Chiến lược này đơn giản và trực tiếp sử dụng hướng và độ dốc của đường trung bình di chuyển để đánh giá xu hướng thị trường, tránh phù hợp với đường cong, kiểm soát rủi ro hiệu quả. Đồng thời, đường trung bình di chuyển có tính chất khử tiếng ồn tự nhiên, có thể lọc tiếng ồn thị trường hiệu quả.
Đây là một ETF chỉ số rủi ro thấp với chiến lược theo xu hướng động, có những lợi thế như sau:
Chiến lược này cũng có một số rủi ro:
Giải pháp tương ứng:
Chiến lược này cũng có thể được tối ưu hóa theo các khía cạnh sau:
Chiến lược này là một chiến lược theo dõi xu hướng số lượng động của chỉ số ETF có rủi ro thấp, đơn giản và dễ thực hiện. Nó sử dụng phương tiện di chuyển để xác định hướng xu hướng, có lợi thế như khả năng kiểm soát rủi ro mạnh mẽ, để đạt được chi phí thấp và lợi nhuận ổn định. Chiến lược này cũng có một số thiếu sót, nhưng có thể được tối ưu hóa hơn nữa bằng nhiều cách, làm cho nó trở thành một công cụ hiệu quả cho việc phân bổ tài sản của chỉ số ETF.
/*backtest
start: 2023-11-04 00:00:00
end: 2023-12-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//please use on daily SPY, or other indexes only
strategy("50-150 INDEX TREND FOLLOWING", overlay=true)
//user input
fastSMA = input(title="Fast Moving Average (Int)",type=input.integer,minval=1,maxval=1000,step=1,defval=50,confirm=false)
slowSMA = input(title="Slow Moving Average (Int)",type=input.integer,minval=1,maxval=1000,step=1,defval=150,confirm=false)
longSlopeThreshold = input(title="Bullish Slope Angle (Deg)",type=input.integer,minval=-90,maxval=90,step=1,defval=5,confirm=false)
shortSlopeThreshold = input(title="Bearish Slope Angle (Deg)",type=input.integer,minval=-90,maxval=90,step=1,defval=-5,confirm=false)
atrValue = input(title="Average True Range (Int)",type=input.integer,minval=1,maxval=100,step=1,defval=14,confirm=false)
risk = input(title="Risk (%)",type=input.integer,minval=1,maxval=100,step=1,defval=100,confirm=false)
//create indicator
shortSMA = sma(close, fastSMA)
longSMA = sma(close, slowSMA)
//calculate ma slope
angle(_source) =>
rad2degree=180/3.14159265359
ang=rad2degree*atan((_source[0] - _source[1])/atr(atrValue))
shortSlope=angle(shortSMA)
longSlope=angle(longSMA)
//specify crossover conditions
longCondition = (crossover(shortSMA, longSMA) and (shortSlope > longSlopeThreshold)) or ((close > shortSMA) and (shortSMA > longSMA) and (shortSlope > longSlopeThreshold))
exitCondition = crossunder(shortSMA, longSMA) or (shortSlope < shortSlopeThreshold)
strategy.initial_capital = 50000
//units to buy
amount = (risk / 100) * (strategy.initial_capital + strategy.netprofit)
units = floor(amount / close)
//long trade
if (longCondition and strategy.position_size == 0)
strategy.order("Long", strategy.long, units)
//close long trade
if (exitCondition and strategy.position_size > 0)
strategy.order("Exit", strategy.short, strategy.position_size)
// Plot Moving Average's to chart
plot(shortSMA, color=color.blue)
plot(longSMA, color=color.green)