EMA 크로스오버 거래 전략은 다른 기간의 EMA 라인을 계산하고 그들의 크로스오버 상황을 감지함으로써 구매 및 판매 신호를 생성합니다. 더 빠른 EMA가 느린 EMA를 넘을 때 구매 신호가 생성됩니다. 더 빠른 EMA가 느린 EMA를 넘을 때 판매 신호가 생성됩니다.
이 전략의 핵심은 다른 기간을 가진 두 개의 EMA 라인을 계산하는 것입니다. 여기에는 9의 기본 기간을 가진 더 빠른 EMA와 20의 기본 기간을 가진 더 느린 EMA가 포함됩니다. 코드는 파인 스크립트에서 내장된 ema 함수를 호출하여 두 라인을 계산합니다. 두 개의 EMA 라인이 교차하는지 감지하여 거래 신호를 생성합니다. 구체적으로, 더 빠른 EMA가 느린 EMA 위에 넘어가면 구매 신호가 유발됩니다. 더 빠른 EMA가 느린 EMA 아래에 넘어가면 판매 신호가 유발됩니다.
크로스오버 상황은 파이인 스크립트 (Pine Script) 에 내장된 크로스오버 및 크로스온더 함수를 사용하여 검출됩니다. 크로스오버 함수는 더 빠른 EMA가 더 느린 EMA를 넘어서서 부올 값을 반환하는지 확인하고, 크로스오버 함수는 더 빠른 EMA가 더 느린 EMA를 넘어서서 부올 값을 반환하는지 확인하고, 이 두 함수의 반환 값을 기반으로 코드가 해당 구매 또는 판매 명령을 제출합니다.
또한, 코드는 시작 / 종료 날짜를 설정, 단지 긴 또는 짧은 거래를 제한, 등과 같은 몇 가지 보조 조건을 제공합니다. 이러한 기능은 더 정교한 백테스트 또는 최적화를 수행하는 데 도움이됩니다.
이 전략의 가장 큰 장점은 매우 간단하고 직설적이며 이해하기 쉽고 구현하기 쉽기 때문에 초보자도 배울 수 있습니다. 또한, 트렌드를 따르는 지표로서 이동 평균은 시장 트렌드를 효과적으로 추적하고 모멘텀을 활용하여 추가 수익을 창출 할 수 있습니다. 마지막으로이 전략은 몇 가지 매개 변수를 가지고 있으며 조정 및 최적화를 쉽게합니다.
이 전략의 주요 위험은 윙사 트레이드와 트렌드 역전이다. EMA 라인은 단기 시장 변동에 취약하여 잘못된 신호를 생성하고 불필요한 트레이드를 유발하여 거래 빈도와 비용을 증가시킬 수 있다. 반면, 크로스오버 신호가 발생하면 트렌드가 역전 지점에 가까워지고 트레이드를 위험하게 만들 수 있다. 부적절한 매개 변수 설정은 전략 성능에도 영향을 줄 수 있다.
EMA 기간을 조정하고 필터를 추가하는 것과 같은 방법은 윙사우를 줄이는 데 도움이 될 수 있습니다. 스톱 로스 오더는 단일 거래 손실을 제어합니다. 매개 변수 최적화는 안정성을 향상시킵니다. 그러나 어떤 거래 전략도 손실을 완전히 피할 수 없으므로 위험을 감수 할 준비가 있어야합니다.
이 전략은 다음과 같은 측면에서 개선될 수 있습니다.
EMA 크로스오버 (EMA crossover) 는 단순하면서도 효과적인 트렌드 추후 전략이다. EMA 크로스를 사용하여 거래 신호를 생성하여 자동으로 가격 트렌드를 캡처한다. 이 이해하기 쉽고 조정 가능한 전략은 초보자도 배울 수 있습니다. 또한 더 복잡한 전략에 통합 될 수 있습니다. 그러나 모든 전략은 위험을 감수하고 신중한 관리가 필요합니다. 최적화 및 부양 시장 조건의 측면에서 지속적인 향상으로이 전략이 더 견고해질 수 있습니다.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-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/ // 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=4 strategy( "EMA Cross 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(title="Fast EMA", type=input.integer, defval=9, minval=1, maxval=9999) emaSlow = input(title="Slow EMA", type=input.integer, defval=20, minval=1, maxval=9999) // Option to select trade directions tradeDirection = input(title="Trade Direction", options=["Long", "Short", "Both"], defval="Both") // Options that configure the backtest date range startDate = input(title="Start Date", type=input.time, defval=timestamp("01 Jan 1970 00:00")) endDate = input(title="End Date", type=input.time, defval=timestamp("31 Dec 2170 23:59")) // CALCULATIONS: // Use the built-in function to calculate two EMA lines fastEMA = ema(close, emaFast) slowEMA = ema(close, emaSlow) // PLOT: // Draw the EMA lines on the chart plot(series=fastEMA, color=color.black, linewidth=2) plot(series=slowEMA, color=color.red, linewidth=2) // CONDITIONS: // Check if the close time of the current bar falls inside the date range inDateRange = true // 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 = crossover(fastEMA, slowEMA) shortCondition = crossunder(fastEMA, slowEMA) // ORDERS: // Submit entry (or reverse) orders if (longCondition and inDateRange) strategy.entry(id="long", long=true, when = longOK) if (shortCondition and inDateRange) strategy.entry(id="short", long=false, when = shortOK) // 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)