Chiến lược này dựa trên nguyên tắc chéo giữa các đường trung bình động để giao dịch. Nó sử dụng hai đường trung bình động, tạo ra tín hiệu mua khi đường trung bình động ngắn hạn vượt qua đường trung bình động dài hạn từ dưới. Các tín hiệu bán được tạo ra khi giá vượt qua đường trung bình động khác. Chiến lược này phù hợp với thị trường xu hướng, có thể lọc hiệu quả một số giao dịch tiếng ồn và nắm bắt xu hướng chính.
Chiến lược này sử dụng các khoảng thời gian trung bình di chuyển ngắn hạn và dài hạn có thể tùy chỉnh bởi người dùng, khoảng thời gian trung bình di chuyển thoát và các phương pháp tính toán trung bình di chuyển.
Khi đường trung bình chuyển động ngắn hạn vượt qua đường trung bình chuyển động dài hạn từ dưới, một tín hiệu mua được tạo ra. Điều này cho thấy xu hướng ngắn hạn đã chuyển sang xu hướng tăng, và chúng ta có thể mua.
Khi giá đóng phá vỡ dưới mức trung bình động ra, một tín hiệu bán được tạo ra. Điều này cho thấy một sự đảo ngược xu hướng, vì vậy chúng ta nên thoát khỏi vị trí.
Do đó, các tín hiệu giao dịch của chiến lược xuất phát từ sự chéo chéo của các đường trung bình động ngắn hạn và dài hạn, và mối quan hệ giữa giá đóng và đường trung bình động thoát.
Những lợi thế của chiến lược này là:
Đơn giản và dễ thực hiện.
Các thông số có thể tùy chỉnh phù hợp với các điều kiện thị trường khác nhau.
Đường trung bình động lọc ra tiếng ồn và nắm bắt xu hướng chính.
Có thể kết hợp các chỉ số kỹ thuật khác như xu hướng, hỗ trợ / kháng cự để tối ưu hóa hơn nữa.
Tỷ lệ rủi ro-lợi nhuận có thể kiểm soát được, có cơ chế dừng lỗ.
Những rủi ro là:
Có xu hướng tín hiệu sai trên các thị trường hợp nhất không có xu hướng.
Cài đặt tham số không chính xác có thể gây ra xu hướng bị thiếu hoặc quá nhiều giao dịch không hợp lệ.
Việc đặt stop loss không đúng có thể làm tăng lỗ.
Các vụ đào thoát thất bại có thể gây ra thiệt hại.
Các thông số cần được điều chỉnh kịp thời để phù hợp với những thay đổi của thị trường.
Các giải pháp bao gồm tối ưu hóa các thông số, kết hợp các bộ lọc khác, điều chỉnh dừng, chờ xác nhận xu hướng trước khi giao dịch, v.v.
Chiến lược này có thể được cải thiện bằng cách:
Phát triển các cơ chế xác định xu hướng và chỉ giao dịch sau khi xác nhận xu hướng.
Thêm các bộ lọc như âm lượng hoặc biến động vào các tín hiệu lọc.
Tối ưu hóa năng động của thời gian trung bình động.
Tối ưu hóa cơ chế dừng lỗ để sử dụng dừng lại.
Bao gồm hỗ trợ / kháng cự và các chỉ số khác để xác nhận thêm các tín hiệu.
Điều chỉnh các tham số dựa trên các sản phẩm và khung thời gian khác nhau.
Nhìn chung, chiến lược chéo trung bình động này là một hệ thống theo xu hướng đơn giản và thực tế. Nó có thể được điều chỉnh theo điều kiện thị trường bằng cách điều chỉnh các tham số và nắm bắt hướng xu hướng chính trong các thị trường xu hướng. Nhưng nên lưu ý các rủi ro như xác định sai xu hướng và tối ưu hóa liên tục là cần thiết để thích nghi với thị trường thay đổi. Nói chung, chiến lược này có khả năng sống tốt.
/*backtest start: 2022-10-30 00:00:00 end: 2023-11-05 00:00:00 period: 1d basePeriod: 1h 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/ // © TwoChiefs //@version=4 strategy("John EMA Crossover Strategy", overlay=true) //////////////////////////////////////////////////////////////////////////////// // BACKTESTING RANGE // From Date Inputs fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2020, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2021, title = "To Year", minval = 1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //////////////////////////////////////////////////////////////////////////////// //CREATE USER-INPUT VARIABLES periodShort = input(13, minval=1, title="Enter Period for Short Moving Average") smoothingShort = input(title="Choose Smoothing Type for Short Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"]) periodLong = input(48, minval=1, title="Enter Period for Long Moving Average") smoothingLong = input(title="Choose Smoothing Type for Long Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"]) periodExit = input(30, minval=1, title="Enter Period for Exit Moving Average") smoothingExit = input(title="Choose Smoothing Type for Exit Moving Average", defval="EMA", options=["RMA", "SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "LSMA"]) src1 = close pivot = (high + low + close) / 3 //MA CALCULATION FUNCTION ma(smoothing, src, length) => if smoothing == "RMA" rma(src, length) else if smoothing == "SMA" sma(src, length) else if smoothing == "EMA" ema(src, length) else if smoothing == "WMA" wma(src, length) else if smoothing == "VWMA" vwma(src, length) else if smoothing == "SMMA" na(src[1]) ? sma(src, length) : (src[1] * (length - 1) + src) / length else if smoothing == "HullMA" wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length))) //ASSIGN A MOVING AVERAGE RESULT TO A VARIABLE shortMA=ma(smoothingShort, pivot, periodShort) longMA=ma(smoothingLong, pivot, periodLong) exitMA=ma(smoothingExit, pivot, periodExit) //PLOT THOSE VARIABLES plot(shortMA, linewidth=4, color=color.yellow,title="The Short Moving Average") plot(longMA, linewidth=4, color=color.blue,title="The Long Moving Average") plot(exitMA, linewidth=1, color=color.red,title="The Exit CrossUnder Moving Average") //BUY STRATEGY buy = crossover(shortMA,longMA) ? true : na exit = crossunder(close,exitMA) ? true : na strategy.entry("long",true,when=buy and time_cond) strategy.close("long",when=exit and time_cond) if (not time_cond) strategy.close_all()