리소스 로딩... 로딩...

전략에 따른 다중 이동 평균 동력 추세

저자:차오장, 날짜: 2024-11-12 15:05:09
태그:SMARSIMA

img

전반적인 설명

이 전략은 여러 이동 평균 및 동력 지표에 기반한 트렌드 다음 거래 시스템입니다. 주로 20 일, 50 일, 150 일 및 200 일 간 단순 이동 평균 (SMA) 사이의 동적 관계를 활용하여 거래량 및 RSI 지표와 결합하여 트렌드가 약화 될 때 매일의 시간 프레임 및 출구 위치에서 강력한 상승 추세를 파악합니다. 이 전략은 잘못된 신호를 효과적으로 필터링하고 여러 기술적 지표의 조정된 사용을 통해 거래 정확도를 향상시킵니다.

전략 원칙

핵심 논리는 다음의 주요 구성 요소를 포함합니다.

  1. 이동 평균 시스템: 추세 판단 시스템을 구축하기 위해 20/50/150/200 일 이동 평균을 사용합니다. 상승률 조화를 요구합니다.
  2. 모멘텀 확인: RSI 지표와 이동 평균을 사용하여 가격 모멘텀을 판단합니다. RSI가 55 이상 또는 RSI SMA가 50 이상과 상승을 요구합니다.
  3. 부피 검증: 20일 부피 평균과 최근 부피를 비교하여 신호 유효성을 확인합니다.
  4. 트렌드 지속성 검증: 50일 MA가 40 거래일 중 적어도 25일 동안 상승세를 유지하는지 확인합니다.
  5. 포지션 확인: 가격은 최소 20 거래일 동안 150일 MA 이상 유지되어야 합니다.

구매 조건은 다음과 같습니다.

  • 최근 10일 동안 4일 이상 상승세를 보이며, 최소 1일 동안 높은 거래량을 기록한 경우
  • RSI 지표가 동력 조건을 충족합니다.
  • 상승률 및 지속적인 상승률을 나타내는 이동 평균 시스템
  • 150일 마이너스 마이너스 이상 가격 안정성

판매 조건은 다음과 같습니다.

  • 150일 마이너스 마이너스 아래로 오가는 가격
  • 연속적인 높은 부피 감소
  • 50일 MA가 150일 MA보다 낮아진 경우
  • 부피가 증가한 최근 하향 촛불

전략적 장점

  1. 여러 가지 기술 지표의 교차 검증은 잘못된 판단을 줄여줍니다.
  2. 엄격한 트렌드 지속 요구 사항은 단기 변동을 필터링합니다.
  3. 부피 분석 통합은 신호 신뢰성을 향상시킵니다.
  4. 명확한 스톱 로스 및 이윤 취득 조건은 위험을 효과적으로 제어합니다.
  5. 중장기 동향을 파악하고 거래 빈도를 줄이는 데 적합합니다.
  6. 명확한 전략 논리, 이해하기 쉽고 실행하기 쉬운

전략 위험

  1. 이동 평균 시스템은 지연, 초기 트렌드 단계를 놓칠 수 있습니다
  2. 엄격한 진입 조건으로 일부 거래 기회를 놓칠 수 있습니다.
  3. 불안한 시장에서 종종 잘못된 신호를 생성 할 수 있습니다.
  4. 시장 전환을 확인하는 지연
  5. 소모에 견딜 수 있도록 더 큰 자본 규모가 필요합니다.

위험 관리 제안:

  • 합리적인 스톱 로스 포지션을 설정
  • 보수적인 돈 관리
  • 트렌드 확인 지표를 추가하는 것을 고려하십시오.
  • 시장 환경에 따라 매개 변수를 조정

전략 최적화 방향

  1. 적응 매개 변수를 추가
  • 시장 변동성에 따라 MA 기간을 동적으로 조정합니다.
  • RSI 임계 설정 최적화
  1. 스톱 로스 메커니즘 개선
  • 후속 정지를 추가
  • 시간 기반 정지 설정
  1. 시장 환경 분석을 도입
  • 트렌드 강도 지표를 추가합니다.
  • 변동성 지표를 고려하십시오.
  1. 거래 크기를 최적화
  • 동적 위치 관리 설계
  • 신호 강도에 따라 조정

요약

이 전략은 여러 가지 기술 지표를 조정하여 강력한 트렌드 기회를 효과적으로 포착하는 엄격하게 설계된 트렌드 다음 전략이다. 전략의 주요 장점은 포괄적인 신호 확인 메커니즘과 엄격한 위험 통제 시스템이다. 약간의 지연이 있지만 합리적인 매개 변수 최적화 및 위험 관리를 통해 전략은 장기적인 운영에서 안정적인 성능을 유지할 수 있다. 투자자는 시장 환경 적응성에주의를 기울이고, 합리적으로 위치를 제어하고, 실시간 거래에서 전략을 적용할 때 실제 조건에 기반한 표적 최적화를 수행하는 것이 좋습니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Micho's 150 (1D Time Frame Only)", overlay=true)

