이중 동력 유선 거래 전략

저자:차오장, 날짜: 2024-02-19 14:36:37
태그:

双动能均线交易策略

개요

이중 동력 유선 거래 전략은 OTT 지표와 Wavetrend 오시레이터 지표를 결합한 전략이다. 그것은 Anıl Özekşi 선생이 개발한 OTT 지표와 lonestar108의 Wavetrend 오시레이터 지표를 사용하여 성공적인 거래 지표를 형성한다. 이 전략은 쌍방향 시장에서 수행 될 수 있다.

전략적 원칙

이중 동력 유선 거래 전략은 먼저 브린 밴드 중심을 계산한다. 즉 이동 평균 MAvg이다. 그 다음 사용자 설정된 비율 범위와 주기에 따라 긴 중지 지점과 짧은 중지 지점 쇼트 스톱을 계산한다. 가격이 경로를 돌파할 때 더 많이하고 경로를 돌파할 때 공백한다. 종료 신호는 가격이 다시 유선 근처로 돌아가는 것이다.

구체적으로, 이 전략의 핵심 지표는 OTT 지표이다. OTT 지표는 평균선과 경계선으로 구성되어 있으며, 특정 알고리즘에 따라 시장의 변동도에 따라 경계선을 조정하는 위치이다. 가격이 경계선 OTT 아래로 떨어지면 공백; 가격이 경계선 OTT 위를 넘으면 더하십시오.

이 전략은 동시에 물결 트렌드 지표를 사용하여 가격 추세 방향을 판단합니다. 하향 추세를 판단하면 공백만 하고, 상승 추세를 판단하면 공백만 하고.

장점 분석

이중 동력 유선 거래 전략은 이동 평균, 브린밴드 및 OTT 지표의 장점을 결합하여 자동으로 스톱 손실 위치를 조정하여 스톱 손실이 활성화되는 가능성을 줄일 수 있습니다. 동시에 트렌드 판단 지표를 결합하여 불안한 추세에 휘말리지 않도록합니다.

특히, 이 전략의 주요 장점은 다음과 같습니다.

  1. 자동으로 손해배상을 조정하여 위험을 효과적으로 제어할 수 있습니다.
  2. OTT 지표는 반전 지점을 비교적 정확하게 판단합니다.
  3. 동향 지표와 함께 시장의 불안을 피하기 위해
  4. 규칙은 비교적 간단하고 명확하며 이해하기 쉽고 적용하기 쉽습니다.

위험 분석

이중 동력 유선 거래 전략에는 다음과 같은 몇 가지 측면에 집중하여 특정 위험이 있습니다.

  1. 급격한 시장에서, 스톱-손실 라인은 더 큰 손실을 초래할 수 있습니다.
  2. OTT 지표가 판단하는 반전 신호는 항상 정확하지 않으며 장애 신호가 발생할 수 있습니다.
  3. 추세 판단도 잘못될 수 있고, 추세 추세 추세 추세 추세 추세 추세 추세 추세
  4. 잘못된 매개 변수 설정도 전략 효과에 영향을 줄 수 있습니다.

이 문제에 대한 대책은 다음과 같습니다.

  1. 스톱 손실 범위를 적절하게 느슨하게 하여 스톱 손실 라인이 쉽게 활성화되지 않도록 한다.
  2. 다른 지표와 함께 OTT 신호의 신뢰성을 판단하여 가짜 신호를 방지합니다.
  3. 트렌드 판단을 더 신뢰할 수 있도록 적절한 매개 변수를 조정합니다.
  4. 가장 좋은 조합을 찾기 위한 최적화

최적화 방향

이중 동력 유선 거래 전략은 더 이상 최적화 할 여지가 있습니다:

  1. 신호 판단의 정확성을 높이기 위해 다른 지표와 결합하여 고려할 수 있습니다.
  2. 적응적인 스톱 손실 알고리즘을 연구하여 시장 변동 정도에 따라 스톱 손실 라인을 조정할 수 있습니다.
  3. 거래량 지표를 추가하여 낮은 양의 가짜 돌파구를 방지 할 수 있습니다.
  4. 다양한 이동 평균을 테스트하여 가장 적합한 평균을 찾을 수 있습니다.
  5. 기계 학습과 같은 방법을 시도해서 자동으로 최적화할 수 있습니다.

요약

이중 동력 일률화 거래 전략은 여러 지표의 장점을 통합하여 자동으로 스톱 손실 수준을 조정하고, 역전 신호를 판단하고, 경향 방향을 식별할 수 있다. 위험 통제 능력이 강하고, 사용하기 쉬운 등의 장점이 있다. 그러나, 부적절한 신호, 부적절한 신호 등의 위험도 있다. 이 전략은 추가로 최적화될 수 있으며, 다른 지표와 결합하여, 적응 알고리즘을 연구할 수 있다. 전체적으로 이중 동력 일률화 거래 전략은 실용적인 획기적인 거래 전략이다.


/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 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")


더 많은 내용