
Chiến lược này được gọi là chiến lược giao dịch định lượng dựa trên so sánh giá đóng cửa K-line với lọc EMA. Chiến lược này được đánh giá bằng cách tính toán số lượng K-line đa đầu và K-line trống được tạo thành từ giá đóng cửa K-line trong một khoảng thời gian nhất định gần đây, kết hợp với lọc EMA, để đánh giá tín hiệu tháo lỗ khi phù hợp với khoảng thời gian giao dịch.
Lập luận cốt lõi của chiến lược này là số lượng K-line tăng lên và đóng cửa trong giai đoạn lookback gần đây upCloseCount và số lượng K-line giảm xuống CloseCount, nếu số lượng upCloseCount cao hơn thì được đánh giá là thị trường nhiều đầu, nếu số lượng đóng cửa giảm nhiều hơn thì được đánh giá là thị trường trống. Đồng thời kết hợp với chỉ số EMA để đánh giá xu hướng giá và làm bộ lọc, chỉ xem xét nhiều khi giá cao hơn EMA và xem xét trống khi giá thấp hơn EMA. Ngoài ra, chiến lược cũng thiết lập các giai đoạn giao dịch session1 và session2, trong đó chỉ giao dịch trong hai giai đoạn.
Lý do của việc này là:
Điều kiện kích hoạt tín hiệu đa đầu: inSession là true (trong khoảng thời gian giao dịch) và upCloseCount > downCloseCount (có nhiều dòng K của lệnh thu hồi) và close > ema (giá thu hồi cao hơn EMA) và currentSignal không phải là “long” (không có vị trí hiện tại)
Điều kiện kích hoạt tín hiệu đầu trống: inSession là true và downCloseCount > upCloseCount ((những dòng K đóng cửa giảm nhiều hơn) và close < ema ((giá đóng cửa thấp hơn EMA) và currentSignal không “short” ((không có vị trí hiện tại))
Phản ứng:
Chiến lược này xác định tín hiệu xu hướng trong thời gian giao dịch cụ thể được thiết lập bằng cách thống kê số lượng K-line nhiều đầu và K-line trống trong một khoảng thời gian lịch sử nhất định, kết hợp với hiệu quả lọc của chỉ số EMA. Có hiệu quả theo dõi xu hướng nhất định. Tuy nhiên, cũng có một số rủi ro giao dịch sai, cần được cải thiện bằng các phương pháp tối ưu hóa tham số, chiến lược dừng lỗ, tín hiệu lọc và các phương pháp khác để xác minh hiệu quả trong đo lại.
/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Up vs Down Close Candles Strategy with EMA and Session Time Frames", shorttitle="UvD Strat EMA Session", overlay=true)
// User input to define the lookback period, EMA period, and session strings for time frames
int lookback = input(20, title="Lookback Period")
int emaPeriod = input(50, title="EMA Period")
string session1 = input("0900-1200", title="Time Frame 1 Session")
string session2 = input("1300-1600", title="Time Frame 2 Session")
// Calculate the EMA
float ema = ta.ema(close, emaPeriod)
// State variable to track the current signal
var string currentSignal = na
// Counting up-close and down-close candles within the lookback period
int upCloseCount = 0
int downCloseCount = 0
if barstate.isnew
upCloseCount := 0
downCloseCount := 0
for i = 0 to lookback - 1
if close[i] > close[i + 1]
upCloseCount += 1
else if close[i] < close[i + 1]
downCloseCount += 1
// Define the long (buy) and short (sell) conditions with EMA filter and session time frame
bool inSession = time(timeframe.period, session1) or time(timeframe.period, session2)
bool longCondition = inSession and upCloseCount > downCloseCount and close > ema and currentSignal != "long"
bool shortCondition = inSession and downCloseCount > upCloseCount and close < ema and currentSignal != "short"
// Enter or exit the market based on conditions
if longCondition
currentSignal := "long"
strategy.entry("Buy", strategy.long)
if shortCondition
currentSignal := "short"
strategy.entry("Sell", strategy.short)
// Exit logic for long and short positions
if currentSignal == "long" and strategy.position_size <= 0
strategy.close("Sell")
if currentSignal == "short" and strategy.position_size >= 0
strategy.close("Buy")
plot(ema, color=color.blue, title="EMA")