기하급수적인 이동 평균 크로스오버 양적 거래 전략

저자:차오장, 날짜: 2024-03-29 10:59:57
태그:

img

전반적인 설명

이 전략은 두 개의 기하급수적인 이동 평균 (EMA) 의 교차를 구매 및 판매 신호로 사용합니다. 단기 EMA가 아래에서 장기기 EMA를 넘을 때 구매 신호를 생성합니다. 반대로, 단기 EMA가 위에서 장기기 EMA를 넘을 때 판매 신호를 생성합니다. 또한, 전략은 트렌드의 강도를 확인하기 위해 지난 10 거래 기간 내에서 교차점이 가장 높거나 가장 낮은 가격인지 여부를 결정합니다. 교차점이 가장 높은 가격이라면 배경은 녹색으로 색칠됩니다; 가장 낮은 가격이라면 빨간색으로 색칠됩니다. 또한 전략은 차트에서 교차점의 가격을 표시합니다.

전략 원칙

  1. 서로 다른 기간을 가진 EMA를 두 개 계산하고, 5와 10의 결제 기간을 계산합니다.
  2. 두 EMA가 교차하는지 확인합니다. 단기 EMA가 아래로부터 장기 EMA를 넘으면 구매 신호를 생성하고 단기 EMA가 위로부터 장기 EMA를 넘으면 판매 신호를 생성합니다.
  3. 크로스오버 신호가 발생하면 현재 크로스오버 포인트가 지난 10 거래 기간 동안 가장 높은 가격이나 가장 낮은 가격인지 결정합니다. 가장 높은 가격이라면 상승 추세가 강하다고 간주되며 가장 낮은 가격이라면 하락 추세가 강하다고 간주됩니다.
  4. 구매 신호가 생성되고 현재 포지션이 없다면, 긴 포지션을 열고, 판매 신호가 생성되고 현재 포지션이 없다면, 짧은 포지션을 열고.
  5. 긴 포지션이 유지되고 단기 EMA가 상위로부터 장기 EMA를 넘어서면 긴 포지션을 닫습니다. 단기 EMA가 아래로부터 장기 EMA를 넘어서면 짧은 포지션을 닫습니다.

전략적 장점

  1. 기하급수적인 이동 평균은 단순한 이동 평균에 비해 가격 변화에 더 빠르게 반응하여 보다 신속한 거래 신호를 생성합니다.
  2. 크로스오버 포인트가 최근 최고 또는 최저 가격인지 결정함으로써 트렌드 강도를 높이는 거래 기회를 필터링하고 전략 수익성을 향상시킬 수 있습니다.
  3. 차트에 크로스오버 포인트 가격을 표시하면 거래자가 더 직관적인 거래 참조를 제공합니다.
  4. 코드 논리는 명확하고 이해하기 쉽고 구현하기 쉽습니다.

전략 위험

  1. EMA 크로스오버로 생성되는 신호는 지연이 있을 수 있어 최고의 거래 기회를 놓칠 수 있습니다.
  2. 변동적인 시장에서 EMA 크로스오버는 자주 발생할 수 있으며, 이로 인해 거래 빈도가 과도하고 거래 비용이 증가합니다.
  3. 이 전략에는 스톱 로스 조치가 없기 때문에 판단이 잘못되면 더 큰 마감 위험을 감수할 수 있습니다.

전략 최적화 방향

  1. 트렌드 강도와 방향을 판단하고 신호 정확도를 향상시키기 위해 RSI, MACD 등과 같은 더 많은 기술적 지표를 도입하십시오.
  2. 단일 거래 위험을 통제하기 위해 합리적인 스톱 로스 및 영업 수익 수준을 설정합니다.
  3. EMA 기간과 크로스오버 확인 시간 창과 같은 거래 매개 변수를 최적화하여 전략 적응성을 향상시킵니다.
  4. VIX와 같은 시장 감정 지표를 결합하여 거래 신호를 필터하고 잘못된 신호를 줄이십시오.
  5. 포지션 관리 및 자본 관리 모듈을 추가하여 각 거래에 대한 자금 금액을 동적으로 조정하고 자본 활용 효율을 향상시키는 것을 고려하십시오.

요약

이 전략은 지수적인 이동 평균 크로스오버를 핵심 논리로 사용하며, 최근 기간에 크로스오버 포인트 가격의 상대적 위치를 고려하여 트렌드 강도를 결정합니다. 전반적으로 전략 논리는 명확하고 장점은 분명하지만 특정 한계와 위험이 있습니다. 더 많은 보조 판단 지표를 도입하고 합리적인 위험 통제 조치를 설정하고 주요 매개 변수를 최적화함으로써이 전략의 안정성과 수익성이 더욱 향상 될 수 있습니다.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 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/
// © ZenAndTheArtOfTrading
// @version=5
strategy("ema giao nhau", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Get user input
emaLength1 = input.int(title="EMA #1 Length", defval=5)
emaLength2 = input.int(title="EMA #2 Length", defval=10)

// Get MAs
ema1 = ta.ema(close, emaLength1)
ema2 = ta.ema(close, emaLength2)

// Draw MAs
plot(ema1, color=color.blue, title="EMA 1")
plot(ema2, color=color.red, title="EMA 2")

// Detect crossovers
bool crossOver = ta.crossover(ema1, ema2)
bool crossUnder = ta.crossunder(ema1, ema2)
bool cross = crossOver or crossUnder
//float crossPrice = ta.valuewhen(cross, close, 0)
float crossPrice = cross ? close : na

// Check if the crossover price is the highest price over the past 10 bars
bool highestPrice = crossOver
for i = 1 to 10
    if crossPrice <= close[i]
        highestPrice := false
        break

// Check if the crossover price is the lowest price over the past 10 bars
bool lowestPrice = crossUnder
for i = 1 to 10
    if crossPrice >= close[i]
        lowestPrice := false
        break

// Flag the bar if it is a high/low close
bgcolor(highestPrice ? color.new(color.green, 50) : na)
bgcolor(lowestPrice ? color.new(color.red, 50) : na)

// Display crossover price
if cross
    highestEmaPrice = ema1 > ema2 ? ema1 : ema2
    label myLabel = label.new(bar_index, highestEmaPrice, "CrossPrice=" + str.tostring(crossPrice), color=color.white)
    if highestPrice and strategy.position_size == 0
        strategy.entry(id="Buy", direction=strategy.long)
    if lowestPrice and strategy.position_size == 0
        strategy.entry(id="Sell", direction=strategy.short)

// Exit trades when short-term EMA is breached
if strategy.position_size > 0 and crossUnder
    strategy.close("Buy")
if strategy.position_size < 0 and crossOver
    strategy.close("Sell")

더 많은