듀얼 OTT 트렌드 팔로잉 전략


생성 날짜: 2023-10-08 15:10:31 마지막으로 수정됨: 2023-10-08 15:10:31
복사: 0 클릭수: 912
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이중 OTT 트렌드 추적 전략은 개선된 OTT 전략으로, 이중 OTT 라인과 계수를 결합하여 시장을 조정할 때 가짜 신호에 더 잘 대응한다. 이 전략은 터키의 거래자 Anıl Özekşi가 개발했으며, 그는 자신의 비디오 자습서에서 이 전략의 설계 아이디어를 자세히 설명한다.

원칙

이중 OTT 전략의 핵심은 두 개의 최적화된 트렌드 추적 라인 OTT를 사용하여 트렌드 방향을 판단하는 것이다. 그것은 먼저 이동 평균 MAvg를 계산하고, 그 다음 MAvg 값의 비율에 따라 긴 스톱 라인 longStop와 짧은 스톱 라인 shortStop를 얻는다. 가격이 긴 스톱 라인을 통과하면 상향 신호가 되고, 짧은 스톱 라인을 통과하면 상향 신호가 된다.

이 전략은 2가지 면에서 개선된 것으로, 시장의 잘못된 신호를 처리하기 위한 것이다.

  1. 두 개의 수직 이동 OTT 라인을 추가, 각각 OTTup 및 OTTdn, 그들은 OTT의 약간 위 위 이동 및 아래 이동. 가격이 이 두 개의 이동 라인을 돌파 할 때만 진정한 거래 신호를 생성한다.

  2. 작은 coefficient을 도입하여 두 개의 디지탈 OTT 라인을 미세 조정하여 시장에 더 정확하게 맞게합니다.

이 쌍 OTT 디자인을 통해, 대부분의 정리 시장의 잡음을 필터링 할 수 있으며, 잘못된 신호를 생성하지 않습니다. 따라서 트렌드 전환점을 더 잘 포착 할 수 있으며, 적시에 포지션을 전환 할 수 있습니다. 이것은 쌍 OTT 전략의 가장 큰 장점입니다.

장점

  • 이중 OTT 라인 디자인을 사용하여 가짜 신호를 효과적으로 필터링하여 전략의 안정성을 강화할 수 있습니다.
  • 추가된 미세 조정 계수 (coef) 는 OTT 라인을 시장 반응에 더 가깝게 만듭니다.
  • 작가는 Anıl Özekşi가 비디오에서 전략적 아이디어를 자세히 설명하고, 쉽게 이해할 수 있습니다.
  • 종합 EMA, 정지선 등 다양한 기술 지표로 시장 움직임을 판단한다.
  • 저자 Anıl Özekşi는 터키의 유명 상인이며, 전문적인 인지도가 있습니다.

위험

  • OTT 지표는 자체적으로 테스트를 끌 수 있는 위험이 있으며, 이중 OTT 디자인은 이 문제를 줄일 수 있습니다.
  • 대규모의 변동이 있을 경우, 스톱 라인이 자주 트리거될 수 있으며, 과도한 거래의 위험이 있습니다.
  • coef 인수는 신중하게 테스트하여 최적의 값을 얻어야 합니다. 그렇지 않으면 효과가 저하됩니다.
  • 이 비디오는 터키어 학습 프로그램으로, 언어 장애가 알고리즘의 올바른 이해에 영향을 미칠 수 있습니다.
  • 데이터 부족으로 인해 전략의 효과는 더 긴 기간과 더 많은 시장에서 검증되어야 합니다.

대책:

  • 정지선과 쌍 OTT 사이의 완충선을 추가하여 과민성을 피하십시오.
  • 코에프의 설정을 최적화하여 피드백 결과와 더 잘 일치시킵니다.
  • 알고리즘 논리를 올바르게 이해하도록 작성자 튜토리얼을 번역합니다.
  • 더 많은 역사적인 상황으로 재검토하여 전략 변수의 신뢰성을 검증합니다.

최적화 방향

  • 주기 길이와 같은 변수를 조정 가능한 입력 값으로 설정하는 것을 고려할 수 있습니다.
  • 다른 종류의 이동 평균을 시도하고, OTP 원리에 더 잘 맞는 평균 알고리즘을 찾아보세요.
  • 다양한 거래 품종에 따라 각각 최적화된 coef 계수의 크기
  • 필터링 메커니즘을 추가하여 비주류 거래 시간대의 잘못된 신호를 방지합니다.
  • 스톱 라인을 동적 추적으로 바꾸고, 변동률에 따라 실시간으로 조정합니다.
  • 기계 학습 알고리즘을 추가하여 AI를 사용하여 매개 변수 설정을 자동으로 최적화합니다.