// Define the length for the SMAs and RSI
sma20Length = 20
sma50Length = 50
sma150Length = 150
sma200Length = 200
volumeMaLength = 20
rsiLength = 14
rsiSmaLength = 14
smaCheckLength = 40  // Check the last month of trading days (~20 days)
requiredRisingDays = 25  // Require SMA to rise in at least 16 of the past 20 days
sma150AboveSma200CheckDays = 1  // Require SMA150 > SMA200 for the last 10 days

// Calculate the SMAs for price
sma20 = ta.sma(close, sma20Length)
sma50 = ta.sma(close, sma50Length)
sma150 = ta.sma(close, sma150Length)
sma200 = ta.sma(close, sma200Length)

// Calculate the 20-period moving average of volume
volumeMA20 = ta.sma(volume, volumeMaLength)

// Calculate the 14-period RSI
rsi = ta.rsi(close, rsiLength)

// Calculate the 14-period SMA of RSI
rsiSMA = ta.sma(rsi, rsiSmaLength)

// Check if most of the last 5 days are buyer days (close > open)
buyerDays = 0
for i = 0 to 9
    if close[i] > open[i]
        buyerDays := buyerDays + 1

// Check if at least 1 day has volume higher than the 20-period volume MA
highVolumeDays = 0
for i = 0 to 9
    if close[i] > open[i] and volume[i] > volumeMA20
        highVolumeDays := highVolumeDays + 1

// Define the new RSI condition
rsiCondition = (rsi >= 55) or (rsiSMA > 50 and rsi > rsi[1])

// Check if the 50-day SMA has been rising on at least 16 of the last 20 trading days
risingDays = 0
for i = 1 to smaCheckLength
    if sma50[i] > sma50[i + 1]
        risingDays := risingDays + 1

// Check if the SMA has risen on at least 16 of the last 20 days
sma50Rising = risingDays >= requiredRisingDays

// Check if the price has been above the SMA150 for the last 20 trading days
priceAboveSma150 = true
for i = 1 to smaCheckLength
    if close[i] < sma150[i]
        priceAboveSma150 := false

// Check if the SMA150 has been above the SMA200 for the last 10 days
sma150AboveSma200 = true
for i = 1 to sma150AboveSma200CheckDays
    if sma150[i] < sma200[i]
        sma150AboveSma200 := false

// Define the conditions for the 150-day and 200-day SMAs being rising
sma150Rising = sma150 > sma150[1]
sma200Rising = sma200 > sma200[1]

// Check if most of the last 5 days are seller days (close < open)
sellerDays = 0
for i = 0 to 9
    if close[i] < open[i]
        sellerDays := sellerDays + 1

// Check if at least 1 day has seller volume higher than the 20-period volume MA
highSellerVolumeDays = 0
for i = 0 to 9
    if close[i] < open[i] and volume[i] > volumeMA20
        highSellerVolumeDays := highSellerVolumeDays + 1

// Check in the last N days the price below 150
priceBelowSma150 = true
for i = 0 to 0
    if close[i] > sma150[i]
        priceBelowSma150 := false

// Restrict the strategy to 1D time frame
if timeframe.isdaily
    // Buy condition:
    // - Most of the last 5 days are buyer days (buyerDays > 2)
    // - At least 1 of those days has high buyer volume (highVolumeDays >= 1)
    // - RSI SMA (14-period) between 45 and 50 with RSI >= 55, or RSI SMA > 50 and RSI rising
    // - 50-day SMA > 150-day SMA and 150-day SMA > 200-day SMA
    // - 50-day SMA has been rising on at least 16 of the last 20 trading days
    // - The price hasn't been below the 150-day SMA in the last 20 days
    // - 150-day SMA has been above the 200-day SMA for the last 10 days
    // - 150-day and 200-day SMAs are rising
    buyCondition = (close > sma150 and buyerDays > 4 and highVolumeDays >= 1 and rsiCondition  and sma50 > sma150 and sma50Rising and sma150Rising and sma200Rising and priceAboveSma150)

    // Sell condition:
    // - Price crossing below SMA 150
    // - Seller volume (current volume > volume MA 20)
    // - 150-day SMA crosses below 200-day SMA
    // - Most of the last 5 days are seller days (sellerDays > 2) and at least 1 day of higher seller volume (highSellerVolumeDays >= 1)
    sellCondition = (priceBelowSma150 and (sma50 < sma150 or (sellerDays >5 and highSellerVolumeDays >= 5)))

    // Execute buy when all conditions are met
    if (buyCondition)
        strategy.entry("Buy", strategy.long)

    // Execute sell when all conditions are met
    if (sellCondition)
        strategy.close("Buy")


관련

더 많은