Chiến lược này sử dụng các nguyên tắc chéo vàng và chéo chết của các đường trung bình di chuyển đơn giản để thực hiện các vị trí dài và ngắn cho cổ phiếu.
Chiến lược đầu tiên xác định khung thời gian backtesting, sau đó thiết lập các tham số tính toán cho hai đường trung bình động, bao gồm loại MA và thời gian dài.
Chức năng getMAType () tính toán các giá trị của hai MA. fastMA là thời gian ngắn hơn MA, và slowMA là thời gian dài hơn MA.
Lý thuyết cốt lõi:
Khi fastMA vượt qua slowMA, một tín hiệu dài được kích hoạt.
Khi fastMA vượt qua dưới slowMA, một tín hiệu ngắn được kích hoạt.
Cuối cùng, trong quá trình backtesting, hãy giữ vị trí dài khi thấy tín hiệu dài, và giữ vị trí ngắn khi thấy tín hiệu ngắn.
Tối ưu hóa có thể đối với rủi ro:
Thêm các chỉ số kỹ thuật khác để xác định xu hướng.
Đưa stop loss vào kiểm soát cho mỗi khoản lỗ giao dịch.
Thêm các chỉ số khối lượng để tránh các thị trường thắt lưng.
Xây dựng các cơ chế tối ưu hóa tham số để tìm các tập hợp tham số tối ưu tự động.
Chiến lược có thể được tối ưu hóa thêm trong các khía cạnh sau:
Thêm các chiến lược dừng lỗ như điểm dừng lỗ cố định hoặc dừng lỗ để kiểm soát lỗ.
Thêm các chiến lược định hình vị trí như định hình vị trí cố định hoặc động để kiểm soát rủi ro giao dịch.
Thêm các bộ lọc bằng cách kết hợp với các chỉ số kỹ thuật khác để xác định xu hướng và cải thiện tỷ lệ thắng.
Tối ưu hóa các tham số bằng các phương pháp như tìm kiếm lưới và hồi quy tuyến tính để tìm ra các giá trị tối ưu.
Mở rộng các chiến lược nhập cảnh như Breakout pullback, quy mô trong các lệnh để làm phong phú chiến thuật giao dịch.
Thêm các chỉ số khối lượng để tránh các thị trường thắt lưng.
Mở rộng các sản phẩm đến chỉ số chứng khoán, ngoại hối, tiền điện tử v.v.
Chiến lược này thực hiện lựa chọn cổ phiếu dài / ngắn dựa trên các nguyên tắc chéo MA. Ý tưởng chiến lược đơn giản và rõ ràng, được sử dụng rộng rãi, thích nghi cao và thực tế có giá trị. Nhưng nó cũng có một số vấn đề về lọc chậm và whipsaw. Tối ưu hóa trong tương lai có thể tập trung vào cải thiện stop loss, tối ưu hóa tham số, thêm bộ lọc vv để làm cho nó có lợi hơn.
/*backtest start: 2023-09-10 00:00:00 end: 2023-10-10 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0) /////////////// Time Frame /////////////// testStartYear = input(2010, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true ///////////// MA Params ///////////// source1 = input(title="MA Source 1", defval=close) maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"]) length1 = input(title="MA Length 1", defval=50) source2 = input(title="MA Source 2", defval=close) maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"]) length2 = input(title="MA Length 2", defval=200) ///////////// Get MA Function ///////////// getMAType(maType, sourceType, maLen) => res = sma(close, 1) if maType == "ema" res := ema(sourceType, maLen) if maType == "sma" res := sma(sourceType, maLen) if maType == "swma" res := swma(sourceType) if maType == "wma" res := wma(sourceType, maLen) res ///////////// MA ///////////// fastMA = getMAType(maType1, source1, length1) slowMA = getMAType(maType2, source2, length2) long = crossover(fastMA, slowMA) short = crossunder(fastMA, slowMA) /////////////// Plotting /////////////// checkColor() => fastMA > slowMA colCheck = checkColor() ? color.lime : color.red p1 = plot(fastMA, color = colCheck, linewidth=1) p2 = plot(slowMA, color = colCheck, linewidth=1) fill(p1, p2, color = checkColor() ? color.lime : color.red) bgcolor(long ? color.lime : short ? color.red : na, transp=20) /////////////// Execution /////////////// if testPeriod() strategy.entry("Long", strategy.long, when=long) strategy.entry("Short", strategy.short, when=short)