Chiến lược này tạo ra các tín hiệu nhập cảnh LONG hoặc SHORT khi trung bình di chuyển đơn giản nhanh 30 ngày và trung bình di chuyển đơn giản chậm 33 ngày của giá cổ phiếu giao nhau. Nó thoát khỏi vị trí ngay lập tức khi tín hiệu ngược lại xảy ra. Điều này có thể nắm bắt hiệu quả sự thay đổi của xu hướng.
Cốt lõi của chiến lược này là tính toán đường MA nhanh 30 ngày và đường MA chậm 33 ngày. Đường nhanh có thể phản ứng với sự thay đổi giá nhanh hơn trong khi đường chậm có hiệu ứng lọc tốt hơn. Khi đường nhanh vượt qua đường chậm lên, một tín hiệu mua được tạo ra. Điều này cho thấy giá bắt đầu tăng và đường nhanh đã phản ứng trong khi đường chậm vẫn tụt hậu. Khi đường nhanh vượt qua đường chậm xuống, một tín hiệu bán được tạo ra. Điều này cho thấy giá bắt đầu giảm trong khi đường nhanh đã phản ứng nhưng đường chậm vẫn tụt hậu.
Thông qua thiết kế chéo MA nhanh và chậm như vậy, nó có thể tạo ra các tín hiệu giao dịch khi một xu hướng mới bắt đầu, và thoát ra ở các tín hiệu ngược lại, có hiệu quả nắm bắt xu hướng giá trung và dài hạn.
Chiến lược có những lợi thế sau:
Ngoài ra còn có một số rủi ro cho chiến lược này:
Các phương pháp như tối ưu hóa tham số, thiết lập mức dừng lỗ, chỉ giao dịch khi xu hướng rõ ràng v.v. có thể được sử dụng để kiểm soát và giảm rủi ro đó.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Thông qua thử nghiệm và tối ưu hóa, các quy tắc chiến lược có thể được cải thiện liên tục để có được các tín hiệu giao dịch đáng tin cậy hơn trên các môi trường thị trường khác nhau.
Tóm lại, chiến lược đột phá chéo MA kép này khá đơn giản và thực tế. Bằng cách kết hợp MA nhanh và MA chậm, nó có thể xác định hiệu quả sự bắt đầu của xu hướng trung và dài hạn và tạo ra các tín hiệu giao dịch tương đối đáng tin cậy. Ngoài ra, quy tắc dừng lỗ của nó rất dễ thực hiện. Với tối ưu hóa hơn nữa, chiến lược này có thể trở thành một hệ thống định lượng dài hạn có giá trị.
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //future strategy //strategy(title = "es1!_1minute_hull", default_qty_type = strategy.fixed, initial_capital=250000, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2, calc_on_order_fills=false, calc_on_every_tick=false,pyramiding=0) //strategy.risk.max_position_size(2) //stock strategy strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=1000000, overlay = false)//, calc_on_order_fills=true, calc_on_every_tick=true) //forex strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true,initial_capital=250000, default_qty_type = strategy.percent_of_equity) //crypto strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true, commission_type=strategy.commission.percent,commission_value=.005,default_qty_value=10000) //strategy.risk.allow_entry_in(strategy.direction.long) // There will be no short entries, only exits from long. testStartYear = 2010 testStartMonth = 1 testStartDay = 1 testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testEndYear = 2039 testEndMonth = 1 testEndDay = 1 testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0) testPeriod() => //true time >= testPeriodStart and time <= testPeriodEnd ? true : false fast_length = 30 slow_length = 33 ema1 = 0.0 ema2 = 0.0 volumeSum1 = sum(volume, fast_length) volumeSum2 = sum(volume, slow_length) //ema1 := (((volumeSum1 - volume) * nz(ema1[1]) + volume * close) / volumeSum1) ema1 := ema(close,fast_length) //ema2 := (((volumeSum2 - volume) * nz(ema2[1]) + volume * close) / volumeSum2) ema2 := ema(close,slow_length) plot(ema1,color=#00ff00, linewidth=3) plot(ema2, color=#ffff00, linewidth=3) go_long = crossover(ema1,ema2) go_short = crossunder(ema1,ema2) if testPeriod() strategy.entry("long_ride", strategy.long, when=go_long) strategy.entry("short_ride", strategy.short,when=go_short) strategy.close("long_ride",when=go_short) strategy.close("short_ride",when=go_long)