Chiến lược theo xu hướng dựa trên EMA và phân kỳ ẩn


Ngày tạo: 2024-02-02 16:54:27 sửa đổi lần cuối: 2024-02-02 16:54:27
sao chép: 0 Số nhấp chuột: 833
1
tập trung vào
1617
Người theo dõi

Chiến lược theo xu hướng dựa trên EMA và phân kỳ ẩn

Tổng quan

Chiến lược này mở vị trí nhiều đầu dựa trên tín hiệu biến động ẩn của đường trung bình EMA và chỉ số RSI, bằng cách nhận ra các điểm đặc trưng hình thành biến động ẩn, đánh giá hiện tại là bắt đầu của xu hướng tăng, làm tín hiệu mở vị trí. Đồng thời, kết hợp với đường trung bình EMA và giá đóng cửa đường K trên đường trung bình EMA, đảm bảo xu hướng tăng.

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

  1. Chiến lược đường trung bình EMA: Sử dụng đường trung bình EMA 50 chu kỳ và 250 chu kỳ để đánh giá xu hướng giao dịch vàng, xem giá vượt qua 50 EMA là tín hiệu đa đầu.

  2. RSI ẩn deviation chiến lược: Chỉ số RSI có một thấp thấp, và giá có một cao thấp dấu hiệu ẩn nhiều đầu deviation, báo trước sự bắt đầu của sự đảo ngược.

  3. Chiến lược khép lại đường K: Khép lại đường K khi giá khép lại đường K vượt quá 50 EMA.

Các chiến lược trên được kết hợp để đánh giá xu hướng đang bắt đầu tăng điểm và mở nhiều vị trí.

Phân tích lợi thế

  1. Sử dụng đường trung bình EMA để xác định hướng xu hướng, kết hợp với tín hiệu đảo ngược của chỉ số RSI, bạn có thể mở vị trí khi xu hướng bắt đầu.

  2. Cơ chế xác nhận kép, sử dụng kết hợp EMA, RSI và giá đóng cửa đường K, có thể lọc hiệu quả các tín hiệu giả.

  3. Theo dõi xu hướng đường dài trung bình, phù hợp để đánh giá xu hướng tăng mới bắt đầu sau khi điều chỉnh.

Phân tích rủi ro

  1. Khi EMA tạo ra một cái chết, bạn cần phải thanh toán kịp thời.

  2. RSI ẩn đi từ tín hiệu phán đoán cần một số kinh nghiệm, tham số thiết lập không đúng có thể bỏ lỡ tín hiệu hoặc phán đoán sai.

  3. Các tham số cho các loại giao dịch cần được thiết lập tối ưu.

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

  1. Động thái điều chỉnh các tham số của đường trung bình EMA, tối ưu hóa tính chính xác của xu hướng phán đoán.

  2. Điều chỉnh các tham số RSI để tối ưu hóa tính chính xác trong việc xác định sai lệch ẩn.

  3. Tham gia vào các cơ chế dừng lỗ và kiểm soát rủi ro bằng cách sử dụng ATR hoặc dừng phần trăm.

  4. Phát triển các chiến lược giao dịch không đầu để mở các vị trí không đầu trong xu hướng giảm.

Tóm tắt

Chiến lược này sử dụng EMA trung bình để đánh giá xu hướng lớn, kết hợp với chỉ số RSI để tăng độ chính xác của phán đoán, đánh giá xu hướng tăng mới bắt đầu sau khi kết thúc, thuộc về chiến lược theo dõi xu hướng bảo thủ hơn. Bằng cách tối ưu hóa các tham số thiết lập và thêm phương tiện dừng lỗ, có thể đạt được hiệu quả tốt hơn.

Mã nguồn chiến lược
/*backtest
start: 2024-01-25 00:00:00
end: 2024-02-01 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="EMA RSI ATR Hidden Div Strat", shorttitle="Hidden Div Strat", overlay = true, pyramiding = 0, max_bars_back=3000, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital=5000, currency=currency.USD)

// Time Range
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2020,title="FromYear",minval=2016)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true

// Bar's time happened on/after start date?
afterStartDate = time >= start and time<=finish?true:false

//EMA'S
emasrc = close

len1 = input(50, minval=1, title="EMA1")
ema1 = ema(emasrc, len1)
col1 = color.white

len2 = input(250, minval=1, title="EMA2")
ema2 = ema(emasrc, len2)
col2 = color.yellow

//Plots
plot(ema1, title="EMA1", linewidth=1, color=col1)
plot(ema2, title="EMA2", linewidth=1, color=col2)

//Stoch
periodK = input(4, title="K", minval=1)
periodD = input(4, title="D", minval=1)
smoothK = input(3, title="Smooth", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)

//Hidden Divergence Indikator

len = input(title="RSI Period", minval=1, defval=14)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=1)
lbL = input(title="Pivot Lookback Left", defval=19)
rangeUpper = input(title="Max of Lookback Range", defval=20)
rangeLower = input(title="Min of Lookback Range", defval=4)
hiddenBullColor = color.new(color.green, 80)
textColor = color.white
noneColor = color.new(color.white, 100)
osc = rsi(src, len)

plFound = na(pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
	bars = barssince(cond == true)
	rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low

oscLL = osc[lbR] < valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low

priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)
hiddenBullCond = priceHL and oscLL and plFound

//buy Conditions
buyhiddenbull = hiddenBullCond[1] or hiddenBullCond[2] or hiddenBullCond[3] or hiddenBullCond[4] or hiddenBullCond[5] or hiddenBullCond[6] or hiddenBullCond[7] or hiddenBullCond[8] or hiddenBullCond[9] or hiddenBullCond[10]
emacondition = ema1 > ema2
upcondition = close[1] > ema1[1] and ema2[1] and close[2] > ema1[2] and ema2[2] and close[3] > ema1[3] and ema2[3]
crossup = k[0] >= d[0] and k[1] <= d[1]
longcondition = emacondition and upcondition and crossup and buyhiddenbull

if (afterStartDate)
    strategy.entry("Long", strategy.long, when = longcondition)

//TakeProfit, StopLoss lowest low
profitfactor = input(title="Profitfactor", type=input.float, step=0.1, defval=1.6)
loLen = input(title="Lowest Low Lookback", type=input.integer,
  defval=38, minval=2)
stop_level = lowest(low, loLen)[1]
bought = strategy.position_size[1] < strategy.position_size
barsbought = barssince(bought)

if strategy.position_size>0
    profit_level = strategy.position_avg_price + ((strategy.position_avg_price - stop_level[barsbought])*profitfactor)
    strategy.exit(id="TP/ SL", stop=stop_level[barsbought], limit=profit_level)