이중 이동 평균 지능 추적 거래 전략

저자:차오장, 날짜: 2024-02-18 15:58:08
태그:

img

전반적인 설명

이중 이동 평균 지능 추적 거래 전략은 이동 평균과 특정 지표에 기반한 트렌드 다음 전략이다. 이 전략은 채널을 구축하기 위해 서로 다른 매개 변수 설정을 가진 두 개의 이동 평균을 사용하고 OTT 지표를 결합하여 채널의 상부와 하부 한계를 설정하여 가격 추세를 지능적으로 추적합니다. 가격이 채널을 통과하면 구매 또는 판매 작전이 실행됩니다.

전략 원칙

이 전략의 핵심 방법론은 두 개의 이동 평균과 OTT 지표를 사용하여 적응 채널을 구축하는 것입니다. 특히:

  1. 빠른 선 MAvg를 계산하여 CLOSE와 사용자 정의 이동 평균을 입력으로 사용하여 5개의 기간을 계산합니다.

  2. MAvg와 미리 설정된 비율을 기준으로 채널의 긴 라인 위치 LongStop와 짧은 라인 위치 ShortStop를 계산합니다.

  3. OTT 지표에서 채널 스톱 로스 MT를 계산하고, 길고 짧은 방향에 기초한 채널 가격 OTT를 계산합니다.

  4. OTT를 통해 가격이 떨어지면 거래 신호를 생성합니다.

위의 프로세스는 거래 신호를 생성하여 가격 트렌드 변화를 실시간으로 추적 할 수 있습니다.

전략적 장점

이 전략의 장점은 다음과 같습니다.

  1. 이중 이동 평균 채널 구조는 가격 추세를 효과적으로 포착합니다.
  2. OTT 지표는 위험을 제어하기 위해 채널 중지 손실을 설정합니다.
  3. 적응 가능한 채널 구조로 가격 변화에 빠르게 반응합니다.
  4. 다양한 제품과 시간 프레임에 대한 유연한 매개 변수 조정

전략 위험

또한 몇 가지 위험이 있습니다.

  1. 이중 이동 평균은 잘못된 신호로 이어지는 오차를 형성할 수 있습니다.
  2. 잘못된 OTT 매개 변수 설정은 너무 공격적이거나 보수적일 수 있습니다.
  3. 이 전략은 기하급수적인 요소를 고려하지 않고 기술적인 지표에만 의존합니다.

위험은 매개 변수 최적화, 다른 지표 및 기본 필터 통합을 통해 해결 될 수 있습니다.

최적화 방향

이 전략은 몇 가지 측면에서 최적화 될 수 있습니다.

  1. 적절한 제품 및 시간 프레임에 대한 이동 평균 매개 변수를 최적화합니다.
  2. 채널 너비 매개 변수를 최적화하여 민감성과 안정성을 균형 잡습니다.
  3. 거래량에 기반한 필터를 추가합니다.
  4. 기본에 기반한 방향 필터를 설정합니다.

요약

요약하자면, 이것은 이중 이동 평균 채널과 OTT 지표에 기반한 트렌드 다음 전략이다. 핵심 아이디어는 적응 채널을 구축하고 가격이 깨지면 신호를 생성하는 것입니다. 이 전략은 장점이 있지만 개선할 여지가 있습니다. 매개 변수 조정 및 논리 최적화로 배포 가치가있는 효율적인 양 거래 전략이 될 가능성이 있습니다.


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

//@version=4
strategy(title="BugRA_Trade_Strategy", shorttitle="BugRA_Trade_Strategy", overlay=true)

// Kullanıcı Girdileri
length = input(5, title="Period", minval=1)
percent = input(1, title="Sihirli Yüzde", type=input.float, step=0.1, minval=0)
mav = input(title="Hareketli Ortalama Türü", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
wt_n1 = input(10, title="Kanal Periyodu")
wt_n2 = input(21, title="Averaj Uzunluğu")
src = close

// Tarih Aralığı Girdileri
startDate = input(20200101, title="Başlangıç Tarihi (YYYYMMDD)")
endDate = input(20201231, title="Bitiş Tarihi (YYYYMMDD)")

// Tarih Filtresi Fonksiyonu
isDateInRange() => true

// Özel Fonksiyonlar
Var_Func(src, length) =>
    valpha = 2 / (length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = sum(vud1, length)
    vDD = sum(vdd1, length)
    vCMO = (vUD - vDD) / (vUD + vDD)
    varResult = 0.0
    varResult := nz(valpha * abs(vCMO) * src + (1 - valpha * abs(vCMO)) * nz(varResult[1]))
    varResult

Wwma_Func(src, length) =>
    wwalpha = 1 / length
    wwma = 0.0
    wwma := wwalpha * src + (1 - wwalpha) * nz(wwma[1])
    wwma

Zlema_Func(src, length) =>
    zxLag = floor(length / 2)
    zxEMAData = src + (src - src[zxLag])
    zlema = ema(zxEMAData, length)
    zlema

Tsf_Func(src, length) =>
    lrc = linreg(src, length, 0)
    lrs = lrc - linreg(src, length, 1)
    tsf = lrc + lrs
    tsf

getMA(src, length) =>
    ma = mav == "SMA" ? sma(src, length) :
         mav == "EMA" ? ema(src, length) :
         mav == "WMA" ? wma(src, length) :
         mav == "TMA" ? sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) :
         mav == "VAR" ? Var_Func(src, length) :
         mav == "WWMA" ? Wwma_Func(src, length) :
         mav == "ZLEMA" ? Zlema_Func(src, length) :
         mav == "TSF" ? Tsf_Func(src, length) : na

// Strateji Hesaplamaları
MAvg = getMA(src, length)
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT = MAvg > MT ? MT*(200+percent)/200 : MT*(200-percent)/200

plot(OTT, title="BugRA", color=color.rgb(251, 126, 9))

// Alım ve Satım Koşulları
longCondition = crossover(src, OTT) and isDateInRange()
shortCondition = crossunder(src, OTT) and isDateInRange()

// Strateji Giriş ve Çıkış Emirleri
if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.close("Long")


더 많은