종합적으로, 이중 OTT 전략은 Anıl Özekşi의 OTP 경험을 활용하고 혁신합니다. 그것은 신뢰할 수 있고 사용자 정의 가능한 트렌드 추적 전략 프레임 워크가 될 수 있습니다. 그러나 시장 변화에 적응하기 위해 지속적인 최적화 테스트가 필요합니다.

요약하다

이중 OTT 전략은 쌍 최적화 트렌드 추적 선과 미세 조정 계수를 통해 시장의 잘못된 신호 문제에 효과적으로 대응한다. 그것은 이동 평균 생각을 합리적으로 사용하고, 중지 선을 보조하여 동적으로 트렌드 추적한다. 이 전략은 간결하고 실용적이며, 유명한 거래자의 직접 경험을 통해 깊이 있는 연구의 가치가 있습니다. 그러나 우리는 또한 그것의 한계를 인식하고, 과대평가하지 않고 신중하게 검증해야합니다.

전략 소스 코드
/*backtest
start: 2023-09-07 00:00:00
end: 2023-10-07 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic

//created by: @Anil_Ozeksi
//developer: ANIL ÖZEKŞİ
//author: @kivancozbilgic

strategy("Twin Optimized Trend Tracker","TOTT", overlay=true)
src = input(close, title="Source")
length=input(40, "OTT Period", minval=1)
percent=input(1, "Optimization Constant", type=input.float, step=0.1, minval=0)
coeff=input(0.001, "Twin OTT Coefficient", type=input.float, step=0.001, minval=0)
showsupport = input(title="Show Support Line?", type=input.bool, defval=true)
showsignalsk = input(title="Show Signals?", type=input.bool, defval=true)
mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
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,9)
    vDD=sum(vdd1,9)
    vCMO=nz((vUD-vDD)/(vUD+vDD))
    VAR=0.0
    VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
VAR=Var_Func(src,length)
Wwma_Func(src,length)=>
    wwalpha = 1/ length
    WWMA = 0.0
    WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
WWMA=Wwma_Func(src,length)
Zlema_Func(src,length)=>
    zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
    zxEMAData = (src + (src - src[zxLag]))
    ZLEMA = ema(zxEMAData, length)
ZLEMA=Zlema_Func(src,length)
Tsf_Func(src,length)=>
    lrc = linreg(src, length, 0)
    lrc1 = linreg(src,length,1)
    lrs = (lrc-lrc1)
    TSF = linreg(src, length, 0)+lrs
TSF=Tsf_Func(src,length)
getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma

    if mav == "TMA"
        ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma
    ma
    
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 
OTTup=OTT*(1+coeff)
OTTdn=OTT*(1-coeff)

PPLOT=plot(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Support Line")

pALLup=plot(nz(OTTup[2]), color=color.green, linewidth=2, title="OTTup", transp=0)
pALLdn=plot(nz(OTTdn[2]), color=color.red, linewidth=2, title="OTTdown", transp=0)

buySignalk = crossover(MAvg, OTTup[2])
sellSignalk = crossunder(MAvg, OTTdn[2])
K1=barssince(buySignalk)
K2=barssince(sellSignalk)
O1=barssince(buySignalk[1])
O2=barssince(sellSignalk[1])

plotshape(buySignalk and showsignalsk and O1>K2 ? min(low-abs(roc(low,1)),OTTdn-abs(roc(low,1))) : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(sellSignalk and showsignalsk and O2>K1 ? max(high+abs(roc(high,1)),OTTup+abs(roc(high,1))) : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0,display=display.none)
longFillColor = highlighting ? (O2>K1 ? color.green : na) : na
shortFillColor = highlighting ? (O1>K2 ? color.red : na) : na
fill(mPlot, PPLOT, title="UpTrend Highligter", color=longFillColor,transp=90)
fill(mPlot, PPLOT, title="DownTrend Highligter", color=shortFillColor,transp=90)
fill(pALLup, pALLdn, title="Flat Zone Highligter", color=color.blue,transp=90)



dummy0 = input(true, title = "=Backtest Inputs=")
FromDay    = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth  = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear   = input(defval = 2005, title = "From Year", minval = 2005)
ToDay      = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth    = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear     = input(defval = 9999, title = "To Year", minval = 2006)
Start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)
Finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)
Timerange() =>
    time >= Start and time <= Finish ? true : false
if buySignalk
    strategy.entry("Long", strategy.long)
if sellSignalk
    strategy.entry("Short", strategy.short)