Chiến lược này phát ra tín hiệu mua và bán bằng cách tính toán các đường trung bình di chuyển trong các chu kỳ khác nhau, xác định hướng xu hướng hiện tại và kết hợp với chỉ số RSI. Khi đường trung bình di chuyển ngắn hạn đi qua đường trung bình di chuyển dài hạn, cho rằng xu hướng đi lên, thực hiện giao dịch mua.
Tính trung bình di chuyển đơn giản 10, 20, 50, 100 và 200 ngày.
Tính RSI 14 ngày.
Mua được khi SMA 50 trên SMA 10 và RSI lớn hơn 30 và SMA 20 cao hơn hoặc bằng SMA 100 hoặc SMA 50 cao hơn hoặc bằng SMA 100 ngày.
Đặt giá dừng là điểm mua nhân 1 trừ phần trăm dừng.
Bán hàng được thực hiện khi:
Chiến lược này sử dụng đường trung bình di chuyển để đánh giá xu hướng của thị trường và thiết lập điểm dừng để kiểm soát rủi ro. Chỉ số RSI được sử dụng để lọc các đợt phá vỡ giả. Mua khi SMA ngắn hạn vượt qua SMA dài, cho thấy xu hướng lên, đặt đường dừng khi giữ cổ phiếu để kiểm soát rủi ro. Bán cổ phiếu khi có tín hiệu đảo ngược xu hướng hoặc khi giá dừng được kích hoạt.
Các phương pháp tối ưu hóa có thể được thực hiện bằng cách điều chỉnh chu kỳ trung bình di chuyển, điều chỉnh điểm dừng lỗ, v.v. Cũng có thể xem xét kết hợp với các chỉ số khác để tăng độ chính xác của quyết định.
Chiến lược tổng thể của chiến lược này rõ ràng, sử dụng xu hướng đánh giá xu hướng trung bình di chuyển và thiết lập dừng để kiểm soát rủi ro, là một chiến lược theo dõi xu hướng điển hình. Bằng cách điều chỉnh tham số và thêm các chỉ số đánh giá khác, bạn có thể cải thiện hơn nữa chiến lược phản hồi và hiệu suất thị trường. Nhưng không có chiến lược nào hoàn hảo, cần phải liên tục điều chỉnh và tối ưu hóa theo môi trường thị trường, phối hợp với quản lý rủi ro để đối phó với sự không chắc chắn của thị trường.
/*backtest
start: 2022-09-30 00:00:00
end: 2023-10-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("MA_Script", overlay=true)
// STEP 1:
// Configure trail stop level with input options (optional)
longTrailPerc=input(title="Trail Long Loss (%)", type=input.float, minval=0.0, step=0.05, defval=0.1)
// Configure backtest start date with inputs
startDate=input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31)
startMonth=input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12)
startYear=input(title="Start Year", type=input.integer, defval=2020, minval=1800, maxval=2100)
// See if this bar's time happened on/after start date
afterStartDate=(time >=timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0))
// Calculate Relative Strength Index
rsiValue=rsi(close, 14)
// Calculate moving averages
MA10_Val =sma(close, 10)
//plot(MA10_Val, color=color.yellow, linewidth=1)
MA20_Val =sma(close, 20)
plot(MA20_Val, color=color.green, linewidth=1)
MA50_Val =sma(close, 50)
plot(MA50_Val, color=color.red, linewidth=1)
MA100_Val =sma(close, 100)
plot(MA100_Val, color=color.blue, linewidth=1)
MA200_Val =sma(close, 200)
plot(MA200_Val, color=color.purple, linewidth=1)
// Calculate candlestick
C_BodyHi = max(close, open)
C_BodyLo = min(close, open)
C_Body = C_BodyHi - C_BodyLo
C_UpShadow = high - C_BodyHi
C_DnShadow = C_BodyLo - low
// STEP 2:
// Calculate entry trading conditions
buyCondition_1=crossover(MA10_Val, MA50_Val) and (rsiValue > 30) and ((MA20_Val >= MA100_Val) or (MA50_Val >= MA100_Val))
avg_price = (close + open)/2
// First Entry
if (afterStartDate)
strategy.entry(id="Entry_Trade_1", long=true, limit=avg_price, when=buyCondition_1)
plotchar(afterStartDate and crossover(MA10_Val, MA50_Val), textcolor = color.blue, text = 'MA\n')
// Determine trail stop loss prices
longStopPrice=0.0
longStopPrice :=if (strategy.position_size > 0)
stopValue=C_BodyHi * (1 - longTrailPerc)
max(stopValue, longStopPrice[1])
else
0
plot(longStopPrice, color=color.orange, linewidth=1)
bought_1=strategy.position_size[0] > strategy.position_size[1]
entry_Point_1=valuewhen(bought_1, avg_price, 0)
// STEP 3:
// Calculate exit trading conditions
sellCondition_2=crossunder(MA10_Val, MA50_Val) and (close < MA20_Val)
sellCondition_3_temp=valuewhen((C_BodyHi >= entry_Point_1*1.2), 1, 0)
sellCondition_1=(entry_Point_1*0.95 > close) and (sellCondition_3_temp != 1)
sellCondition_3=(sellCondition_3_temp == 1) and (strategy.position_size > 0) and close <= longStopPrice
plotchar((sellCondition_3 == 1) and (strategy.position_size > 0) and close <= longStopPrice, textcolor = color.red, text = 'TS\n', show_last = 11)
plotchar(crossunder(MA10_Val, MA50_Val), textcolor = color.red, text = 'MA\n')
id_val = ""
stop_val = close
condition = false
if sellCondition_1
id_val := "Exit By Stop Loss At 7%"
stop_val := entry_Point_1*0.93
condition := true
else if sellCondition_2
id_val := "Exit By Take Profit based on MA"
stop_val := close
condition := true
else if sellCondition_3
id_val := "Exit By Trailing Stop"
stop_val := longStopPrice
condition := true
// Submit exit orders for trail stop loss price
if (strategy.position_size > 0)
//strategy.exit(id="Exit By Stop Loss At 7%", from_entry="Entry_Trade_1", stop=entry_Point_1*0.93, when=sellCondition_1)
//strategy.exit(id="Exit By Take Profit based on MA", from_entry="Entry_Trade_1", stop=close, when=sellCondition_2)
strategy.exit(id=id_val, from_entry="Entry_Trade_1", stop=stop_val, when=condition)