프랙탈파와 SMMA를 기반으로 한 FX 전략

저자:차오장, 날짜: 2023-11-13 16:39:41
태그:

img

전반적인 설명

이 전략은 트렌드 기회를 식별하기 위해 프랙탈 웨이브 이론과 SMMA를 결합하고, 수익 극대화를 위한 위험을 제어하기 위해 적절한 스톱 로스와 트레일링 스톱을 사용합니다. 특정 시간에 시장 변동을 피하기 위해 특정 거래 세션 중만 포지션을 입력합니다.

전략 논리

  • SMMA를 사용하여 평균 가격을 계산하고 트렌드 방향에 대한 시장 소음을 필터합니다.
  • 특정 기간 내 최고/최저 가격을 프랙탈 파동으로 사용하여 트렌드 반전 지점을 식별
  • 가격 파동이 SMMA를 넘어서면 짧게, SMMA를 넘어서면 길게
  • ATR에 기반한 스톱 로스 및 트레일링 스톱을 설정하여 리스크를 제어합니다
  • 특정 세션 내에서만 거래하고 주말 및 내일 변동을 피합니다.

이점 분석

  • 프랙탈파 이론은 트렌드 방향에 대한 SMMA와 결합하여 트렌드 반전 지점을 정확하게 식별합니다.
  • 손실 중지 및 ATR 후속 중지로 거래 당 손실을 효과적으로 제한합니다.
  • 유동 세션 중만 거래하면 과도한 미끄러짐과 변동성이 피할 수 있습니다.
  • 패러볼리 SAR를 엄격히 따라 반전 신호에서 종료하면 수익을 극대화합니다.

위험 분석

  • 부정확한 프랙탈 파동은 트렌드가 아닌 기간에 윙사브를 일으킬 수 있습니다.
  • SMMA 지연은 이상적인 트렌드 전환점을 놓칠 수 있습니다.
  • 너무 단단한 스톱 손실은 쉽게 중지 될 수 있습니다, 너무 느슨한 더 큰 손실을 초래할 수 있습니다
  • 다른 시장 조건에 적응할 수 없는 고정 수익

해결책:

  • 프랙탈 주기 및 SMMA에 대한 매개 변수를 최적화
  • 역전 신호를 확인하기 위해 스토카스틱을 추가합니다
  • 동적으로 스톱 손실, 이익 목표를 최적화

최적화 방향

  • 프랙탈 주기 및 SMMA 매개 변수를 최적화
  • 가짜 브레이크를 필터링하기 위해 스토카스틱 지표를 추가합니다.
  • 동적 스톱 로스 및 수익 취득 실험
  • 스톱 손실을 넓혀서 스톱 아웃을 피합니다.
  • 다양한 제품 및 거래 세션에 대한 매개 변수를 최적화

요약

이 전략은 트렌드 및 반전 지점을 식별하기 위해 프랙탈 웨이브 이론과 SMMA를 통합하여 적절한 스톱 로스와 수익을 취합니다. 매개 변수를 최적화하고 더 높은 안정성과 수익성을 위해 확인 지표를 추가하여 추가로 개선 할 수 있습니다.


/*backtest
start: 2022-11-12 00:00:00
end: 2023-11-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("FX Strategy Based on Fractals and SMMA", overlay=true)

// パラメータ
SMMAPeriod1 = input(30, title="SMMA Period")
StopLoss1 = input(7, title="Stop Loss %")
TrailingStopCoef1 = input(2.7, title="Trailing Stop Coefficient")
fractalPeriod = input(5, title="Fractal Period")

// SMMAの計算関数
smma(src, length) =>
    var float smma = na
    if na(smma[1])
        smma := sma(src, length)
    else
        smma := (smma[1] * (length - 1) + src) / length
    smma

// フラクタルの近似
highFractal = high[2] > high[1] and high[2] > high[3] and high[2] > high[4] and high[2] > high
lowFractal = low[2] < low[1] and low[2] < low[3] and low[2] < low[4] and low[2] < low

// エントリー条件
longEntrySignal = lowFractal and close[1] < smma(close, SMMAPeriod1)
shortEntrySignal = highFractal and close[1] > smma(close, SMMAPeriod1)

// エントリー実行
if (longEntrySignal)
    strategy.entry("Long", strategy.long)

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

// トレーリングストップの計算
atrValue = atr(10)
longStopPrice = close - atrValue * TrailingStopCoef1
shortStopPrice = close + atrValue * TrailingStopCoef1

// トレーリングストップの設定
strategy.exit("Exit Long", "Long", stop=longStopPrice)
strategy.exit("Exit Short", "Short", stop=shortStopPrice)

// バックテスト期間の設定(MetaTraderのバックテストと同じ期間)
startYear = 2007
startMonth = 05
startDay = 01
endYear = 2022
endMonth = 04
endDay = 01

startDate = timestamp(startYear, startMonth, startDay, 00, 00)
endDate = timestamp(endYear, endMonth, endDay, 23, 59)

// バックテスト期間内でのみトレードを実行
if (time >= startDate and time <= endDate)
    if (longEntrySignal)
        strategy.entry("Long", strategy.long)
    if (shortEntrySignal)
        strategy.entry("Short", strategy.short)


더 많은