지수 이동 평균 교차 양적 거래 전략


생성 날짜: 2024-03-29 10:59:57 마지막으로 수정됨: 2024-03-29 10:59:57
복사: 1 클릭수: 517
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

지수 이동 평균 교차 양적 거래 전략

개요

이 전략은 두 개의 지수 이동 평균 ((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")