Cette stratégie s'appelle
La logique de base consiste à compter le nombre de bougies de rapprochement (upCloseCount) et de bougies de rapprochement (downCloseCount) au cours de la dernière période de rétrospective. Si upCloseCount est plus grand, cela indique un marché haussier. Si downCloseCount est plus grand, cela indique un marché baissier. L'indicateur EMA est utilisé comme filtre, ne prenant en compte que le long lorsque le prix > EMA, et le court lorsque le prix < EMA. Il définit également la session1 et la session2 comme sessions de négociation.
Une logique détaillée:
Le signal long est déclenché lorsque: inSession est true (dans les séances de négociation) et upCloseCount > downCloseCount (plus près des bougies) et close > ema (prix de clôture supérieur à l'EMA) et currentSignal n'est pas
Le signal court est déclenché lorsque: inSession est true et downCloseCount > upCloseCount (plus bas les bougies de clôture) et close < ema (prix de clôture inférieur à EMA) et currentSignal n'est pas
Les solutions:
Cette stratégie identifie les signaux de tendance en comparant les bougies fermées et en bas et en utilisant le filtre EMA, au sein des sessions de négociation prédéfinies.
/*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")