이중 이동 평균 교차 거래 전략

저자:차오장, 날짜: 2023-11-27 15:32:57
태그:

img

전반적인 설명

이 전략은 서로 다른 매개 변수 설정을 가진 두 이동 평균의 교차를 기반으로 구매 및 판매 신호를 생성합니다. 짧은 기간 이동 평균이 아래에서 더 긴 기간 이동 평균을 넘을 때 구매 신호가 생성됩니다. 짧은 기간 이동 평균이 위에서 더 긴 기간 이동 평균을 넘을 때 판매 신호가 생성됩니다.

전략 논리

이 전략은 파인 스크립트로 작성된다. 먼저 p1과 p2라는 두 개의 이동 평균을 정의하고, 입력으로 유형, 길이 및 가격 소스를 사용자 정의할 수 있다. 여기서 p1은 짧은 기간 MA를 나타내고 p2는 긴 기간 MA를 나타낸다.

크로스오버와 크로스온더 함수는 두 MAs 사이의 크로스오버를 감지하는 데 사용됩니다. p1이 아래에서 p2를 넘을 때 구매 신호가 생성됩니다. p1이 위에서 p2를 넘을 때 판매 신호가 생성됩니다.

트레이드를 실행하기 위해 전략은 신호가 트리거될 때 strategy.entry를 사용하여 긴 또는 짧은 포지션을 입력합니다. shortOnly 입력 기능이 활성화되면 판매 신호만 거래됩니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 명확하고 이해하기 쉽고 실행하기 쉬운 규칙
  2. MA 크로스오버는 고전적이고 널리 알려진 거래 신호입니다.
  3. 매우 사용자 정의 가능한 MA 유형, 길이 및 가격 소스
  4. 트레이드 할 수 있습니다 오직 낮은 거래 빈도에 신호를 판매

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 불투명한 시장에서 여러 개의 무효 교차가 발생할 수 있으며, 과도한 거래로 이어질 수 있습니다.
  2. 매개 변수들은 다양한 제품과 기간에 최적화되어야 합니다.
  3. 트렌드 방향을 결정하지 못하면 트렌드에 반대되는 거래가 가능합니다.

위험은 MA 길이를 조정하고 필터 조건을 추가하여 감소시킬 수 있습니다. 시장 편향을 결정하기 위해 트렌드 지표도 추가 할 수 있습니다.

더 나은 기회

이 전략은 다음과 같은 측면에서 향상될 수 있습니다.

  1. 크로스오버 신호를 더 신뢰할 수 있도록 VWAP 또는 전형적인 가격을 가격 소스로 사용하십시오.

  2. 검증 기간을 추가하여 단기적인 잘못된 교차를 피합니다.

  3. 시장 변동성에 따라 허용 가능한 최대 손실에 기초한 ATR 중지값을 포함합니다.

  4. 최적의 조합을 찾기 위해 곡선을 맞추는 것을 통해 매개 변수 최적화

  5. 더 높은 시간 프레임 트렌드의 방향으로 신호만 고려하십시오.

요약

이중 MA 크로스오버 전략은 이해하기 쉽고 구현하기 쉬우며, 높은 사용자 정의성을 가진 두 MA 크로스오버에서 무역 신호를 생성합니다. 그러나 불안정한 시장에서 과도한 유효하지 않은 신호를 생성 할 수도 있습니다. 추가 연구가 필요한 풍부한 향상 기회와 함께 매개 변수 및 논리 최적화를 통해 위험을 줄일 수 있습니다.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
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/
// © RafaelPiccolo

//@version=4
strategy("Double MA Cross", overlay=true)

type1 = input("SMA", "MA Type 1", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len1 = input(10, minval=1, title="Length 1")
src1 = input(close, "Source 1", type=input.source)

type2 = input("SMA", "MA Type 2", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len2 = input(50, minval=2, title="Length 2")
src2 = input(close, "Source 2", type=input.source)

shortOnly = input(false, "Short only")

tema(src, len)=>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    ema3 = ema(ema2, len)
    return = 3 * (ema1 - ema2) + ema3

getPoint(type, len, src)=>
    return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)

p1 = getPoint(type1, len1, src1)
p2 = getPoint(type2, len2, src2)

shortCondition = crossunder(p1, p2)
longCondition = crossover(p1, p2)

if (shortCondition)
    strategy.entry("Short", strategy.short)

if (longCondition)
    if (shortOnly)
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long)

plot(p1, "MA 1", p1 < p2 ? color.red : color.green)
plot(p2, "MA 2", color.blue)


더 많은