골든 크로스 죽음의 크로스 전략

저자:차오장, 날짜: 2023-10-11 16:33:18
태그:

전반적인 설명

이 전략은 주식에 대한 긴 및 짧은 포지션을 구현하기 위해 간단한 이동 평균의 황금 십자 및 죽음의 십자 원리를 사용합니다. 빠른 MA가 느린 MA를 넘을 때 길게, 빠른 MA가 느린 MA를 넘을 때 짧게됩니다.

전략 논리

이 전략은 먼저 백트테스팅 기간을 정의하고, 두 이동 평균에 대한 계산 매개 변수를 설정합니다.

getMAType (() 함수는 두 MAs의 값을 계산합니다. fastMA는 짧은 기간 MA이고 slowMA는 긴 기간 MA입니다.

핵심 논리:

  • fastMA가 slowMA를 넘으면 긴 신호가 발사됩니다.

  • fastMA가 slowMA를 넘으면 짧은 신호가 발사됩니다.

마지막으로, 백테스팅 중에, 긴 신호를 볼 때 긴 위치를 취하고, 짧은 신호를 볼 때 짧은 위치를 취하십시오.

이점 분석

  • 간단하고 명확한 전략 아이디어, 이해하기 쉽고 실행하기 쉽습니다.
  • 대부분의 주식 제품에 적합한 광범위하게 적용 된 MA 크로스 오버 원칙을 사용합니다.
  • 사용자 정의 가능한 MA 유형과 매개 변수, 높은 적응력
  • 모듈형 전략 구조, 명확한 기능, 최적화 쉬운

위험 분석

  • MA 크로스오버는 약간의 지연이 있고, 거래 기회를 놓칠 수도 있습니다.
  • 시장에서 효율적으로 필터링을 할 수 없습니다. 함락될 가능성이 높습니다.
  • 매개 변수 최적화는 충분히 포괄적이지는 않습니다. 수동 경험이 필요합니다.
  • 거래별 위험과 손실을 효과적으로 통제할 수 없습니다.

위험에 대한 최적화 가능:

  1. 트렌드 식별을 위한 다른 기술적 지표들을 추가합니다.

  2. 거래당 손실 금액에 대한 제어값에 스톱 로스를 추가합니다.

  3. 부피 지표를 추가해서 윙사 시장을 피하세요.

  4. 최적의 파라미터 세트를 자동으로 찾기 위해 파라미터 최적화 메커니즘을 구축합니다.

최적화 방향

이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.

  1. 손실을 제어하기 위해 고정된 스톱 손실 포인트 또는 후속 스톱 손실과 같은 스톱 손실 전략을 추가하십시오.

  2. 거래 위험을 제어하기 위해 고정 또는 동적 위치 사이징과 같은 포지션 사이징 전략을 추가하십시오.

  3. 다른 기술 지표와 결합하여 필터를 추가하여 트렌드를 식별하고 승률을 향상시킵니다.

  4. 최적의 값을 찾기 위해 그리드 검색과 선형 회귀와 같은 방법을 통해 매개 변수를 최적화합니다.

  5. 브레이크아웃 철수와 같은 진입 전략을 확장하고, 거래 전술을 풍요롭게 하기 위해 주문을 확장합니다.

  6. 부피 지표를 추가해서 윙사 시장을 피하세요.

  7. 주식 지수, 외환, 암호화폐 등으로 제품을 확장합니다.

요약

이 전략은 MA 크로스오버 원리에 기반한 긴/단 주식 선택을 구현한다. 전략 아이디어는 간단하고 명확하고 널리 사용되고, 매우 적응 가능하며, 실질적으로 가치있다. 그러나 그것은 또한 일부 후퇴 및 윙사 필터링 문제를 가지고 있다. 미래 최적화는 더 유리하게 만들기 위해 스톱 손실, 매개 변수 최적화, 필터 등을 추가하는 것을 개선하는 데 초점을 맞출 수 있다.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy("Golden X BF Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2010, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() =>  true

///////////// MA Params /////////////
source1 = input(title="MA Source 1", defval=close)
maType1 = input(title="MA Type 1", defval="sma", options=["sma", "ema", "swma", "wma"])
length1 = input(title="MA Length 1", defval=50)

source2 = input(title="MA Source 2", defval=close)
maType2 = input(title="MA Type 2", defval="sma", options=["sma", "ema", "swma", "wma"])
length2 = input(title="MA Length 2", defval=200)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    res
    
///////////// MA /////////////
fastMA = getMAType(maType1, source1, length1)
slowMA = getMAType(maType2, source2, length2)

long = crossover(fastMA, slowMA)
short = crossunder(fastMA, slowMA)

/////////////// Plotting /////////////// 
checkColor() => fastMA > slowMA
colCheck = checkColor() ? color.lime : color.red
p1 = plot(fastMA, color = colCheck, linewidth=1)
p2 = plot(slowMA, color = colCheck, linewidth=1)
fill(p1, p2, color = checkColor() ? color.lime : color.red)
bgcolor(long ? color.lime : short ? color.red : na, transp=20)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("Long", strategy.long, when=long)
    strategy.entry("Short", strategy.short, when=short)

더 많은