이동 평균과 볼린거 대역에 기초한 양적 거래 전략

저자:차오장, 날짜: 2024-04-26 11:45:05
태그:SMAWMAEMA

img

전반적인 설명

이 전략은 주로 움직이는 평균과 볼링거 밴드를 활용하여 시장 추세와 변동성을 파악합니다. 간단한 움직이는 평균 (SMA), 가중화 된 움직이는 평균 (WMA), 기하급수적인 움직이는 평균 (EMA) 이라는 세 가지 다른 유형의 움직이는 평균을 사용합니다. 동시에 볼링거 밴드를 사용하여 가격 채널을 설정하며 상부 및 하부 밴드가 포지션을 열고 닫는 신호로 작용합니다. 가격이 상부 볼링거 밴드를 넘어서면 짧은 포지션을 열고, 하부 밴드를 넘어서면 긴 포지션을 열고, 더 넓은 볼링거 밴드를 스톱 로스 수준으로 설정하여 가격이 이러한 밴드를 넘어서면 포지션을 닫습니다. 전반적으로,이 전략은 트렌드가 발생하면 신속하게 포지션을 설정하고 손실이 증가할 때 결정적으로 위험을 절감하여 안정적인 수익을 목표로합니다.

전략 원칙

  1. 서로 다른 기간을 가진 세 개의 이동 평균을 계산합니다: 느린 SMA, 빠른 EMA 및 중간의 WMA, 각각 장기, 단기 및 중장기 시장 트렌드를 반영합니다.
  2. 가격 표준편차에 기초한 두 개의 볼링거 밴드 집합을 계산합니다: 엔트리 볼링거 밴드 (상위와 하위 밴드 사이의 좁은 거리) 및 스톱 로스 볼링거 밴드 (더 넓은 거리). 엔트리 밴드는 포지션을 개척하는 데 사용되며, 스톱 로스 밴드는 포지션을 닫는 데 사용됩니다.
  3. 빠른 EMA가 상부 입구 볼링거 밴드 위에 넘어가면, 짧은 포지션을 열고 빠른 EMA가 하부 입구 볼링거 밴드 아래에 넘어가면, 긴 포지션을 열게 됩니다. 이것은 가격이 평균에서 크게 벗어났고 추세가 나타날 수 있음을 의미합니다.
  4. 포지션이 열리면 가격이 상단 스톱 로스 볼링거 밴드 이상으로 넘어가면 모든 긴 포지션을 닫습니다. 가격이 하단 스톱 로스 볼링거 밴드 아래로 넘어가면 모든 쇼트 포지션을 닫습니다. 이것은 손실을 제어하고 트렌드가 역전되면 결정적으로 손실을 막기 위해입니다.
  5. 위의 과정은 지속적으로 반복되므로 전략은 시장 추세에 따라 포지션을 유연하게 조정하고 적시에 손실을 중단하여 강력한 수익을 얻을 수 있습니다.

전략적 장점

  1. 그것은 다른 속도의 세 개의 이동 평균을 고려하여 다양한 수준의 시장 동향을 포괄적으로 포착합니다.
  2. 그것은 시장의 변동성에 따라 동적으로 조정될 수 있는 시장 개장 및 폐쇄 조건으로 볼링거 밴드를 도입하고 시장 조건에 유연하게 적응합니다.
  3. 손해를 막는 볼링거 밴드를 설정하여 마감을 제어하고 시장이 급격하게 변동할 때 결정적으로 포지션을 닫습니다. 증폭 손실을 피합니다.
  4. 논리는 명확하고 규칙은 간단하고 구현하고 최적화하는 것이 쉽습니다.
  5. 그것은 광범위한 응용 분야를 가지고 있으며 다양한 시장과 기간에 효과적 일 수 있습니다.

전략 위험

  1. 부상 시장에서 포지션의 빈번한 개장과 폐쇄는 상당한 거래 비용을 초래하여 수익을 감소시킬 수 있습니다.
  2. 트렌드 반전 초기 단계에서 전략은 여전히 원래 트렌드 방향으로 거래하여 특정 손실을 초래할 수 있습니다.
  3. 급격한 가격 격차와 같은 극단적인 시장 조건에서, 스톱 로스 볼링거 밴드는 위험을 효과적으로 제어하지 않을 수 있습니다.
  4. 부적절한 매개 변수 선택 (동도 평균 기간, 볼링거 대역 너비 등) 은 전략을 무효화 할 수 있습니다.
  5. 만약 시장이 계속 변동한다면 전략은 장기간 중요한 트렌드 기회를 포착할 수 없을 수도 있습니다.

