Chiến lược này được gọi là
EMA chỉ số được sử dụng như một bộ lọc, chỉ xem xét dài khi giá > EMA, và ngắn khi giá < EMA. Nó cũng đặt session1 và session2 là các phiên giao dịch.
Logic chi tiết:
Tín hiệu dài được kích hoạt khi: inSession là true (trong các phiên giao dịch) và upCloseCount > downCloseCount (nhiều hơn các nến gần) và close > ema (giá đóng cao hơn EMA) và currentSignal không phải là
Tín hiệu ngắn sẽ được kích hoạt khi: inSession là true và downCloseCount > upCloseCount (nhiều hơn xuống) và close < ema (giá đóng thấp hơn EMA) và currentSignal không phải là
Giải pháp:
Chiến lược này xác định các tín hiệu xu hướng bằng cách so sánh các nến gần và gần và sử dụng bộ lọc EMA, trong các phiên giao dịch đã đặt trước. Nó có một số hiệu ứng theo xu hướng nhưng cũng có rủi ro của các tín hiệu sai. Cải thiện bằng cách tối ưu hóa các thông số, thêm stop loss, nâng cao bộ lọc vv. Đánh giá kỹ lưỡng trong backtest.
/*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")