이 문서에서는 세 가지 다른 기간에 걸쳐 기하급수적 이동 평균 (EMA) 의 교차점을 기반으로 한 양적 거래 전략을 소개합니다. 이 전략은 효과적인 거래 결정을 위해 주식 시장의 장기 및 단기 트렌드를 식별하기 위해 EMA 교차점을 활용하는 것을 목표로합니다.
이 전략은 10일, 100일, 200일이라는 세 가지 다른 기간의 EMA를 사용한다. 단기 EMA (10일) 가 더 긴 기간의 EMA (100일 또는 200일) 를 넘을 때 크로스오버 방향에 따라 구매 또는 판매 신호가 생성된다. 이 전략은 또한 특정 시간 프레임 내에서만 거래가 실행되도록 시간 필터를 통합한다. 이 조합은 전략에 유연성과 적응성을 추가한다.
이 전략의 강점은 단순성과 높은 적응력이다. 다기기 EMA는 시장 트렌드에 대한 다차원적 시각을 제공하여 거래 결정의 정확성을 높인다. 또한 시간 필터는 특정 시장 기간 동안 불안정을 피하고 잠재적 위험을 줄인다.
이 전략의 효율성에도 불구하고, 이 전략은 특정 위험을 안고 있다. 주요 위험은 예측할 수 없는 사건으로 인한 시장 변동성이며, 이는 전략 실패로 이어질 수 있다. 또한, EMA는 지연되어 시장 변화의 반영을 지연시킬 수 있다. 이러한 위험을 완화하기 위한 방법에는 실시간 시장 모니터링과 의사결정 정확성을 높이기 위해 다른 기술적 지표를 결합하는 것이 포함된다.
전략의 최적화 방향은 상대적 강도 지수 (RSI) 와 볼링거 밴드 (Bollinger Bands) 와 같은 다양한 기술적 지표의 통합 사용으로 시장 분석을 심화하고 넓힐 수 있습니다. 또한 EMA의 기간을 다른 시장 조건에 더 잘 맞게 조정하는 것이 유용 할 수 있습니다.
전체적으로,
다기기 EMA 크로스오버 양적 거래 전략은 거래자가 변동적인 시장에서 더 나은 결정을 내리는 데 도움이 될 수있는 효과적인 도구입니다. 시장 변화에 대한 지속적인 최적화와 적응으로이 전략은 미래의 거래 노력에서 더 높은 수익을 얻을 수 있습니다.
/*backtest start: 2022-12-20 00:00:00 end: 2023-12-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 start = timestamp(2023,1,1,0,0) end = timestamp(2024,1,1,0,0) strategy("Tester Emas", overlay = true) periodo1 = input(10,"Periodo_1") periodo2 = input(100,"Periodo_2") periodo3 = input(200,"Periodo_3") //definir media moviles ema1 = ta.ema(close,periodo1) ema2 = ta.ema(close,periodo2) ema3 = ta.ema(close,periodo3) //Desde desde_a = input(2000, title = "Desde año") desde_m = input.int( 1, title = "Desde mes", minval=1, maxval = 12) desde_d = input.int( 1, title = "Desde dia", minval=1, maxval = 31) //Hasta hasta_a = input(2030, title = "Hasta año") hasta_m = input.int( 1, title = "Hasta mes", minval=1, maxval = 12) hasta_d = input.int( 1, title = "Hasta dia", minval=1, maxval = 31) FechaValida() => true //Condicion de entradas longCondition = ta.crossover(ema1, ema2) shortCondition = ta.crossunder(ema1,ema2) alcista = (ema1 > ema2) and (ema2 > ema3) comprado =strategy.position_size > 0 //Comprar o vender segun las condiciones de entradas //if (longCondition) if (not comprado and alcista and FechaValida()) // Round redondea mi capital para comprar las acciones en cantidades enteras cantidad = math.round(strategy.equity/ close) strategy.entry("Compra", strategy.long, cantidad) //if (shortCondition) if (comprado and not alcista and FechaValida()) //strategy.entry("Venta", strategy.short) strategy.close("Compra" , comment = "Venta") if (comprado and not FechaValida()) //Cierre x finalizacion de periodo //strategy.entry("Venta", strategy.short) strategy.close("Compra" , comment = "Venta x fin") //Graficar las medias moviles plot(ema1, color = color.green, title = "Ema1") plot(ema2, color = color.yellow, title = "Ema2") plot(ema3, color = color.red, title = "Ema2") //GMarca los cruces de medias bgcolor(longCondition ? color.green : na) bgcolor(shortCondition ? color.red : na)