이 전략은 빠른 EMA 라인과 느린 EMA 라인을 계산하고 시장의 트렌드 방향을 결정하기 위해 두 EMA 사이의 크기 관계를 비교합니다. 간단한 트렌드 추적 전략에 속합니다. 빠른 EMA가 느린 EMA를 넘으면 길게 이동합니다. 빠른 EMA가 느린 EMA를 넘으면 짧게 이동합니다. 전형적인 이중 EMA 황금 십자가 전략입니다.
이 전략의 핵심 지표는 빠른 EMA와 느린 EMA입니다. 빠른 EMA 길이는 21 기간으로 설정되고 느린 EMA 길이는 55 기간으로 설정됩니다. 빠른 EMA는 최근의 단기 트렌드를 반영하여 가격 변화에 더 빠르게 반응 할 수 있습니다. 느린 EMA는 약간의 소음을 필터링하여 중장기 트렌드를 반영하여 가격 변화에 더 느리게 반응합니다.
빠른 EMA가 느린 EMA를 넘을 때, 단기 트렌드가 상승하고 중장기 트렌드가 역전될 수 있음을 나타냅니다. 이것은 긴 거리에 갈 신호입니다. 빠른 EMA가 느린 EMA를 넘을 때, 단기 트렌드가 하향으로 변하고 중장기 트렌드가 역전될 수 있음을 나타냅니다. 이것은 짧은 거리에 갈 신호입니다.
빠른 EMA와 느린 EMA를 비교함으로써, 단기 및 중장기, 두 가지 시간대에서 트렌드 반전 지점을 포착합니다. 이것은 전형적인 트렌드 추적 전략입니다.
위험 관리:
이 전략은 EMA 크로스오버를 기반으로 트렌드를 판단하며, 이는 간단하고 명확하게 구현할 수 있다. ATR 기반의 스톱으로 위험은 제어된다. 매개 변수 최적화와 필터링 조건으로 안정성과 수익성에 대한 추가 개선이 가능하다.
/*backtest start: 2023-10-21 00:00:00 end: 2023-11-20 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title = "VP Backtester", overlay=false) // Create General Strategy Inputs st_yr_inp = input(defval=2017, title='Backtest Start Year') st_mn_inp = input(defval=01, title='Backtest Start Month') st_dy_inp = input(defval=01, title='Backtest Start Day') en_yr_inp = input(defval=2025, title='Backtest End Year') en_mn_inp = input(defval=01, title='Backtest End Month') en_dy_inp = input(defval=01, title='Backtest End Day') // Default Stop Types fstp = input(defval=false, title="Fixed Perc stop") fper = input(defval=0.1, title='Percentage for fixed stop', type=float) atsp = input(defval=true, title="ATR Based stop") atrl = input(defval=14, title='ATR Length for stop') atrmsl = input(defval=1.5, title='ATR Multiplier for stoploss') atrtpm = input(defval=1, title='ATR Multiplier for profit') // Sessions asa_inp = input(defval=true, title="Trade the Asian Session") eur_inp = input(defval=true, title="Trade the European Session") usa_inp = input(defval=true, title="Trade the US session") ses_cls = input(defval=true, title="End of Session Close Out?") // Session Start / End times (In exchange TZ = UTC-5) asa_ses = "1700-0300" eur_ses = "0200-1200" usa_ses = "0800-1700" in_asa = time(timeframe.period, asa_ses) in_eur = time(timeframe.period, eur_ses) in_usa = time(timeframe.period, usa_ses) strategy.risk.allow_entry_in(strategy.direction.all) // Set start and end dates for backtest start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00) end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00) window() => time >= start and time <= end ? true : false // create function "within window of time" // Check if we are in a sessions we want to trade can_trade = asa_inp and not na(in_asa) ? true : eur_inp and not na(in_eur) ? true : usa_inp and not na(in_usa) ? true : false // atr calc for stop and profit atr = atr(atrl) atr_stp_dst_sl = atr * atrmsl atr_stp_dst_tp = atr * atrtpm //************************************************************************************* // Put your strategy/indicator code below // and make sure to set long_condition=1 for opening a buy trade // and short_condition for opening a sell trade //************************************************************************************* fastInput = input(21) slowInput = input(55) fast = ema(close, fastInput) slow = ema(close, slowInput) plot(fast, color = red) plot(slow, color = blue) long_condition = crossover(fast, slow) short_condition = crossunder(fast, slow) //************************************************************************************* // Trade management with ATR based stop & profit //************************************************************************************* if (long_condition and window() ) strategy.entry("Long Entry", strategy.long) if strategy.position_size <= 0 // Less than as in both direction strat - Could be long before switching if atsp atr_stop = open - atr_stp_dst_sl atr_profit = open + atr_stp_dst_tp strategy.exit('ATR Long Exit', "Long Entry", stop=atr_stop, limit = atr_profit) if fstp stop = open - (open * fper) strategy.exit('Perc Fixed Long Stop Exit', "Long Entry", stop=stop) if (short_condition and window() ) strategy.entry("Short Entry",strategy.short) if strategy.position_size >= 0 // Greater than as in both direction strat - Could be long before switching if atsp atr_stop = open + atr_stp_dst_sl atr_profit = open - atr_stp_dst_tp strategy.exit('ATR Short Exit', "Short Entry", stop=atr_stop, limit = atr_profit) if fstp stop = open + (open * fper) strategy.exit('Perc Fixed Short Stop Exit', "Short Entry", stop=stop) strategy.close_all(when=not can_trade and ses_cls)