리소스 로딩... 로딩...

트리플 EMA 모멘텀 전략

저자:차오장, 날짜: 2023-09-27 17:19:26
태그:

전반적인 설명

이 전략은 리스크 관리를 가진 메이저를 위한 SoftKill21의 어메이징 스칼퍼에서 수정되어 레이그를 줄이기 위해 단순한 이동 평균 대신 세 배 지수 지수 이동 평균을 사용합니다. 1 분 시간 프레임에서 주요 통화 쌍에 적합하며, 빠른 EMA, 표준 EMA 및 느린 EMA의 황금 십자 및 죽음의 십자 기반의 트렌드 다음 접근 방식을 채택합니다. 또한 런던과 뉴욕 세션과 리스크 관리 원칙을 통합하여 포지션 크기를 결정합니다.

전략 논리

이 전략은 25주기 빠른 EMA, 50주기 표준 EMA 및 100주기 느린 EMA 등 다양한 기간을 가진 세 개의 EMA를 사용합니다. 빠른 EMA가 표준 EMA와 느린 EMA를 넘을 때 구매 신호를 생성합니다. 빠른 EMA가 표준 EMA와 느린 EMA를 넘을 때 판매 신호를 생성합니다. 지연을 줄이기 위해 EMA는 이중 기하급수 평형 기술을 사용하여 계산됩니다. 이 전략은 런던 또는 뉴욕 세션의 오픈 시장 시간이 진입 조건과 일치하는지 확인합니다. 또한 각 주문의 위치 크기는 위험을 제어하기 위해 계정 자본의 일정한 비율을 사용하여 동적으로 결정됩니다.

특히, 전략은 먼저 세 개의 EMA 라인을 계산하고, 빠른 EMA가 표준 EMA와 느린 EMA와 황금 십자가 또는 죽음의 십자가를 형성하는지 확인합니다. 조건이 런던 또는 뉴욕 오픈 시장 시간에도 일치하면 구매 또는 판매 신호가 생성됩니다. 포지션 크기를 결정 할 때 전략은 위험 노출로 계좌 자본의 고정 비율을 계산하고, 각 주문에 대해 포지션을 동적으로 조정하기 위해 계약 크기 및 둥근 롯으로 변환합니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 트리플 EMA는 가격 데이터를 효과적으로 매끄럽게하고 트렌드 방향을 식별 할 수 있습니다. 빠른 EMA는 가격 변화에 민감하며 표준 EMA는 꾸준히 추적하며 느린 EMA는 소음을 필터합니다. 함께 사용하면 잘못된 브레이크를 필터링하고 트렌드 방향을 결정할 수 있습니다.

  2. 이중 기하급수 평형의 사용은 지연을 줄이고 신호를 더 민감하게 만듭니다.

  3. 주요 거래 세션을 포함하면 비정상 시간 동안 잘못된 신호를 피할 수 있습니다.

  4. 리스크 관리 방식은 계좌 자금에 따라 포지션 크기를 조정하여 단일 거래에서 과도한 손실을 피합니다.

  5. 논리는 간단하고 명확하고, 이해하기 쉽고 실행하기 쉽고, 초보자에게 적합합니다.

  6. 이 전략은 다양한 통화 쌍과 시간 프레임에 최적화되고 조정될 수 있으며, 광범위한 적용이 가능합니다.

위험 분석

