Chiến lược này sử dụng đường chéo vàng và đường chéo chết của hai đường EMA để xác định thời gian vào và ra. Cụ thể, khi đường EMA nhanh vượt qua trên đường EMA chậm từ phía dưới, một tín hiệu chéo vàng được tạo ra cho bước vào dài. Khi đường EMA nhanh vượt qua dưới đường EMA chậm từ phía trên, một tín hiệu chéo chết được tạo ra cho bước vào ngắn. Chiến lược này đơn giản và dễ thực hiện, và là một chiến lược giao dịch rất phổ biến.
Mã cốt lõi của chiến lược này là như sau:
fast = input(25, title="Fast")
slow = input(75, title="Slow")
matype1=ema(source, fast)
matype2=ema(source, slow)
longCondition = crossover(matype1, matype2)
shortCondition = crossunder(matype1, matype2)
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
Chiến lược này đầu tiên thiết lập hai đường EMA, với thời gian EMA nhanh là 25 và thời gian EMA chậm là 75. Sau đó nó tính toán các giá trị của hai đường EMA. Khi EMA nhanh vượt qua EMA chậm, longCondition trở thành true. Khi EMA nhanh vượt qua dưới EMA chậm, shortCondition trở thành true. Sau khi các điều kiện tương ứng là true, nó đi dài hoặc ngắn.
Chiến lược này sử dụng tính năng làm mịn của EMA để lọc tiếng ồn thị trường, trong khi có thể nhanh chóng nắm bắt những thay đổi xu hướng.
Những lợi thế của chiến lược này bao gồm:
Logic là đơn giản và trực quan, dễ hiểu và thực hiện.
EMA làm dịu biến động thị trường và lọc các tín hiệu sai một cách hiệu quả.
Chữ thập vàng và chữ thập chết là tín hiệu giao dịch mạnh mẽ để kiểm soát rủi ro.
Thời gian EMA linh hoạt phù hợp với môi trường thị trường khác nhau.
Dễ kết hợp với các chỉ số kỹ thuật khác.
Các thông số EMA có thể được tối ưu hóa để có kết quả tốt hơn.
Những rủi ro của chiến lược này bao gồm:
Các tín hiệu không hiệu quả thường xuyên trong các thị trường giới hạn phạm vi vì EMA thường xuyên vượt qua.
Sự chậm trễ của EMA có thể làm mất đi những cơ hội ngắn hạn.
EMA crossover một mình không thể xác định sự đảo ngược xu hướng, hạn chế tiềm năng lợi nhuận.
Thời gian EMA cố định không thể thích nghi với sự thay đổi của thị trường.
Cần vốn đáng kể, nếu không sẽ làm tăng rủi ro.
Cần phải dừng lỗ nghiêm ngặt, nếu không, lỗ đơn có thể rất lớn.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Tối ưu hóa thời gian EMA cho các điều kiện thị trường khác nhau.
Thêm các bộ lọc khác như MACD, Bollinger Bands để cải thiện chất lượng tín hiệu.
Thêm các chỉ số đánh giá xu hướng như ATR, ADX để giảm giao dịch không hiệu quả.
Kết hợp phân tích nhiều khung thời gian để xác định hướng xu hướng.
Sử dụng máy học để tối ưu hóa các khoảng thời gian EMA.
Tối ưu hóa kích thước vị trí để kiểm soát rủi ro.
Tối ưu hóa các chiến lược dừng lỗ để hạn chế lỗ đơn.
Chiến lược này sử dụng dấu hiệu giao dịch EMA vàng và chữ thập chết như là tín hiệu giao dịch, tạo thành một chiến lược theo xu hướng cổ điển. Nó đơn giản và dễ thực hiện, và có thể được kết hợp với các chỉ số khác, phù hợp với các nhà đầu tư với yêu cầu tương đối thấp về phán đoán xu hướng. Nhưng nó cũng có giới hạn lợi nhuận và rủi ro, đòi hỏi tối ưu hóa thích hợp cho các môi trường thị trường khác nhau. Nhìn chung, nó cung cấp một cơ sở tuyệt vời cho phát triển chiến lược và nghiên cứu sâu sắc.
/*backtest start: 2023-09-16 00:00:00 end: 2023-10-16 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // Double EMA CROSS By © EmreE (Emre Ertürk) Also thx for KivancOzbilgic color based bars //@version=4 strategy(title="Double EMA CROSS", shorttitle="DEC", overlay=true) matype = input("ema") hidema = input(false) sourcetype = input(close, title="Source Type") source=close // STEP 1: // Configure backtest start date with inputs startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=231) 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) // STEP 2: // See if this bar's time happened on/after start date afterStartDate = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) fast = input(25, title="Fast") slow = input(75, title="Slow") matype1=ema(source, fast) matype2=ema(source, slow) signalcolor = source > matype2 ? color.blue : color.red signal = cross(fast, slow) hizliema=plot(hidema ? na : matype1, color=color.green, linewidth=2,transp=0, title="Fast EMA") yavasema=plot(hidema ? na : matype2, color=color.red, linewidth=2,transp=0, title="Slow EMA") //kesisme=plot(signal, style=cross, color=signalcolor, linewidth=5, title="Kesişme") longCondition = crossover(matype1, matype2) if (afterStartDate and longCondition) strategy.entry("Long", strategy.long) shortCondition = crossunder(matype1, matype2) if (afterStartDate and shortCondition) strategy.entry("Short", strategy.short) //-------------------------------------------------------- //volume based color bars length=input(21, "length", minval=1) avrg=sma(volume,length) vold1 = volume > avrg*1.5 and close<open vold2 = volume >= avrg*0.5 and volume<=avrg*1.5 and close<open vold3 = volume < avrg *0.5 and close<open volu1 = volume > avrg*1.5 and close>open volu2 = volume >= avrg*0.5 and volume<=avrg*1.5 and close>open volu3 = volume< avrg*0.5 and close>open cold1=#800000 cold2=#FF0000 cold3=color.orange colu1=#006400 colu2=color.lime colu3=#7FFFD4 ac = vold1 ? cold1 : vold2 ? cold2 : vold3 ? cold3 : volu1 ? colu1 : volu2 ? colu2 : volu3 ? colu3 : na barcolor(ac)