
Đây là một chiến lược giao dịch dựa trên nguyên tắc quay trở về giá trị trung bình, để nắm bắt cơ hội đảo ngược giá trong ngắn hạn bằng cách xác định hình thức K đường liên tiếp giảm và tăng. Lập luận cốt lõi của chiến lược là tham gia nhiều hơn sau khi có 3 đường K đường liên tiếp giảm, và thoát khỏi vị trí bằng phẳng sau khi có 3 đường K đường liên tiếp tăng.
Chiến lược này dựa trên các yếu tố cốt lõi sau:
Đây là một chiến lược quay trở về giá trị trung bình được thiết kế hợp lý, thu lợi nhuận bằng cách nắm bắt cơ hội phục hồi giá vượt quá hoặc giảm trong ngắn hạn. Ưu điểm chính của chiến lược là logic đơn giản, khả năng thích ứng mạnh mẽ, nhưng trong ứng dụng thực tế, cần chú ý đến việc kiểm soát rủi ro, khuyến nghị tăng cường sự ổn định của chiến lược bằng cách thêm cơ chế dừng lỗ, tối ưu hóa các điều kiện lọc.
/*backtest
start: 2025-01-19 00:00:00
end: 2025-02-18 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("3 Down, 3 Up Strategy", overlay=true, initial_capital = 1000000, default_qty_value = 200, default_qty_type = strategy.percent_of_equity, process_orders_on_close = true, margin_long = 5, margin_short = 5, calc_on_every_tick = true)
//#region INPUTS SECTION
// ============================================
// Time Settings
// ============================================
startTimeInput = input(timestamp("1 Jan 2014"), "Start Time", group = "Time Settings")
endTimeInput = input(timestamp("1 Jan 2099"), "End Time", group = "Time Settings")
isWithinTradingWindow = true
// ============================================
// Strategy Settings
// ============================================
buyTriggerInput = input.int(3, "Consecutive Down Closes for Entry", minval = 1, group = "Strategy Settings")
sellTriggerInput = input.int(3, "Consecutive Up Closes for Exit", minval = 1, group = "Strategy Settings")
// ============================================
// EMA Filter Settings
// ============================================
useEmaFilter = input.bool(false, "Use EMA Filter", group = "Trend Filter")
emaPeriodInput = input.int(200, "EMA Period", minval = 1, group = "Trend Filter")
//#endregion
//#region INDICATOR CALCULATIONS
// ============================================
// Consecutive Close Counter
// ============================================
var int aboveCount = na
var int belowCount = na
aboveCount := close > close[1] ? (na(aboveCount) ? 1 : aboveCount + 1) : 0
belowCount := close < close[1] ? (na(belowCount) ? 1 : belowCount + 1) : 0
// ============================================
// Trend Filter Calculation
// ============================================
emaValue = ta.ema(close, emaPeriodInput)
//#endregion
//#region TRADING CONDITIONS
// ============================================
// Entry/Exit Logic
// ============================================
longCondition = belowCount >= buyTriggerInput and isWithinTradingWindow
exitCondition = aboveCount >= sellTriggerInput
// Apply EMA Filter if enabled
if useEmaFilter
longCondition := longCondition and close > emaValue
//#endregion
//#region STRATEGY EXECUTION
// ============================================
// Order Management
// ============================================
if longCondition
strategy.entry("Long", strategy.long)
if exitCondition
strategy.close_all()
//#endregion