
이 전략은 RSI 지표와 두 개의 다른 기간의 MA 평균의 교차를 통해 시장의 추세와 entrada 입문 시기를 판단한다. 이 전략은 RSI가 자신의 26 주기 평균보다 높을 때만 더 많이 하고, RSI가 자신의 26 주기 평균보다 낮을 때 공백을 해 위험을 통제한다.
이 전략은 12주기 및 26주기 두 개의 MA 평균선을 사용한다. 12주기 패스트 라인에서 26주기 슬로우 라인을 통과하면, 상향 트렌드에 진입한다고 간주하고, 패스트 라인 아래 슬로우 라인을 통과하면, 하향 트렌드에 진입한다고 간주한다. 전략은 평균선에서 황금 교차가 발생하면 더 많이 하고, 사망 교차가 발생하면 공백한다.
동시에, 전략은 RSI 지표를 도입하여 과매매 지역을 판단한다. RSI가 자신의 26주기 평균선보다 높을 때만, 평균선에서 금이 교차 할 때 더 많은 포지션을 열고, 자신의 26주기 평균선보다 낮은 RSI가 자신의 26주기 평균선보다 낮은 경우만, 평균선에서 사망이 교차 할 때 포지션을 열고, 공백을 한다. 이것은 거래가 과매되거나 과매 될 때 포지션을 강제하는 것을 피할 수 있으며, 따라서 위험을 통제한다.
이 전략은 평균선과 RSI 지표의 판단 트렌드 및 입시 시기를 결합하여 트렌드를 효과적으로 추적할 수 있다. RSI 지표를 필터링 조건으로 도입하면 포지션 개시 횟수를 줄일 수 있으며, 충격적인 상황에서 포스팅되는 것을 피할 수 있다. 스톱 손실을 설정하지 않고 트렌드를 충분히 추적하여 더 높은 수익을 얻을 수 있다.
스톱로드를 설정하지 않기 때문에, 판단이 잘못되면 손실이 커질 수 있다. 시장이 급격하게 하락하면 큰 손실이 발생할 수도 있다. 또한, RSI 필터링 조건이 잘못 설정되면 더 좋은 진입 시기를 놓칠 수도 있다.
최대 손실을 제어하기 위해 스톱로드를 설정하는 것을 고려할 수 있습니다. RSI의 매개 변수를 적절히 조정하여 더 나은 필터링 조건을 찾을 수 있습니다. 시장의 변동이 큰 경우 평균의 매개 변수를 적절히 조정하여 더 느린 평균을 사용하여 추세를 판단 할 수 있습니다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
다른 주기의 MA 평균선 조합을 테스트하여 현재 시장의 특성에 가장 잘 맞는 평균선 변수를 찾습니다.
RSI의 다른 주기 변수, 다른 필터 조건을 테스트하고, 진입 시기를 최적화한다.
다른 지표 또는 필터 조건을 추가하여 시스템의 안정성을 높여줍니다. 예를 들어, 양력 지표, 거래량 지표와 같은 추세 판단과 관련된 지표가 추가됩니다.
트렌드를 추적하는 동시에 위험을 제어하는 손실 전략을 최적화하십시오. 트래킹 스톱, 퍼센트 스톱, 동적 스톱과 같은 손실 전략을 테스트 할 수 있습니다.
이 전략은 전반적으로 간단하고 직접적이며, 평평선 교차 판단 트렌드를 통해 RSI는 포지션을 강제하는 것을 피하여 트렌드를 추적하여 더 나은 수익을 얻습니다. 파라미터를 최적화하고, 다른 지표를 추가하는 등의 방법으로이 전략을 더 개선하여 복잡한 변화하는 시장 환경에 더 적합하게 만들 수 있습니다.
/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "EMA Cross Strategy", shorttitle = "EMA Cross",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
StartYear = input(2018, "Backtest Start Year")
StartMonth = input(1, "Backtest Start Month")
StartDay = input(1, "Backtest Start Day")
UseStopLoss = input(false,"UseStopLoss")
//rsiLong = true
rsi1 = rsi(close, 14)
window() => true
stopLoss = input(20, title = "Stop loss percentage(0.1%)")
//stopLoss = input(200, title = "Stop loss percentage(0.1%)")
maFastSource = input(defval = open, title = "Fast MA Source")
maFastLength = input(defval = 12, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource = input(defval = open, title = "Slow MA Source")
maSlowLength = input(defval = 26, title = "Slow MA Period", minval = 1)
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)
//12 and 26=9%; 3 and8=2%; 26 and 55=2%; when selling on a cross under
//maFastRSI = ema(rsi1, 12)
//maSlowRSI = ema(rsi1, 26)
fast = plot(maFast, title = "Fast MA", color = #7a8598, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #e08937, linewidth = 2, style = line, transp = 50)
longEMA = crossover(maFast, maSlow)
exitLong = crossunder(maFast, maSlow) // 5% in 2018
//exitLong = crossunder(close, maFast) // 15% in 2018
//exitLong = crossunder(rsi1, maFastRSI) // 13%
shortEMA = crossover(maSlow, maFast)
exitShort = crossover(maFast, maSlow)
//if (rsi1 < ema(rsi1,7))
//rsiLong = false
//if (longEMA and (rsi1 >= highest(rsi1,10)))
//if (longEMA)
if (longEMA and (rsi1 > ema(rsi1,26))) //RSI ema values optimal from 19 to 35
strategy.entry("LongId", strategy.long, when=window())
//strategy.close_all(when = rsi1 > 60) // 80=26%, 90=n/a, 70=15%, 60=16% long only
//strategy.close_all(when = (shortEMA and (rsi1 <= ema(rsi1,26)))) //10% gain in 2018 long only
//strategy.close_all(when = (rsi1 <= ema(rsi1,120))) //26=17% 14=2% 42=15%
//strategy.close_all(when = (shortEMA)) // 5% gain in 2018 long only
//strategy.close_all(when = exitLong)
//if (shortEMA and not(rsiLong))
//if (shortEMA)
if (shortEMA and (rsi1 <= ema(rsi1,26)))
strategy.entry("ShortId", strategy.short, when=window())
if (UseStopLoss)
strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick)
strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)