Chiến lược chéo trung bình động là một chiến lược giao dịch định lượng rất phổ biến. Nó sử dụng chéo vàng và chéo chết của trung bình động để xác định xu hướng và lợi nhuận. Khi trung bình động ngắn hạn vượt qua trên trung bình động dài hạn, nó báo hiệu xu hướng tăng, và một vị trí dài có thể được thực hiện. Khi trung bình động ngắn hạn vượt qua dưới trung bình động dài hạn, nó báo hiệu xu hướng giảm, và một vị trí ngắn có thể được thực hiện.
Chiến lược này dựa trên thập giá vàng và thập giá chết của đường trung bình động để xác định các điểm vào và ra.upOrDown
vàlongOrShort
để xác định dài hoặc ngắn;percentInput
để thiết lập tỷ lệ phần trăm ngưỡng thay đổi giá;closePositionDays
để thiết lập số ngày để giữ vị trí.
Lý thuyết cốt lõi là: tính toán mức tăng/giảm của ngày hôm nay so với ngày hôm qua. Nếu nó đạt đến tỷ lệ phần trăm ngưỡng đầu vào, một tín hiệu giao dịch sẽ được kích hoạt. Nếu đó là một tín hiệu dài, khi giá ngày hôm nay tăng hơn ngưỡng so với ngày hôm qua, đi dài. Nếu đó là một tín hiệu ngắn, khi giá ngày hôm nay giảm hơn ngưỡng so với ngày hôm qua, đi ngắn.
Sau khi mua/mua, ngày nhập cảnh và 4 ngày tiếp theo sẽ được đánh dấu bằng màu sắc trên biểu đồ.
Quản lý rủi ro:
Chiến lược chuyển trung bình chéo là một chiến lược giao dịch định lượng rất đơn giản và thực tế. Bằng cách đánh giá mối quan hệ giữa xu hướng ngắn hạn và dài hạn, nó lợi nhuận từ bản chất xu hướng của giá tài sản. Chiến lược này dễ thực hiện với logic rõ ràng, và tạo thành nền tảng của nhiều chiến lược giao dịch định lượng. Chúng ta có thể đạt được hiệu suất tốt hơn thông qua điều chỉnh tham số và tối ưu hóa. Nhưng chúng ta cũng cần quản lý rủi ro và tránh lạm dụng.
/*backtest start: 2023-01-01 00:00:00 end: 2023-10-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // Created by Leon Ross strategy(title = "DaysAfterCertainPercentChangev1", shorttitle = "DACPCv1", overlay = true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, calc_on_every_tick=true, initial_capital=100000) //Inputs longOrShort = input(title="Long=Checked Short=Unchecked", type=bool, defval=true) //long=true, down=false upOrDown = input(title="Direction of Today vs. Previous day: Up=Checked Down=Unchecked", type=bool, defval=true) //up=true, down=false: this is the direction of days vs previous day percentInput = input(title="Percent", type=float, defval=4.5) closePositionDays = input(title="How Many Days to Close Position", defval=4) //Conditions //percentUpValue = (close / close[1]) - 1 //percentUp = percentUpValue >= (percentInput/100.0) //upConditions = percentUp //percentDownValue = 1- (close / close[1]) //percentDown = percentDownValue >= (percentInput/100.0) //downConditions = percentDown upValue = (close / close[1]) - 1 downValue = 1 - (close / close[1]) allConditions = if(upOrDown) upValue >= (percentInput/100.0) else downValue >= (percentInput/100.0) //Plots bgcolor(allConditions ? (upOrDown ? green : red) : na, transp=70) bgcolor(allConditions ? silver : na, transp=70, offset=1) bgcolor(allConditions ? silver : na, transp=70, offset=2) bgcolor(allConditions ? silver : na, transp=70, offset=3) bgcolor(allConditions ? silver : na, transp=70, offset=4) //bgcolor(downConditions == 1 ? red : na, transp=70) //bgcolor(downConditions == 1 ? silver : na, transp=70, offset=1) //bgcolor(downConditions == 1 ? silver : na, transp=70, offset=2) //bgcolor(downConditions == 1 ? silver : na, transp=70, offset=3) //bgcolor(downConditions == 1 ? silver : na, transp=70, offset=4) //Entires if(longOrShort) strategy.entry(id = "Long", long = true, when = allConditions) else strategy.entry(id = "Short", long = false, when = allConditions) //Exits if (barssince(allConditions) == closePositionDays) if(longOrShort) strategy.close("Long") else strategy.close("Short")