다중 기간 EMA 교차 양적 거래 전략


생성 날짜: 2023-12-27 17:09:23 마지막으로 수정됨: 2023-12-27 17:09:23
복사: 0 클릭수: 640
avatar of ChaoZhang ChaoZhang
1
집중하다
1619
수행원

다중 기간 EMA 교차 양적 거래 전략

개요

이 글은 3개의 다른 주기에 대한 지수 이동 평균 (EMA) 교차점을 기반으로 한 정량 거래 전략을 소개한다. 이 전략은 EMA 교차점을 사용하여 주식 시장의 장기 및 단기 동향을 식별하여 효과적인 거래 결정을 수행하는 것을 목표로 한다.

전략 원칙

이 전략은 세 가지 다른 기간의 EMA를 사용한다: 10일, 100일, 200일. 짧은 기간의 EMA (일) 는 긴 기간의 EMA (일) 를 가로지르면, 가로지르는 방향에 따라 구매 또는 판매 신호를 생성한다. 이 전략은 또한 시간 필터를 결합하여 특정 기간 동안만 거래되도록 한다. 이 조합은 전략의 유연성과 적응력을 증가시킨다.

우위 분석

이 전략의 장점은 단순성과 높은 적응성이다. 다중 주기 EMA는 시장 추세에 대한 다각적인 관점을 제공하여 거래 의사 결정의 정확성을 증가시킵니다. 동시에 시간 필터는 시장의 특정 기간의 불안정성을 피하고 잠재적인 위험을 감소시킵니다.

위험 분석

이러한 전략이 효과적이기는 하지만, 위험은 존재한다. 주요 위험은 시장의 갑작스러운 사건이 전략의 실패로 이어질 수 있다는 것이다. 또한, EMA 지표는 시장의 변화를 반영하는 지연성이 있을 수 있다. 이러한 위험을 해결하는 방법은 실시간 시장 모니터링과 다른 기술 지표와 결합하여 의사 결정의 정확성을 높이는 것이다.

최적화 방향

전략의 최적화 방향은 상대적으로 약한 지수 ((RSI) 와 브린 밴드와 같은 여러 가지 기술 지표를 통합적으로 사용하여 시장 분석의 깊이와 폭을 강화하는 것입니다. 또한 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)