이중 이동 평균을 기반으로 한 지능형 추적 거래 전략


생성 날짜: 2024-02-18 15:58:08 마지막으로 수정됨: 2024-02-18 15:58:08
복사: 2 클릭수: 505
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이중 이동 평균을 기반으로 한 지능형 추적 거래 전략

개요

이중평선 지능적 추적 거래 전략은 평선과 특정 지표에 기반한 트렌드 추적 전략이다. 이 전략은 두 개의 다른 파라미터 설정을 사용하여 평선을 구성하는 채널을 사용하고, OTT 지표와 결합하여 채널의 상하계를 설정하여 가격 트렌드에 대한 지능적 추적을 구현한다. 가격이 채널을 뚫었을 때 구매 또는 판매 작업을 수행한다.

전략 원칙

이 전략은 주로 두 개의 이동 평균과 OTT 지표를 사용하여 적응 통로를 구축합니다. 구체적인 원칙은 다음과 같습니다:

  1. 빠른 라인 MAvg를 계산하고, CLOSE 종료 가격과 사용자 정의 평균 라인을 입력합니다. 길이는 5입니다.

  2. MAvg와 설정 비율에 따라, 채널 상하의 최저 장선 위치 장단 스톱 및 짧은 장선 위치 단 단 단 스톱을 계산합니다.

  3. OTT 지표의 채널 이동 중지 MT를 계산하고, 빈 상태에 따라 채널 가격을 계산합니다.

  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")