
Chiến lược phá vỡ hai đường ngang là một chiến lược theo dõi xu hướng dựa trên sự giao thoa của đường trung bình di chuyển với hai chu kỳ khác nhau làm tín hiệu mua và bán. Chiến lược này sử dụng đường trung bình nhanh và điểm giao thoa của đường trung bình chậm làm điểm vào giao dịch, sau khi giao thoa, xác định hướng xu hướng và thiết lập vị trí đầu hoặc đầu không tương ứng.
Chiến lược này sử dụng hai đường trung bình di chuyển: một đường MA nhanh và đường MA chậm. Chu kỳ MA nhanh thường được thiết lập trong một chu kỳ ngắn hơn (như giai đoạn 15), để nắm bắt biến động giá trong thời gian ngắn; chu kỳ MA chậm thường được thiết lập trong một chu kỳ dài hơn (như giai đoạn 21), để xác định hướng của xu hướng chính.
Bằng cách thiết lập các cặp MA khác nhau, bạn có thể điều chỉnh thời gian chiến lược bắt được xu hướng. Các cặp MA ngắn hơn có thể bắt được cơ hội biến động giá trong các chu kỳ ngắn hơn; Các cặp MA dài hơn có thể lọc các biến động và chỉ bắt được xu hướng ở cấp độ dài hơn.
Chiến lược này cũng bao gồm các mô-đun quản lý rủi ro: Stop Loss, Stop Loss, Move Loss. Điều này có thể giới hạn mức lỗ tối đa cho mỗi giao dịch, giúp bảo vệ lợi nhuận tổng thể.
Chiến lược hai đường đều có những lợi thế sau:
Chiến lược hai đường một cũng có một số rủi ro, chủ yếu tập trung vào các khía cạnh sau:
Những rủi ro này có thể được cải thiện và tối ưu hóa bằng cách điều chỉnh tham số MA, thêm các điều kiện lọc và tối ưu hóa logic dừng lỗ.
Chiến lược hai đường thẳng có thể được tối ưu hóa từ các khía cạnh sau:
Bằng cách tối ưu hóa và cải tiến, chiến lược có thể cải thiện đáng kể tỷ lệ chiến thắng, lợi nhuận và lợi nhuận của rủi ro.
Chiến lược đột phá hai dòng đồng đều là một chiến lược theo dõi xu hướng dễ thực hiện và tối ưu hóa. Nó có những ưu điểm như hoạt động đơn giản, linh hoạt và có thể điều chỉnh rủi ro, rất phù hợp với chiến lược nhập cảnh cho giao dịch định lượng. Bằng cách liên tục kiểm tra và tối ưu hóa, chiến lược này có thể được cải thiện liên tục và có tiềm năng trở thành chiến lược tối ưu hóa.
/*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)