이 전략은 리스크 관리를 가진 메이저를 위한 SoftKill21
이 전략은 25주기 빠른 EMA, 50주기 표준 EMA 및 100주기 느린 EMA 등 다양한 기간을 가진 세 개의 EMA를 사용합니다. 빠른 EMA가 표준 EMA와 느린 EMA를 넘을 때 구매 신호를 생성합니다. 빠른 EMA가 표준 EMA와 느린 EMA를 넘을 때 판매 신호를 생성합니다. 지연을 줄이기 위해 EMA는 이중 기하급수 평형 기술을 사용하여 계산됩니다. 이 전략은 런던 또는 뉴욕 세션의 오픈 시장 시간이 진입 조건과 일치하는지 확인합니다. 또한 각 주문의 위치 크기는 위험을 제어하기 위해 계정 자본의 일정한 비율을 사용하여 동적으로 결정됩니다.
특히, 전략은 먼저 세 개의 EMA 라인을 계산하고, 빠른 EMA가 표준 EMA와 느린 EMA와 황금 십자가 또는 죽음의 십자가를 형성하는지 확인합니다. 조건이 런던 또는 뉴욕 오픈 시장 시간에도 일치하면 구매 또는 판매 신호가 생성됩니다. 포지션 크기를 결정 할 때 전략은 위험 노출로 계좌 자본의 고정 비율을 계산하고, 각 주문에 대해 포지션을 동적으로 조정하기 위해 계약 크기 및 둥근 롯으로 변환합니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
트리플 EMA는 가격 데이터를 효과적으로 매끄럽게하고 트렌드 방향을 식별 할 수 있습니다. 빠른 EMA는 가격 변화에 민감하며 표준 EMA는 꾸준히 추적하며 느린 EMA는 소음을 필터합니다. 함께 사용하면 잘못된 브레이크를 필터링하고 트렌드 방향을 결정할 수 있습니다.
이중 기하급수 평형의 사용은 지연을 줄이고 신호를 더 민감하게 만듭니다.
주요 거래 세션을 포함하면 비정상 시간 동안 잘못된 신호를 피할 수 있습니다.
리스크 관리 방식은 계좌 자금에 따라 포지션 크기를 조정하여 단일 거래에서 과도한 손실을 피합니다.
논리는 간단하고 명확하고, 이해하기 쉽고 실행하기 쉽고, 초보자에게 적합합니다.
이 전략은 다양한 통화 쌍과 시간 프레임에 최적화되고 조정될 수 있으며, 광범위한 적용이 가능합니다.
이 전략은 또한 몇 가지 잠재적인 위험을 가지고 있습니다.
EMA는 갑작스러운 사건으로 인한 단기 가짜 브레이크를 효과적으로 필터 할 수 없으며 잘못된 신호를 생성 할 수 있습니다. 필터 및 분석에 다른 지표가 추가 될 수 있습니다.
고정 비율 포지션 사이징은 시장 변동에 동적으로 적응할 수 없으며, 너무 크거나 미미한 포지션으로 이어집니다. 변동성에 기반한 동적 포지션 사이징을 고려할 수 있습니다.
두 개의 주요 세션만 고려되며 다른 세션에서 거래 기회를 놓칠 수 있습니다. 다른 세션의 효과를 테스트 할 수 있습니다.
스톱 로스 메커니즘이 없으면 일방적 손실을 효과적으로 제어할 수 없습니다. 이동 또는 시간 기반 스톱 로스는 구현 될 수 있습니다.
EMA 크로스오버는 약간의 지연이 있으며 가장 좋은 입시 시기를 놓칠 수 있습니다. EMA 기간을 줄이거나 선도 지표를 통합하는 것이 도움이 될 수 있습니다.
성과는 거래 비용에 영향을 받을 수 있습니다. 스톱 로스 및 취익 수준은 이에 따라 조정되어야 합니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
최적의 조합을 찾기 위해 다른 EMA 기간 매개 변수를 테스트합니다. 적응 EMA를 도입하여 기간을 동적으로 최적화 할 수 있습니다.
신호 품질을 향상시키기 위해 RSI, 볼링거 밴드 같은 다른 필터링 지표를 추가하십시오.
시장의 변동성과 수익성에 기초한 역동적인 포지션 크기를 도입합니다.
손실을 제한하기 위해 이동 또는 시간 중지 손실을 추가하십시오.
최적의 시간을 찾기 위해 다른 거래 세션을 테스트하십시오. 변동성 측정은 스크린에 도움이 될 수 있습니다.
수익 규모와 승률을 균형을 맞추기 위해 수익을 취하고 손실을 멈추는 수준을 최적화합니다.
EMA 계산을 직선 가중된 EMA와 같이 수정해서 지연을 줄여보세요.
최적의 매개 변수를 찾기 위해 기계 학습을 사용하세요.
거래 비용 모델 및 최대 순이익을 위한 조정 시스템
위의 최적화를 통해 시스템의 수익성이 향상되고, 마감량은 통제되고, 적용 가능성은 확장되어 더 강력하고 견고한 거래 전략을 얻을 수 있습니다.
이 전략의 전반적인 논리는 트렌드를 식별하기 위해 트리플 EMA를 사용하여 실행을 위해 주요 세션과 결합하고 계정 비율에 기반한 포지션 사이징을 채택하는 것이 분명합니다. 전형적인 트렌드 다음 시스템에 속합니다. 매개 변수 조정, 메커니즘 개선, 기술 도입 등을 통해 최적화 할 수있는 많은 공간이 있습니다. 더 많은 시장에 적용 가능성을 확대하고 견고함을 향상시키기 위해. 초보자를위한 학습
/*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)