Strategi ini dinamakan
Logik terasnya adalah untuk mengira bilangan lilin dekat (upCloseCount) dan lilin dekat (downCloseCount) dalam tempoh kemunculan baru-baru ini. Jika upCloseCount lebih besar, ia menunjukkan pasaran bullish. Jika downCloseCount lebih besar, ia menunjukkan pasaran bearish. Indikator EMA digunakan sebagai penapis, hanya mempertimbangkan lama apabila harga > EMA, dan pendek apabila harga < EMA. Ia juga menetapkan sesi1 dan sesi2 sebagai sesi dagangan.
Logika terperinci:
Isyarat panjang diaktifkan apabila: inSession adalah benar (dalam sesi dagangan) dan upCloseCount > downCloseCount (lebih dekat dengan lilin) dan close > ema (harga penutupan lebih tinggi daripada EMA) dan currentSignal bukan
Isyarat pendek diaktifkan apabila: inSession adalah benar dan ke bawahCloseCount > ke atasCloseCount (lebih ke bawah tutup lilin) dan menutup < ema (harga penutupan lebih rendah daripada EMA) dan semasaSinyal bukan
Penyelesaian:
Strategi ini mengenal pasti isyarat trend dengan membandingkan lilin dekat dan bawah dekat dan menggunakan penapis EMA, dalam sesi dagangan yang telah ditetapkan. Ia mempunyai beberapa kesan trend tetapi juga risiko isyarat palsu.
/*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")