Chiến lược này sử dụng một hệ thống trung bình động kép để xác định các cơ hội đột phá tiềm năng trong các cổ phiếu hoặc tiền điện tử được chọn. Nguyên tắc cốt lõi là mua khi trung bình động ngắn hạn bật trở lại từ dưới trung bình động dài hạn và bán khi giá kiểm tra lại trung bình động dài hạn.
Chiến lược này sử dụng hai đường trung bình di chuyển đơn giản (SMA) với các khoảng thời gian khác nhau làm tín hiệu giao dịch. SMA đầu tiên có khoảng thời gian dài hơn để đại diện cho hướng xu hướng tổng thể. SMA thứ hai có khoảng thời gian ngắn hơn để nắm bắt biến động giá ngắn hạn.
Khi SMA ngắn hạn vượt qua trên SMA dài hạn từ dưới, nó báo hiệu xu hướng tăng giá tổng thể do đó chiến lược mở một vị trí dài. Khi giá rút lại để kiểm tra lại SMA dài hạn, nó cho thấy sự rút lui ngắn hạn đã kết thúc và chiến lược xem xét dừng lại hoặc kiếm lợi nhuận từ vị trí.
Ngoài ra, chiến lược có các điều kiện "đã bán quá mức" và "đã mua quá mức" để tránh giao dịch trong các tình huống cực đoan.
Có thêm không gian để tối ưu hóa chiến lược này:
Chiến lược này kết hợp các điểm mạnh của giao dịch theo xu hướng và rút lui bằng cách sử dụng hệ thống trung bình động kép để phát hiện cơ hội. Đồng thời, các điều kiện mua quá mức / bán quá mức được nhúng tránh việc mở vị trí không cần thiết. Đây là một chiến lược giao dịch lượng rất thực tế đáng nghiên cứu sâu hơn và tối ưu hóa.
/*backtest start: 2023-02-20 00:00:00 end: 2024-02-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=5 strategy("Profitable Pullback Trading Strategy", overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Inputs ma_length1 = input.int(280,'MA length 1', step = 10,group = 'Moving Avg. Parameters', inline = 'MA') ma_length2 = input.int(13,'MA length 2', step = 1,group = 'Moving Avg. Parameters', inline = 'MA') sl = input.float(title="Stop Loss (%)", defval=0.07, step=0.1, group="Moving Avg. Parameters") too_deep = input.float(title="Too Deep (%)", defval=0.27, step=0.01, group="Too Deep and Thin conditions", inline = 'Too') too_thin = input.float(title="Too Thin (%)", defval=0.03, step=0.01, group="Too Deep and Thin conditions", inline = 'Too') // Calculations ma1 = ta.sma(close,ma_length1) ma2 = ta.sma(close,ma_length2) too_deep2 = (ma2/ma1-1) < too_deep too_thin2 = (ma2/ma1-1) > too_thin // Entry and close condtions var float buy_price = 0 buy_condition = (close > ma1) and (close < ma2) and strategy.position_size == 0 and too_deep2 and too_thin2 close_condition1 = (close > ma2) and strategy.position_size > 0 and (close < low[1]) stop_distance = strategy.position_size > 0 ? ((buy_price - close) / close) : na close_condition2 = strategy.position_size > 0 and stop_distance > sl stop_price = strategy.position_size > 0 ? buy_price - (buy_price * sl) : na // Entry and close orders if buy_condition strategy.entry('Long',strategy.long) if buy_condition[1] buy_price := open if close_condition1 or close_condition2 strategy.close('Long',comment="Exit" + (close_condition2 ? "SL=true" : "")) buy_price := na plot(ma1,color = color.blue) plot(ma2,color = color.orange)