이 전략은 또한 몇 가지 잠재적인 위험을 가지고 있습니다.

  1. EMA는 갑작스러운 사건으로 인한 단기 가짜 브레이크를 효과적으로 필터 할 수 없으며 잘못된 신호를 생성 할 수 있습니다. 필터 및 분석에 다른 지표가 추가 될 수 있습니다.

  2. 고정 비율 포지션 사이징은 시장 변동에 동적으로 적응할 수 없으며, 너무 크거나 미미한 포지션으로 이어집니다. 변동성에 기반한 동적 포지션 사이징을 고려할 수 있습니다.

  3. 두 개의 주요 세션만 고려되며 다른 세션에서 거래 기회를 놓칠 수 있습니다. 다른 세션의 효과를 테스트 할 수 있습니다.

  4. 스톱 로스 메커니즘이 없으면 일방적 손실을 효과적으로 제어할 수 없습니다. 이동 또는 시간 기반 스톱 로스는 구현 될 수 있습니다.

  5. EMA 크로스오버는 약간의 지연이 있으며 가장 좋은 입시 시기를 놓칠 수 있습니다. EMA 기간을 줄이거나 선도 지표를 통합하는 것이 도움이 될 수 있습니다.

  6. 성과는 거래 비용에 영향을 받을 수 있습니다. 스톱 로스 및 취익 수준은 이에 따라 조정되어야 합니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 최적의 조합을 찾기 위해 다른 EMA 기간 매개 변수를 테스트합니다. 적응 EMA를 도입하여 기간을 동적으로 최적화 할 수 있습니다.

  2. 신호 품질을 향상시키기 위해 RSI, 볼링거 밴드 같은 다른 필터링 지표를 추가하십시오.

  3. 시장의 변동성과 수익성에 기초한 역동적인 포지션 크기를 도입합니다.

  4. 손실을 제한하기 위해 이동 또는 시간 중지 손실을 추가하십시오.

  5. 최적의 시간을 찾기 위해 다른 거래 세션을 테스트하십시오. 변동성 측정은 스크린에 도움이 될 수 있습니다.

  6. 수익 규모와 승률을 균형을 맞추기 위해 수익을 취하고 손실을 멈추는 수준을 최적화합니다.

  7. EMA 계산을 직선 가중된 EMA와 같이 수정해서 지연을 줄여보세요.

  8. 최적의 매개 변수를 찾기 위해 기계 학습을 사용하세요.

  9. 거래 비용 모델 및 최대 순이익을 위한 조정 시스템

위의 최적화를 통해 시스템의 수익성이 향상되고, 마감량은 통제되고, 적용 가능성은 확장되어 더 강력하고 견고한 거래 전략을 얻을 수 있습니다.

요약

이 전략의 전반적인 논리는 트렌드를 식별하기 위해 트리플 EMA를 사용하여 실행을 위해 주요 세션과 결합하고 계정 비율에 기반한 포지션 사이징을 채택하는 것이 분명합니다. 전형적인 트렌드 다음 시스템에 속합니다. 매개 변수 조정, 메커니즘 개선, 기술 도입 등을 통해 최적화 할 수있는 많은 공간이 있습니다. 더 많은 시장에 적용 가능성을 확대하고 견고함을 향상시키기 위해. 초보자를위한 학습 e로서 좋은 출발점을 제공합니다. 연습과 향상으로 성숙하고 신뢰할 수있는 정량 전략으로 변할 수 있습니다.


/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// original author SoftKill21
//@version=4
//@capam 

strategy(title="Triple EMA Scalper low lag strat", shorttitle="3EMA scalper", overlay=true)
strategy.initial_capital = 50000
len1 = input(25, minval=1, title="Length")
len2 = input(50, minval=1, title="Length")
len3 = input(100, minval=1, title="Length")

src = input(close, title="Source")
tmp1 = ema(src, len1)
tmp2 = ema(src, len2)
tmp3 = ema(src, len3)
fastemaOut = 2*tmp1 - ema(tmp1, len1)
standardemaOut = 2*tmp2 - ema(tmp2, len2)
slowemaOut = 2*tmp3 - ema(tmp3, len3)
//fastemaOut = sma(src, len1)
//standardemaOut = sma(src, len2)
//slowemaOut = sma(src, len3)

plot(fastemaOut, color=color.black, title="First EMA")
plot(standardemaOut, color=color.yellow, title="Second EMA")
plot(slowemaOut, color=color.blue, title="Third EMA")


timeinrange(res, sess) => time(res, sess) != 0


londopen = timeinrange(timeframe.period, "0300-1100") 
nyopen = timeinrange(timeframe.period, "0800-1600") 

longCondition = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and londopen //or nyopen)
shortCondition = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and londopen// or nyopen)

longCondition2 = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and nyopen
shortCondition2 = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and nyopen
tp = input(50,title="TP")
sl = input(100, title="SL")

tradeLondon =  input(title="Trade london session?", type=input.bool, defval=true)
tradeNewyork = input(title="Trade new york session?", type=input.bool, defval=true)

//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(1,type=input.float,title="Risk % of equity ")/100           //risk % per trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/sl        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1000)
    size := 1000        

if(tradeLondon==true)
    strategy.entry("long",1,when=longCondition)
    strategy.exit("tp/sl","long",profit=tp,loss=sl)
    
    strategy.entry("short",0,when=shortCondition)
    strategy.exit("tp/sl","short",profit=tp,loss=sl)

if(tradeNewyork==true)
    strategy.entry("long",1,when=longCondition2)
    strategy.exit("tp/sl","long",profit=tp,loss=sl)
    
    strategy.entry("short",0,when=shortCondition2)
    strategy.exit("tp/sl","short",profit=tp,loss=sl)

// strategy.risk.max_intraday_filled_orders(2) 

더 많은