Chiến lược chéo trung bình động đôi là một chiến lược theo xu hướng sử dụng chéo của hai trung bình động của các giai đoạn khác nhau như tín hiệu giao dịch. Nó đi vào các vị trí dài hoặc ngắn khi MA nhanh vượt qua trên hoặc dưới MA chậm và xác định hướng xu hướng sau khi chéo. Nó có thể nắm bắt xu hướng trung hạn trong khi giảm tần suất giao dịch không cần thiết từ biến động quá mức.
Chiến lược sử dụng hai đường trung bình động: MA nhanh với thời gian ngắn hơn (ví dụ 15 thời gian) để nắm bắt các biến động giá ngắn hạn và MA chậm với thời gian dài hơn (ví dụ 21 thời gian) để xác định hướng xu hướng chính.
Bằng cách điều chỉnh các kết hợp thời gian MA, chiến lược có thể điều chỉnh khung thời gian của xu hướng để nắm bắt.
Chiến lược cũng kết hợp các mô-đun quản lý rủi ro bao gồm lấy lợi nhuận, dừng lỗ và dừng lỗ.
Chiến lược MA đôi có những lợi thế sau:
Ngoài ra còn có một số rủi ro cần xem xét:
Những điểm yếu này có thể được giảm thiểu thông qua tối ưu hóa như lọc tín hiệu, dừng lỗ kéo dài vv.
Chiến lược có thể được tăng cường trong các khía cạnh như:
Sự gia tăng đáng kể trong tỷ lệ chiến thắng, lợi nhuận điều chỉnh rủi ro được mong đợi từ những tăng này.
Nhìn chung, chiến lược chéo trung bình động kép cung cấp tính đơn giản, linh hoạt và rủi ro có thể kiểm soát được. Sự dễ dàng thực hiện và tối ưu hóa của nó làm cho nó trở thành một chiến lược lượng ban đầu lý tưởng. Với thử nghiệm và điều chỉnh lặp đi lặp lại, nó có thông tin để phát triển thành một hệ thống mạnh mẽ theo thời gian.
/*backtest start: 2022-12-10 00:00:00 end: 2023-06-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true) maFastSource = input(defval = ohlc4, title = "Fast MA Source") maFastLength = input(defval = 15, title = "Fast MA Period", minval = 1) maSlowSource = input(defval = ohlc4, title = "Slow MA Source") maSlowLength = input(defval = 21, title = "Slow MA Period", minval = 1) tradeInvert = input(defval = false, title = "Invert Trade Direction?") inpTakeProfit = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0) inpStopLoss = input(defval = 100, title = "Stop Loss", minval = 0) inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0) useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na useTimeLimit = input(defval = true, title = "Use Start Time Limiter?") startYear = input(defval = 2018, title = "Start From Year", minval = 0, step = 1) startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1) startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1) startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1) startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1) startTimeOk() => inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute) timeOk = time > inputTime ? true : false r = (useTimeLimit and timeOk) or not useTimeLimit maFast = ema(maFastSource, maFastLength) maSlow = sma(maSlowSource, maSlowLength) fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50) slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50) aboveBelow = maFast >= maSlow ? true : false tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false if( startTimeOk() ) enterLong = not tradeDirection[1] and tradeDirection exitLong = tradeDirection[1] and not tradeDirection strategy.entry( id = "Long", long = true, when = enterLong ) //strategy.close( id = "Long", when = exitLong ) enterShort = tradeDirection[1] and not tradeDirection exitShort = not tradeDirection[1] and tradeDirection strategy.entry( id = "Short", long = false, when = enterShort ) //strategy.close( id = "Short", when = exitShort ) strategy.exit("Exit Long", from_entry = "Long", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick) strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)