이동 평균 크로스오버 전략

저자:차오장, 날짜: 2023-12-08 15:23:33
태그:

img

이 전략은 거래 신호를 생성하기 위해 20 일 이동 평균과 60 일 이동 평균의 교차를 채택합니다. 가격이 20 일 MA 이상으로 떨어지면 긴 거리로 이동하고 20 일 MA 이하로 떨어지면 포지션을 닫습니다. 마찬가지로 가격이 60 일 MA를 넘으면 거래 신호를 형성합니다. 이 전략은 전형적인 트렌드 다음 시스템에 속합니다.

전략 논리

  1. 20일 간편 이동 평균과 60일 간편 이동 평균을 계산합니다.
  2. 닫기 가격이 20일 MA를 넘을 때 길게 이동합니다.
  3. 포지션 종료 시폐가격이 20일 MA 이하로 떨어지면 포지션 종료
  4. 클로징 가격이 60일 MA를 넘으면 긴 거래가 됩니다.
  5. 클로즈 가격이 60일 MA 이하로 떨어지면 포지션을 닫습니다.

위의 규칙은 이 전략의 거래 신호와 논리를 정의합니다. 가격이 MA 라인을 넘을 때, 새로운 트렌드가 나타나고 있음을 보여줍니다. 그리고 우리는 긴 트렌드를 따라 갈 수 있습니다. 가격이 MA 라인 아래에 떨어지면, 트렌드가 끝나고 있음을 보여줍니다. 그래서 우리는 포지션을 닫습니다.

장점

  1. 이중 MA를 채택하면 전략이 더 안정적입니다. 20 일 MA는 단기 기회를 더 빨리 포착하고 60 일 MA는 중장기 트렌드에서 일부 시장 소음과 잠금을 필터링합니다.
  2. 백테스트는 2018년부터 시작하여 중국 A 주식 시장에 비해 더 발전된 거래 시스템을 가진 대만 주식 시장을 선택하여 전략의 효과를 더 잘 반영합니다.
  3. 적절한 스톱 로즈와 포지션 사이즈를 설정하여 위험을 최대한 조절합니다.

위험성

  1. 이 전략은 MA 지표에만 의존합니다. 시장에서 명백한 추세가 없을 때 더 많은 윙스를 생성 할 수 있습니다.
  2. 이 전략은 구매/판매 규모와 위치를 최적화하지 않고 자본 사용량을 극대화하지 못합니다.
  3. 이 전략은 가격 상승과 하락에 대칭적으로 반응하며 다른 시장 조건에 적응할 수 없습니다.

위험 해결 방법:

  1. KDJ, MACD와 같은 다른 지표를 추가하여 여러 가지 확인을 형성하여 잘못된 거래를 피합니다.
  2. 시가총액, 변동성 등에 따라 포지션 크기와 자본 사용 효율을 최적화합니다.
  3. 시장 단계에 기반한 비대칭 움직임을 채택하고, 범위 제한 시장에서 거래를 줄이고, 명백한 추세에 따라 포지션 크기를 증가시킵니다.

최적화 방향

  1. 구매/판매 양을 최적화합니다. 스톱 로스를 기반으로 포지션 크기를 동적으로 조정합니다.
  2. MA 매개 변수를 최적화합니다. 앞으로의 최적화와 무작위 최적화를 통해 더 나은 매개 변수를 찾습니다.
  3. 스톱 로스 전략을 추가합니다. 스톱 로스 또는 스톱 리미트 오더를 이동하면 이익을 더 잘 보호합니다.
  4. 포지션 사이즈 관리 추가. 자본 규모, 시장 자본 등에 따라 거래 당 위치 크기를 동적으로 조정합니다.

요약

이것은 전형적인 이중 이동 평균 크로스오버 전략이다. 핵심 아이디어는 가격이 MA 라인을 넘을 때 위치를 설정하여 트렌드를 따르는 것입니다. 전략은 간단하고 실용적입니다. 한편, 더 나은 결과를 달성하기 위해 매개 변수 조정, 손실 중지, 위치 사이징 등을 통해 더 많은 최적화를 할 수 있습니다.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 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/
// © Astorhsu

//@version=5
strategy("Astor SMA20/60 TW", overlay=true, margin_long=100, margin_short=100)
backtest_year = input(2018, title='backtest_year') //回測開始年分
backtest_month = input.int(01, title='backtest_month', minval=1, maxval=12) //回測開始月份
backtest_day = input.int(01, title='backtest_day', minval=1, maxval=31)  //回測開始日期
start_time = timestamp(backtest_year, backtest_month, backtest_day, 00, 00)  //回測開始的時間函數

//Indicators
sma20 = ta.sma(close,20)
sma60 = ta.sma(close,60)
plot(sma20, color=color.green, title="sma(20)")
plot(sma60, color=color.red, title="sma(60)")

//進場條件
longCondition = ta.crossover(close, ta.sma(close, 20))
if (longCondition) and time >= start_time
    strategy.entry("open long20", strategy.long, qty=1, comment="站上m20做多")


shortCondition = ta.crossunder(close, ta.sma(close, 20))
if (shortCondition) and time >= start_time
    strategy.close("open long20",comment="跌破m20平倉", qty=1)     
    
longCondition1 = ta.crossover(close, ta.sma(close, 60))
if (longCondition1) and time >= start_time
    strategy.entry("open long60", strategy.long, qty=1, comment="站上m60做多")


shortCondition1 = ta.crossunder(close, ta.sma(close, 60))
if (shortCondition1) and time >= start_time
    strategy.close("open long60",comment="跌破m60平倉", qty=1)     

더 많은