Chiến lược giao dịch đường trung bình chuyển động Golden Cross là một chiến lược giao dịch định lượng cổ điển. Chiến lược này sử dụng đường trung bình chuyển động của các giai đoạn khác nhau để xác định xu hướng thị trường cho các vị trí dài và ngắn. Khi đường trung bình chuyển động ngắn hạn vượt trên đường trung bình chuyển động dài hạn, nó được coi là tín hiệu mua. Khi đường trung bình chuyển động ngắn hạn vượt dưới đường trung bình chuyển động dài hạn, nó được coi là tín hiệu bán.
Chiến lược này dựa trên ba mức trung bình di chuyển đơn giản (SMA) của các khoảng thời gian khác nhau: 50 ngày, 100 ngày và 200 ngày.
Tín hiệu nhập cảnh: khi đường trung bình động 50 ngày vượt qua đường trung bình động 100 ngày, đi dài.
Tín hiệu thoát: khi trung bình động 50 ngày vượt qua dưới trung bình động 100 ngày, đóng các vị trí; hoặc khi giá đóng dưới trung bình động 100 ngày, thoát; hoặc khi trung bình động 100 ngày vượt qua dưới trung bình động 200 ngày, thoát.
Lấy lợi nhuận và dừng lỗ: đặt lợi nhuận và dừng lỗ cố định.
Chiến lược này sử dụng khả năng của các đường trung bình động để xác định hiệu quả xu hướng giá trung bình của thị trường. Sự chéo chéo giữa đường trung bình ngắn hạn và đường trung bình dài hạn được xem là thị trường đang đi vào xu hướng tăng hoặc giảm, do đó là tín hiệu dài hoặc thoát. Điều này cho phép chiến lược nắm bắt hiệu quả xu hướng thị trường.
Đơn giản để thực hiện. Nó chỉ cần ba trung bình động của các giai đoạn khác nhau.
Đường trung bình động có khả năng lọc tiếng ồn làm giảm tác động của sự ngẫu nhiên trên thị trường và làm cho tín hiệu đáng tin cậy hơn.
Dễ dàng nắm bắt các xu hướng chính. Các đường trung bình động phản ánh hiệu quả những thay đổi trong xu hướng giá thị trường trung bình, sử dụng chéo giữa các đường ngắn hạn và dài hạn để xác định những thay đổi xu hướng chính.
Có khả năng tùy chỉnh cao. Các giai đoạn trung bình động có thể được điều chỉnh cho các mức độ kiểm soát rủi ro khác nhau.
Có thể tạo ra nhiều tín hiệu sai. Sự giao thoa thường xuyên có thể xảy ra khi trung bình ngắn hạn và dài hạn quá gần, dẫn đến tín hiệu không hợp lệ quá nhiều.
Chậm để phản ứng với các sự kiện đột ngột. Trung bình động phản ứng với sự thay đổi giá chậm và không thể phản ứng ngay lập tức với tin tức thị trường và các sự kiện lớn.
Không thể kiếm lợi nhuận từ những biến động nhỏ.
Lựa chọn tham số chủ quan: Thời gian trung bình động thích hợp chủ quan và phụ thuộc vào thị trường cụ thể.
Thêm bộ lọc để giảm tín hiệu sai, chẳng hạn như bộ lọc phạm vi giá để hạn chế tín hiệu chuyển động trên một cường độ nhất định.
Bao gồm các chỉ số khác cho các chiến lược kết hợp, có thể cải thiện độ chính xác tín hiệu, ví dụ như chỉ số biến động hoặc khối lượng.
Thêm các mô-đun tối ưu hóa thích nghi để tối ưu hóa các khoảng thời gian trung bình động dựa trên các thuật toán học máy, cho phép thích nghi với các điều kiện thị trường đang phát triển.
Kết hợp các mô hình học sâu tiên tiến thay vì trung bình động cho khả năng chiết xuất và mô hình hóa tính năng vượt trội.
Chiến lược giao dịch trung bình chuyển động Golden Cross là một chiến lược theo xu hướng điển hình. Nó phản ánh xu hướng giá thị trường trung bình một cách đơn giản và thực tế, phù hợp cho người mới bắt đầu. Tuy nhiên, nó cũng có một số lỗ hổng có thể được cải thiện bằng cách nâng cao chất lượng tín hiệu, kết hợp với các chỉ số kỹ thuật khác, giới thiệu các cơ chế thích nghi, vv để thích nghi với các thị trường phức tạp hơn. Nhìn chung, đây là một chiến lược có giá trị tham chiếu và học tập cao.
/*backtest start: 2023-12-03 00:00:00 end: 2023-12-10 00:00:00 period: 1m basePeriod: 1m 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/ // © CJDeegan //@version=4 strategy(title = "[LIVE] Golden Cross", overlay=true) // ------------Functions------------ //Percent to Decimal Conversion perToDec(a) => a * 0.01 //Price Difference to Tick diffToTick(a,b) => (a - b) / syminfo.mintick // ------------Strategy Inputs------------ takeProfitInput = input(300, "Take Profit Price (% Gain)") stopLossInput = input(25, "Stop Loss (% Loss)") 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=2018, minval=1800, maxval=2100) endDate = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=31) endMonth = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12) endYear = input(title="End Year", type=input.integer, defval=2031, minval=1800, maxval=2100) inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0)) // ------------Populate Indicators------------ //EMA sma50 = sma(close,50) sma100 = sma(close,100) sma200 = sma(close,200) // ------------Entry Logic------------ //Guards entryGuard = true //Triggers entryTrigger = crossover(sma50,sma100) //Conditions entryCondition = entryGuard and entryTrigger //Calculations //Execution if (inDateRange and entryCondition) strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry") //------------Exit Logic------------ //Guards //Triggers exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200) //Conditions exitCondition = exitTrigger //Calculations //Take Profit takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput)) //Take Profit Ticks takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price) //StopLoss stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput)) //Execution if (inDateRange) strategy.close("Long", when = exitCondition, comment = "Sell Trigger") strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice) //Plots plot(sma50, "SMA 50", color = color.blue) plot(sma100, "SMA 100", color = color.green) plot(sma200, "SMA 200", color = color.yellow) entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr) profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr) stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr) fill(entry,profit, color=color.green) fill(entry,stop, color=color.red)