Chiến lược theo dõi xu hướng chéo EMA kép

Tác giả:ChaoZhang, Ngày: 2024-02-29 11:45:42
Tags:

img

Tổng quan

Chiến lược theo dõi xu hướng chéo EMA kép là một chiến lược giao dịch định lượng sử dụng các chỉ số EMA kép để xác định hướng xu hướng giá. Chiến lược này tính toán hai chỉ số EMA với các tham số khác nhau và kết hợp tín hiệu chéo vàng và tín hiệu chéo chết để đánh giá xu hướng giá. Nó tạo ra tín hiệu mua khi EMA ngắn hơn vượt qua EMA dài hơn và tín hiệu bán khi EMA ngắn hơn vượt qua dưới EMA dài hơn.

Chiến lược logic

Các chỉ số cốt lõi của chiến lược này là hai bộ EMA, bao gồm EMA chu kỳ dài hơn 1 và EMA chu kỳ ngắn hơn 2.

Khi chu kỳ ngắn hơn EMA2 vượt qua trên chu kỳ dài hơn EMA1, một tín hiệu mua được tạo ra. Điều này cho thấy xu hướng giá ngắn hạn đã được tăng cường và xu hướng tăng đã bắt đầu. Khi chu kỳ ngắn hơn EMA2 vượt qua dưới chu kỳ dài hơn EMA1, một tín hiệu bán được tạo ra. Điều này cho thấy xu hướng tăng giá ngắn hạn đã bị gián đoạn và xu hướng giảm đã bắt đầu.

Để lọc các tín hiệu sai, chiến lược đặt ra hai bộ chỉ số thập giá vàng và thập giá chết.

Phân tích lợi thế

  • Cấu trúc EMA kép có thể nắm bắt hiệu quả những thay đổi trong xu hướng ngắn hạn và trung hạn để xác định xu hướng.

  • Việc lọc thêm hai bộ chỉ số chữ thập vàng và chữ thập chết có thể làm giảm các tín hiệu sai và tránh các giao dịch không cần thiết do biến động giá.

  • Việc sử dụng các mức 4 giờ để tính toán các chỉ số có thể đối phó với biến động giá thường xuyên.

  • Cấu trúc chiến lược đơn giản và rõ ràng, dễ hiểu và thực hiện và phù hợp với các ứng dụng giao dịch định lượng.

Phân tích rủi ro

  • Cấu trúc EMA kép ít hiệu quả hơn trong việc đánh giá thị trường hợp nhất.

  • Các chỉ số mức 4 giờ không đủ nhạy để phản ứng với các sự kiện đột ngột. Tin tức đột ngột lớn có thể gây ra những động thái lớn trong vòng 4 giờ mà không thể kiểm soát rủi ro hiệu quả.

  • Chiến lược chỉ dựa trên các chỉ số kỹ thuật mà không kết hợp phân tích cơ bản.

Những rủi ro này có thể được kiểm soát bằng cách:

  1. Thêm thêm các chỉ số EMA chu kỳ thời gian để thiết lập các kết hợp mô hình.

  2. Sử dụng phân tích tình cảm văn bản để xác định các sự kiện đột ngột lớn và điều chỉnh vị trí năng động.

  3. Kết hợp những thay đổi trong môi trường kinh tế, chính sách và các nguyên tắc cơ bản của công ty để điều chỉnh các tham số một cách năng động.

Tối ưu hóa

Chiến lược có thể được tối ưu hóa thêm:

  1. Thêm các kết hợp mô hình. Nhiều kết hợp chỉ số với các tham số khác nhau có thể được thiết lập để cải thiện tính ổn định của chiến lược.

  2. Thêm các cơ chế dừng lỗ. Các điểm dừng lỗ hợp lý có thể kiểm soát hiệu quả các lỗ đơn.

  3. Tối ưu hóa tham số động. Các tham số EMA có thể được tự động tối ưu hóa dựa trên các môi trường thị trường khác nhau.

  4. Kết hợp các kỹ thuật học máy. Các mô hình như Tensorflow có thể được đào tạo để phân loại xu hướng giá trong thời gian thực.

Kết luận

Chiến lược theo dõi xu hướng chéo vàng EMA kép là một chiến lược giao dịch xu hướng đơn giản và thực tế. Nó sử dụng các chỉ số EMA kép để xác định xu hướng giá ngắn và trung hạn để nắm bắt các cơ hội thị trường theo hướng. Đồng thời, kết hợp hai bộ chỉ số lọc chéo vàng và chéo chết có thể làm giảm các giao dịch sai. Chiến lược có cấu trúc đơn giản và dễ thực hiện, làm cho nó phù hợp với các ứng dụng giao dịch định lượng. Thông qua tối ưu hóa và cải tiến liên tục, nó có tiềm năng mở rộng thêm lợi thế của chiến lược và cải thiện lợi nhuận ổn định.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3


/// Component Code Startt
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

strategy(title="Ema cross strat", overlay=true)
margin = input(true, title="Margin?")
Margin = margin  ? margin : false
resCustom = input(title="EMA Timeframe", defval="240" )
source = close,
len2 = input(21, minval=1, title="EMA1")
len3 = input(10, minval=1, title="EMA2")
ema2 = request.security(syminfo.tickerid,resCustom,ema(source,len2), lookahead=barmerge.lookahead_off)
ema3 = request.security(syminfo.tickerid,resCustom,ema(source,len3), lookahead=barmerge.lookahead_off)


mylong = crossover(ema3, ema2)
myshort = crossunder(ema3,ema2)

last_long = na
last_short = na
last_long := mylong ? time : nz(last_long[1])
last_short := myshort ? time : nz(last_short[1])

in_long = last_long > last_short ? 2 : 0
in_short = last_short > last_long ? 2 : 0

mylong2 = crossover(ema3, ema2)
myshort2 = crossunder(ema3, ema2)

last_long2 = na
last_short2 = na
last_long2 := mylong2 ? time : nz(last_long2[1])
last_short2 := myshort2 ? time : nz(last_short2[1])

in_long2 = last_long2 > last_short2 ? 0 : 0
in_short2 = last_short2 > last_long2 ? 0 : 0

condlongx =   in_long + in_long2
condlong = crossover(condlongx, 1.9)
condlongclose = crossunder(condlongx, 1.9)

condshortx =  in_short + in_short2
condshort = crossover(condshortx, 1.9)
condshortclose = crossover(condshortx, 1.9)




if crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0
    strategy.entry("Long", strategy.long, comment="Long")

if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size > 0    
    strategy.close("Long",when = not Margin)
    
if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0
    strategy.entry("Short", strategy.short, comment="Short", when = Margin)

Thêm nữa