
Chiến lược này thực hiện LONG hoặc SHORT nhập vào khi chúng xảy ra Gold Fork hoặc Dead Fork bằng cách tính toán các đường trung bình di chuyển đơn giản 30 ngày nhanh và đường trung bình di chuyển đơn giản 33 ngày chậm của cổ phiếu. Chấm dứt ngay lập tức khi có tín hiệu ngược lại. Điều này có thể nắm bắt hiệu quả các thay đổi trong xu hướng.
Cốt lõi của chiến lược này là tính toán đường trung bình 30 ngày nhanh và đường trung bình 33 ngày chậm. Đường nhanh phản ứng nhanh hơn với sự thay đổi của giá trong khi đường chậm có hiệu quả sóng tốt hơn.
Bằng cách thiết kế chéo đường trung bình nhanh chậm như vậy, có thể tạo ra tín hiệu giao dịch khi xu hướng bắt đầu và dừng lại khi tín hiệu ngược lại xuất hiện, có hiệu quả trong việc nắm bắt xu hướng giá của đường dài và trung bình. Đồng thời tránh bị xáo trộn bởi quá nhiều biến động của thị trường.
Chiến lược này có một số ưu điểm:
Chiến lược này cũng có một số rủi ro:
Những rủi ro này có thể được kiểm soát và giảm thiểu bằng các phương pháp như tối ưu hóa tham số, thiết lập điểm dừng lỗ và giao dịch chỉ khi có xu hướng rõ ràng.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Bằng cách 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 tín hiệu giao dịch đáng tin cậy hơn trong các môi trường thị trường khác nhau.
Chiến lược phá vỡ chéo hai đường trung bình này khá đơn giản và thực tế, thông qua sự kết hợp của đường trung bình nhanh và đường trung bình chậm, có thể xác định hiệu quả sự bắt đầu của xu hướng đường trung bình dài, tạo ra tín hiệu giao dịch đáng tin cậy hơn. Ngoài ra, quy tắc dừng lỗ của nó cũng dễ thực hiện. Bằng cách 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 đáng giá để nắm giữ lâu dài.
/*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)