
이중 지수 이동 평균 교차 전략 최적화기는 두 개의 서로 다른 주기 지수 이동 평균 교차 신호를 기반으로 거래하는 양적 전략이다. 이 전략은 빠른 EMA와 느린 EMA 사이의 교차 관계를 사용하여 시장의 경향 방향을 판단하고 특정 조건이 충족되면 다중 공평 양방향 거래를 수행한다. 이 전략의 핵심은 파라미터화된 EMA 설정을 통해 사용자가 다양한 시장 환경에 따라 전략 매개 변수를 유연하게 조정할 수 있으며, 스톱 기능과 함께 수익을 극대화한다.
이 전략의 핵심 원리는 기술 분석의 고전적인 평평선 교차 이론에 기초하고 있으며, 주로 다음과 같은 몇 가지 핵심 구성 요소를 포함한다:
쌍 EMA 교차 신호: 전략은 두 개의 다른 주기의 지수 이동 평균 ((EMA) 를 사용하여, 각각 기본값이 6인 빠른 EMA와 기본값이 16인 느린 EMA이다. 빠른 EMA가 아래에서 느린 EMA를 통과하면 다중 신호가 발생하며, 빠른 EMA가 위에서 느린 EMA를 통과하면 공백 신호가 발생한다.
방향 필터링: 전략은 사용자가 입력된 파라미터를 통해 거래 방향을 선택할 수 있도록 허용하며, 전략의 유연성을 증가시킵니다.longOK그리고shortOK변수 제어는 해당 방향의 거래를 실행하는지 여부를 제어한다.
K선 형태 확인: 전략은 추가적인 가격 확인 메커니즘을 도입하여, 다중 신호가 나타나면, 현재 K선 폐쇄 가격이 개장 가격보다 높아야 한다. (양선); 하위 신호가 나타나면, 현재 K선 폐쇄 가격은 개장 가격보다 낮아야 한다. (양선). 이 디자인은 일부 가짜 신호를 효과적으로 필터링한다.
정지 메커니즘: 전략은 각각 다중 헤드 및 빈 헤드의 정지 비율을 설정합니다 (예작은 각각 4%), 가격이 미리 설정된 수익 목표에 도달하면 자동으로 포지션을 청산하고 수익을 잠금합니다.
크로스 역평준: 다수 상위 포지션을 보유할 때 공백 신호가 발생하거나, 공백 포지션을 보유할 때 다수 상위 신호가 발생하면, 전략은 평평한 포지션 동작을 유발하여 손실 확장을 효과적으로 제어한다.
이 전략의 코드에 대해 자세히 살펴보면 다음과 같은 장점을 찾을 수 있습니다.
매개 변수 유연성: 전략은 사용자가 빠르고 느린 EMA의 주기, 거래 방향 및 스톱 퍼센티지를 사용자 정의 할 수있게하여 전략이 다른 시장 환경과 개인 위험 선호도에 적응할 수 있습니다.
이중 확인 메커니즘: 전략은 EMA 교차 신호에만 의존하지 않고, 추가 확인으로 K선 형태 ((陽線/陰線) 를 결합하여 신호의 신뢰성을 높이고, 가짜 돌파로 인한 손실을 줄인다.
전방위 거래: 다방위 쌍방향 거래를 지원하고, 단일 방향의 시장 상황에 국한되지 않고, 다양한 시장 추세에서 기회를 잡을 수 있습니다.
정지 최적화: 사전 설정된 정지 비율을 통해, 전략은 가격이 예상 목표에 도달했을 때 수익을 자동으로 잠금 할 수 있으며, 시장의 역전으로 인해 이미 수익이 회전되는 것을 피할 수 있습니다.
역전 신호 평지: 시장 추세가 역전될 가능성이 있을 때 (반전 교차 신호가 발생했을 때), 전략은 적시에 평지하고, 위험을 효과적으로 제어한다.
계산 효율성: 내장된 전략ta.ema、ta.crossover그리고ta.crossunder함수 계산 신호, 계산 효율이 높고, 실시간으로 실행하기 편리하다.
시각화 지원: 전략은 빠른 및 느린 EMA 라인을 그래프에 그리며, 정지 레벨을 사용하여 사용자가 전략 수행을 직관적으로 이해할 수 있습니다.
이 전략은 합리적으로 설계되었지만 다음과 같은 몇 가지 잠재적인 위험들이 있습니다.
평균선 지연성: EMA는 본질적으로 지연 지표이며, 빠르게 변하는 시장에서 지연 신호가 발생할 수 있으며, 입점 및 출퇴근 시기가 좋지 않습니다.
흔들리는 시장 위험: 간격 흔들리는 상황에서, EMA 교차 신호는 자주 발생하지만 지속성이 부족하여, 자주 거래되고 연속적인 손실이 발생할 수 있다.
중단 장치의 부재: 현재 전략은 단지 중단 장치만 설정되어 있으며, 명확한 중단 장치가 없으며, 극단적인 시장 조건에서 큰 손실을 입을 수 있습니다.
K선 확인 제한: K선 형태 확인을 요구하면 유효한 신호를 놓치게 될 수 있으며, 특히 빠른 트렌드 전환 시에는 문제가 발생할 수 있다.
고정 스톱 비율 위험: 미리 설정된 고정 스톱 비율은 모든 시장 환경에 적합하지 않을 수 있으며, 강한 트렌드 시장에서 조기 수익을 끝내고 더 큰 수익을 놓칠 수 있습니다.
변동성 적응 장치의 부재: 전략은 시장의 변동성 동력에 따라 매개 변수를 조정하는 기능이 없으며, 높은 변동성 또는 낮은 변동성 환경에서 잘 작동하지 않을 수 있습니다.
위와 같은 위험에 대응하기 위해 다음과 같은 방향으로 전략을 최적화할 수 있습니다.
적응 파라미터를 도입한다: ATR (진실의 변동폭) 또는 역사적인 변동률에 기초하여 EMA 파라미터를 동적으로 조정할 수 있어, 전략이 다른 시장 변동 환경에 더 잘 적응할 수 있다. 이렇게 하는 이유는 고정 파라미터가 다른 변동률 시장에서 큰 차이를 보이는 이유이다.
손해 제도를 늘리십시오: ATR 또는 고정 비율에 기반한 손해 제도를 도입하여 가격에 심각한 불리한 경우 자동으로 청산하여 단일 거래 손실을 효과적으로 제어하는 것이 좋습니다.
트렌드 필터를 추가합니다: 더 긴 기간의 트렌드 판단 지표를 추가할 수 있습니다 (예: 50 일 EMA), 주 트렌드 방향으로만 거래를 수행하고, 흔들리는 시장에서 자주 거래를 피합니다.
최적화된 출전 시간: RSI, MACD 등 다른 기술 지표와 결합하여 신호 품질을 향상시킬 수 있습니다.
다이내믹 스톱: 시장의 변동성에 기반한 다이내믹 스톱을 구현하거나, 모바일 스톱 (트랙 스톱) 메커니즘을 적용하여 수익을 보호하면서 수익을 증가시킬 수 있다.
거래량 필터링을 추가: 신호 생성시 거래량 요소를 고려하고 거래량이 지원되는 경우에만 거래를 실행하여 신호의 신뢰성을 높인다.
시간 필터: 거래 시간 창을 추가하여 시장의 변동성이 낮거나 불규칙한 시간에 거래하는 것을 피하십시오.
자금 관리 최적화: 동적 포지션 관리 메커니즘을 도입하여 신호 강도, 시장의 변동성 및 역사적 승률에 따라 거래 당 자금 비율을 조정한다.
이진 지수 이동 평균 교차 전략 최적화기는 신속하고 느린 EMA의 교차 관계를 통해, K선 형태 확인 및 정지 메커니즘과 결합하여, 다공간 양방향 거래 기능을 구현하는 합리적으로 설계된 정량 거래 시스템이다. 전략의 장점은 매개 변수 유연성, 이중 확인 메커니즘 및 전방위 거래 능력이지만, 평행선 낙후성, 변동 시장 위험 및 중단 메커니즘의 부재 등의 문제도 있다.
자조적 변수를 도입하고, 손해 중지 장치를 늘리고, 트렌드 필터를 추가하고, 자금 관리를 최적화하는 등의 방향으로의 개선을 통해 전략의 안정성과 수익 능력을 크게 향상시킬 수 있다. 특히, 동적 변수 조정과 위험 관리 장치를 결합하면, 전략이 다양한 시장 환경에서 상대적으로 안정적인 성능을 유지할 수 있다.
거래자를 위해, 이 전략을 실제 적용할 때, 시장의 거시 분석과 결합하여, 트렌드가 명확한 시장 환경을 선택하고, 충분한 역사 회귀와 파라미터 최적화를 통해 특정 거래 품종에 적합한 최적의 파라미터 조합을 찾는 것이 좋습니다. 또한, 전략의 성능을 지속적으로 모니터링하고, 시장 변화에 따라 파라미터를 제때 조정하는 것은 전략의 장기적인 유효성을 유지하는 데 중요합니다.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-03-31 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// This strategy has been created for illustration purposes only and should not be relied upon as a basis for buying, selling, or holding any asset or security.
// © kirilov
//@version=6
strategy(
"gosho bot Strategy",
overlay=true,
calc_on_every_tick=true,
currency=currency.USD
)
// INPUT:
// Options to enter fast and slow Exponential Moving Average (EMA) values
emaFast = input.int(title="Fast EMA", defval=6, minval=1, maxval=9999)
emaSlow = input.int(title="Slow EMA", defval=16, minval=1, maxval=9999)
// Option to select trade directions
tradeDirection = input.string(title="Trade Direction", defval="Both", options=["Long", "Short", "Both"])
// CALCULATIONS:
// Use the built-in function to calculate two EMA lines
fastEMA = ta.ema(close, emaFast)
slowEMA = ta.ema(close, emaSlow)
// PLOT:
// Draw the EMA lines on the chart
plot(series=fastEMA, color=color.orange, linewidth=2)
plot(series=slowEMA, color=color.blue, linewidth=2)
percentageDiff = (fastEMA - slowEMA) / slowEMA * 100
// Translate input into trading conditions
longOK = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")
// Decide if we should go long or short using the built-in functions
longCondition = ta.crossover(fastEMA, slowEMA)
shortCondition = ta.crossunder(fastEMA, slowEMA)
profit_long = input.float(4, "Profit_long %", minval=0.0, step=0.1) * 0.01
profit_short = input.float(4, "Profit_short %", minval=0.0, step=0.1) * 0.01
short_stop_profit = strategy.position_avg_price * (1 - profit_short)
long_stop_profit = strategy.position_avg_price * (1 + profit_long)
// ORDERS:
// Submit entry (or reverse) orders
if (longCondition and close > open )
strategy.entry(" Long ", strategy.long)
if (shortCondition and close < open )
strategy.entry(" Short ", strategy.short)
// Submit exit orders in the cases where we trade only long or only short
if (strategy.position_size > 0 and shortCondition )
strategy.exit(id="exit long", stop=close)
if (strategy.position_size < 0 and longCondition )
strategy.exit(id="exit short", stop=close)
plot(short_stop_profit)