
이것은 짧은 주기 (~ 1-5 분) 의 외환 금 거래 전략이며, 주로 유조 이론의 양 가격 관계와 다중 계단 단계 EMA를 사용하여 트렌드 역점을 예측하고, 짧은 주기의 트렌드 추적 거래를 수행한다. 이 전략은 고주파 거래에 적합하다.
이 전략의 거래 신호는 두 부분에서 나온다.
거래량 평균 가격의 양 가격 관계를 기준으로 판단한다. 구체적으로, 전략은 서로 다른 주기 (설정 가능한) 의 거래량 평균 가격 EMA를 계산하여 상공 트렌드의 변화를 판단한다. 짧은 주기 EMA에 긴 주기 EMA를 통과하면 호불호 신호로 간주하고; 짧은 주기 EMA를 긴 주기 EMA를 통과하면 호불호 신호로 간주한다.
계단단 EMA 판단에 기반한 역전 신호. 계단 EMA는 10일선, 20일선, 50일선 등과 같은 다른 변수를 설정한 여러 EMA 평균을 의미하며, 그 배열 순서에 따라 트렌드 역전을 판단한다. 단기 EMA가 장기 EMA의 전환에 앞서면 트렌드가 역전되고 있음을 나타냅니다.
전략은 이 두 가지 신호를 통합하여 진입을 결정한다. 구체적으로, 수량 관계가 낙관적이라고 판단되고 Stairstep EMA가 다중 EMA가 모두 낙관적으로 전환되었다면 진입을 한다. 반대로, 수량 관계가 낙관적이라고 판단되고 Stairstep EMA가 다중 EMA가 모두 낙관적으로 전환되었다면 진입을 한다.
이 전략은 거래량 평균 가격과 다중 EMA의 장점을 결합하여 신호의 정확성과 안정성을 향상시킵니다:
거래량 평균 가격 판단과 거래량 가격 관계를 판단하는 것은 단순한 가격 EMA 판단보다 더 정확하며, 강화된 가격 흔들림에 의해 오도되는 것을 피할 수 있다.
스티어스테프 EMA는 다양한 EMA의 배열 순서를 통해 판단의 차원을 증가시킬 수 있으며, 단일 EMA로 인한 소음을 피할 수 있다.
두 종류의 신호를 결합하면 상호 검증을 가능하게 하고, 가짜 신호를 줄일 수 있다.
높은 주파수 단기 거래에 적합하며, 작은 범위의 반전 기회를 빠르게 잡을 수 있습니다.
정책 파라미터는 다양하고 주기적으로 최적화될 수 있도록 유연하게 구성할 수 있다.
이 전략에는 몇 가지 위험도 있습니다.
기술적인 지표에 너무 의존하여, 비동기적인 행동으로 오해될 수 있다.
단기주기 운영은 거래비용에 민감하며, 슬라이드 포인트와 수수료를 조절해야 한다.
단기 EMA 파라미터는 자주 최적화해야 하며, 그렇지 않으면 유효하지 않을 수 있다.
가격의 오차는 반드시 반전이 일어나지 않으며, 잘못된 판단의 위험이 있다.
다중 EMA 배열 순서의 판단은 완전히 신뢰할 수 없으며, 잘못된 판단을 초래할 수도 있다.
대응책:
더 많은 기본 요소와 함께 판단하는 것.
포지션을 조정하여 단독 손실이 너무 커지지 않도록하십시오.
매개 변수를 주기적으로 재검토하고 최적화한다.
중요한 지지/저항지대 근처에서 거래하는 성공률을 높여주세요.
다른 지표와 결합하여 다차원 검증을 수행한다.
이 전략은 다음과 같은 측면에서 최적화될 수 있습니다.
다른 양과 가격 관계 계산 방법을 테스트하여 보다 안정적인 파라미터를 찾습니다.
더 많은 계층의 계단단 EMA 판단을 추가합니다.
RSI, MACD 등과 같은 다른 지표 신호와 함께 필터링.
이동 상쇄, 상쇄 상쇄 등의 손해 방지 장치를 최적화하십시오.
다양한 품종의 특성에 따라 최적화 파라미터를 설정하고, 그 품종에 적합한 파라미터 집합을 개발한다.
기계 학습 알고리즘을 추가하고, 빅데이터를 활용하여 판단 모델을 훈련한다.
다른 출구 전략을 탐색하십시오. 고정 출구, 트렌드 추적 출구 등.
시장 변화에 따라 자동으로 변수를 조정하는 적응 변수 메커니즘을 도입한다.
이 전략은 거래량 평균 가격과 Stairstep EMA 두 가지 지표의 장점을 종합적으로 활용하여 단기 트렌드 추적 거래를 한다. 이 전략은 높은 안정성과 정확성을 가지고 있지만 위험 제어 및 매개 변수 최적화에 주의를 기울여야 한다. 지속적으로 최적화 테스트를 수행하고 다른 기술 지표와 함께 사용하면 효율적인 단기 거래 전략이 될 수 있다.
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux99
//@version=5
strategy("Forex Fractal EMA Scalper", overlay=true)
// Define "n" as the number of periods and keep a minimum value of 2 for error handling.
n = input.int(title="Period Fractals", defval=2, minval=2, group="Optimization Parameters")
src = input(hl2, title="Source for EMA's", group="Optimization Parameters")
len1 = input.int(10, minval=1, title="Length EMA 1", group="Optimization Parameters")
out1 = ta.ema(src, len1)
len2 = input.int(20, minval=1, title="Length EMA 2", group="Optimization Parameters")
out2 = ta.ema(src, len2)
len3 = input.int(100, minval=1, title="Length EMA 3", group="Optimization Parameters")
out3 = ta.ema(src, len3)
// UpFractal
bool upflagDownFrontier = true
bool upflagUpFrontier0 = true
bool upflagUpFrontier1 = true
bool upflagUpFrontier2 = true
bool upflagUpFrontier3 = true
bool upflagUpFrontier4 = true
for i = 1 to n
upflagDownFrontier := upflagDownFrontier and (high[n-i] < high[n])
upflagUpFrontier0 := upflagUpFrontier0 and (high[n+i] < high[n])
upflagUpFrontier1 := upflagUpFrontier1 and (high[n+1] <= high[n] and high[n+i + 1] < high[n])
upflagUpFrontier2 := upflagUpFrontier2 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+i + 2] < high[n])
upflagUpFrontier3 := upflagUpFrontier3 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+3] <= high[n] and high[n+i + 3] < high[n])
upflagUpFrontier4 := upflagUpFrontier4 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+3] <= high[n] and high[n+4] <= high[n] and high[n+i + 4] < high[n])
flagUpFrontier = upflagUpFrontier0 or upflagUpFrontier1 or upflagUpFrontier2 or upflagUpFrontier3 or upflagUpFrontier4
upFractal = (upflagDownFrontier and flagUpFrontier)
// downFractal
bool downflagDownFrontier = true
bool downflagUpFrontier0 = true
bool downflagUpFrontier1 = true
bool downflagUpFrontier2 = true
bool downflagUpFrontier3 = true
bool downflagUpFrontier4 = true
for i = 1 to n
downflagDownFrontier := downflagDownFrontier and (low[n-i] > low[n])
downflagUpFrontier0 := downflagUpFrontier0 and (low[n+i] > low[n])
downflagUpFrontier1 := downflagUpFrontier1 and (low[n+1] >= low[n] and low[n+i + 1] > low[n])
downflagUpFrontier2 := downflagUpFrontier2 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+i + 2] > low[n])
downflagUpFrontier3 := downflagUpFrontier3 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+3] >= low[n] and low[n+i + 3] > low[n])
downflagUpFrontier4 := downflagUpFrontier4 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+3] >= low[n] and low[n+4] >= low[n] and low[n+i + 4] > low[n])
flagDownFrontier = downflagUpFrontier0 or downflagUpFrontier1 or downflagUpFrontier2 or downflagUpFrontier3 or downflagUpFrontier4
downFractal = (downflagDownFrontier and flagDownFrontier)
// plotshape(downFractal, style=shape.triangledown, location=location.belowbar, offset=-n, color=#F44336, size = size.small)
// plotshape(upFractal, style=shape.triangleup, location=location.abovebar, offset=-n, color=#009688, size = size.small)
long= out1 > out2 and out2>out3 and upFractal
short= out1 < out2 and out2<out3 and downFractal
strategy.entry("long",strategy.long,when= short)
strategy.entry("short",strategy.short,when=long)
tp=input(25, title="TP in PIPS", group="Risk Management")*10
sl=input(25, title="SL in PIPS", group="Risk Management")*10
strategy.exit("X_long", "long", profit=tp, loss=sl )
strategy.exit("x_short", "short",profit=tp, loss=sl )