전략 최적화 방향

  1. 부적절한 시장에서 거래 빈도와 비용을 줄이기 위해 이동 평균 기간 및 볼린저 대역 너비의 매개 변수를 적절히 증가하십시오.
  2. 더 많은 기술 지표 또는 시장 정서 지표를 필터로 도입하여 진입 신호의 정확성을 향상시키고 트렌드 시작에서 발생할 수있는 거래 손실을 피합니다.
  3. 격차가 발생했을 때 새로운 포지션을 중단하는 것과 같은 극단적인 시장 조건에 대한 특별한 규칙을 설정하여 위험을 제어합니다.
  4. 현재 시장에 가장 적합한 조합을 찾기 위해 매개 변수를 최적화하여 전략의 안정성을 강화합니다.
  5. 포지션 관리 및 자본 관리 규칙, 예를 들어 트렌드 강도 또는 수익성, 전체 스톱 로스 라인 설정 등을 기반으로 포지션을 조정하는 것을 추가하여 전략 리스크를 더 제어합니다.

요약

마리나 파르페노바 스쿨 프로젝트 봇 (Marina Parfenova School Project Bot) 은 이동 평균과 볼링거 밴드를 기반으로 한 양적 거래 전략이다. 볼링거 밴드 스톱 로스 라인을 통해 드래운드를 제어하면서 시장 트렌드를 포착하여 수익을 얻으려고 한다. 전략 논리는 간단하고 직설적이며, 광범위한 응용 분야가 있으며, 매개 변수는 시장 특성에 따라 유연하게 조정할 수 있다. 그러나 실제 응용에서는 여전히 옆 시장, 극단적 조건, 매개 변수 최적화 등에 대한 관심이 필요하며 자본 및 위치 관리 규칙의 추가 정리가 필요하다. 전반적으로, 이 전략은 더 견고한 거래 결과를 달성하기 위해 지속적으로 최적화 및 개선 될 수있는 기본 양적 거래 프레임워크로 작용할 수 있다.


/*backtest
start: 2024-03-01 00:00:00
end: 2024-03-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy ("Marina Parfenova School Project Bot", overlay = true)

sma(price, n) =>
    result = 0.0
    for i = 0 to n - 1
        result := result + price [i] / n    
    result

wma(price, n) =>
    result = 0.0
    sum_weight = 0.0
    weight = 0.0
    for i = 0 to n - 1
        weight := n - 1
        result := result + price [i]*weight
        sum_weight := sum_weight + weight
    result/sum_weight

ema(price, n) =>
    result = 0.0
    alpha = 2/(n + 1)
    prevResult = price 
    if (na(result[1]) == false)
        prevResult := result[1]
    result := alpha * price + (1 - alpha) * prevResult

/// Настройки
n_slow = input.int(50, "Период медленной скользящей средней", step=5)
n_fast = input.int(4, "Период быстрой скользящей средней")
n_deviation = input.int(30, "Период среднеквадратического отклонения", step=5)
k_deviation_open = input.float(1.2, "Коэффициент ширины коридора покупки", step=0.1)
k_deviation_close = input.float(1.6, "Коэффициент ширины коридора продажи", step=0.1)

// ----- Линии индикаторов -----

// Медленная скользящая 
sma = sma(close, n_slow)
plot(sma, color=#d3d3d3)

// Линии Боллинджера, обозначающие коридор цены
bollinger_open = k_deviation_open * ta.stdev(close, n_deviation)
open_short_line = sma + bollinger_open
plot(open_short_line, color=#ec8383)
open_long_line = sma - bollinger_open
plot(open_long_line, color=#6dd86d)

bollinger_close = k_deviation_close * ta.stdev(close, n_deviation)
close_short_line = sma + bollinger_close
plot(close_short_line, color=#e3e3e3)
close_long_line = sma - bollinger_close
plot(close_long_line, color=#e3e3e3)

// Быстрая скользящая
ema = ema(close, n_fast)
plot(ema, color = color.aqua, linewidth = 2)

// ----- Сигналы для запуска стратегии -----

// если ema пересекает линию open_short сверху вниз - сигнал на создание ордера в short
if(ema[1] >= open_short_line[1] and ema < open_short_line)
    strategy.entry("short", strategy.short)

// если ema пересекает линию open_long снизу вверх - сигнал на создание ордера в long
if(ema[1] <= open_long_line[1] and ema > open_long_line)
    strategy.entry("long", strategy.long)

// если свеча пересекает верхнюю линию коридора продажи - закрываем все long-ордера 
if (high >= close_short_line)
    strategy.close("long")

// если свеча пересекает нижнюю линию коридора продажи - закрываем все short-ордера
if (low <= close_long_line)
    strategy.close("short")

관련

더 많은