Chiến lược chéo đường trung bình di chuyển là một chiến lược giao dịch định lượng rất phổ biến. Chiến lược này sử dụng đường trung bình di chuyển để đánh giá xu hướng để kiếm lợi nhuận. Khi đường trung bình di chuyển ngắn hạn vượt qua đường trung bình di chuyển dài hạn, cho thấy giá cổ phiếu bắt đầu tăng, bạn có thể làm nhiều hơn; khi đường trung bình di chuyển ngắn hạn vượt qua đường trung bình di chuyển dài hạn, cho thấy giá cổ phiếu bắt đầu giảm, bạn có thể làm trống.
Chiến lược này dựa trên đường trung bình di chuyển để xác định thời điểm mua và bán.upOrDownVàlongOrShortHai tham số nhập Boolean để đánh giá việc làm quá nhiều; sử dụngpercentInputNhập tham số để thiết lập phần trăm giảm giá của biến đổi giá cổ phiếu; sử dụngclosePositionDaysNhập tham số để thiết lập số ngày giữ vị trí.
Lập luận cốt lõi của chiến lược là: tính toán xu hướng giảm giá ngày hôm nay so với ngày hôm qua, nếu đạt được phần trăm giá trị giảm giá của đầu vào, sẽ phát ra tín hiệu giao dịch. Nếu là đợt tăng giá, hãy làm nhiều khi giá trị tăng giá ngày hôm nay so với ngày hôm qua vượt quá giá trị giảm giá; nếu là đợt giảm giá, hãy làm không khi giá trị giảm giá ngày hôm nay so với ngày hôm qua vượt quá giá trị giảm giá.
Sau khi thực hiện nhiều lần, nó sẽ được đánh dấu bằng màu sắc khác nhau trên bản vẽ ngày đó và 4 ngày sau đó.
Biện pháp kiểm soát rủi ro:
Chiến lược giao dịch chéo đường trung bình di chuyển là một chiến lược giao dịch định lượng rất đơn giản và thực tế. Nó lợi dụng xu hướng của giá cổ phiếu bằng cách đánh giá mối quan hệ giữa xu hướng ngắn hạn và dài hạn. Chiến lược này dễ thực hiện, logic rõ ràng, là cơ sở của nhiều chiến lược giao dịch định lượ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")