퀀트 라이트 (Quant Lights) 는 스토카스틱 지표와 OTT 지표를 사용하는 결합 전략이다. 이 전략은 스토카스틱 지표를 사용하여 구매 및 판매 신호를 생성하고 신호를 필터하기 위해 OTT 지표와 결합하여 큰 추세를 파악하고 잘못된 신호를 유발하는 시장 변동의 영향을 줄이려고합니다. 이 기사는 전략을 자세히 평가합니다.
이 전략의 핵심 아이디어는 신호 필터링을 위해 OTT 지표와 스토카스틱 지표를 중첩하는 것입니다. 스토카스틱 지표는 가격이 극단적 인 영역에 있는지 판단하기 위해 지정된 시간 내에 가장 높고 가장 낮은 가격과 가격을 비교합니다. OTT 지표는 트렌드를 추적하기 위해 이동 평균과 동적 중지기를 사용합니다.
이 코드는 스토카스틱의 높은 수준을 1080로 설정하고 낮은 수준을 1020로 설정합니다. 스토카스틱 값이 그 사이에있을 때 범위 제한 영역입니다. 스토카스틱이 구매 / 판매 신호를 생성 할 때 코드는 OTT 지표에 따라 신호의 유효성을 결정합니다. 가격이 OTT 평균 라인을 넘으면 구매 신호가 발급됩니다. 가격이 OTT 평균 라인을 넘으면 판매 신호가 발급됩니다.
이 조합은 스토카스틱을 활용하여 과반 구매 및 과반 판매 조건을 결정하고 입시 신호를 생성하는 반면, OTT는 트렌드를 추적하고 과도한 시장 변동으로 인한 잘못된 신호를 필터링하기 위해 스톱을 사용하여 신호 정확성과 변동성을 최적화합니다.
이 전략은 다음과 같은 측면을 최적화하기 위해 스토카스틱 및 OTT 지표를 결합합니다.
요약하자면, OTT를 사용하여 스토카스틱 신호를 필터링함으로써 전략은 신호 품질과 투자 수익을 효과적으로 향상시키고 거래 수와 전략 변동성을 줄여 낮은 위험, 높은 수익과 트렌드를 자세히 추적하는 효과를 달성합니다.
위 위험에 대해 다음과 같은 조치를 취하여 개선 할 수 있습니다.
이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.
다른 시장과 주식 유형에 따라 매개 변수 설정을 조정합니다. 현재 기본 값은 보편적이며 최적의 매개 변수 조합을 찾기 위해 다른 주식에 대해 개별적으로 테스트 할 수 있습니다.
이윤을 취하고 이동 중지 메커니즘을 도입한다. 현재 동적 고정 중지를 사용하여 손실과 이익을 동적으로 추적할 수 없다. 추가 위험과 이익 통제를 위해 이동 중지 및 수익을 도입하는 테스트를 수행 할 수 있다.
신호 판단 논리를 최적화한다. 현재 판단 논리는 비교적 간단하며, 가격이 깨지거나 떨어지면 직접 구매 및 판매 신호를 표시합니다. 신호 신뢰성을 보장하기 위해 더 많은 지표와 가격 패턴을 통합 할 수 있습니다.
오픈 포지션 조건과 필터링 메커니즘을 증가시킵니다. 현재의 전략은 모든 신호를 무차별적으로 처리합니다. 볼륨 지표, 거래량 지표 및 기타 오픈 포지션 조건이 도입 될 수 있으며, 잘못된 신호를 필터링하기위한 특정 신호 시간 창이 있습니다.
OTT로 다른 지표 조합을 테스트합니다. 현재는 스토카스틱과 OTT 조합을 사용합니다. MACD 및 RSI와 같은 다른 지표를 OTT로 결합하는 효과는 테스트 할 수 있습니다.
자본 관리 및 포지션 사이징 모듈을 통합한다. 현재는 자본 관리 및 포지션 제어 메커니즘이 없으며 완전히 중지에 의존한다. 단일 및 전반적인 위험을 더 통제하기 위해 다양한 유형의 자본 관리 및 포지션 사이징 방법이 테스트 될 수 있다.
퀀트 라이트 (Quant Lights) 는 스토카스틱 지표와 OTT 지표를 유기적으로 결합한 수치 전략이다. 신호 정확성을 향상시키고 위험을 줄이는 동시에 주요 트렌드를 효과적으로 파악하기 위해 두 지표의 보완적인 강점을 활용합니다.
이 전략의 장점은 낮은 오류율, 명확한 신호 및 작은 변동성입니다. 신호 신뢰성을 향상시키고, 정지 수준을 최적화하고, 거래 빈도를 줄이고, 권장되는 양적 전략입니다.
동시에, 이 전략에는 여전히 개선의 여지가 있습니다. 매개 변수 최적화, 정지 메커니즘의 개선, 신호 및 필터링 메커니즘의 향상 등을 통해 전략은 더 안정적이고 자동화되고 지능적인 방향으로 발전 할 수 있습니다. 이것은 또한 우리의 후속 작업의 목표입니다.
/*backtest start: 2023-12-27 00:00:00 end: 2024-01-03 00:00:00 period: 3m basePeriod: 1m 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(title="Stochastic Optimized Trend Tracker", shorttitle="SOTT", format=format.price, precision=2) periodK = input(250, title="%K Length", minval=1) smoothK = input(50, title="%K Smoothing", minval=1) src1 = input(close, title="Source") length=input(3, "OTT Period", minval=1) percent=input(0.618, "OTT Percent", type=input.float, step=0.1, minval=0) showsupport = input(title="Show Support Line?", type=input.bool, defval=false) showsignalsc = input(title="Show Stochastic/OTT Crossing Signals?", type=input.bool, defval=false) Var_Func1(src1,length)=> valpha1=2/(length+1) vud11=src1>src1[1] ? src1-src1[1] : 0 vdd11=src1<src1[1] ? src1[1]-src1 : 0 vUD1=sum(vud11,9) vDD1=sum(vdd11,9) vCMO1=nz((vUD1-vDD1)/(vUD1+vDD1)) VAR1=0.0 VAR1:=nz(valpha1*abs(vCMO1)*src1)+(1-valpha1*abs(vCMO1))*nz(VAR1[1]) VAR1=Var_Func1(src1,length) k = Var_Func1(stoch(close, high, low, periodK), smoothK) src=k+1000 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) h0 = hline(1080, "Upper Band", color=#606060) h1 = hline(1020, "Lower Band", color=#606060) fill(h0, h1, color=#9915FF, transp=80, title="Background") plot(k+1000, title="%K", color=#0094FF) MAvg=Var_Func(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(showsupport ? MAvg : na, color=#0585E1, linewidth=2, title="Support Line") OTTC = #B800D9 pALL=plot(nz(OTT[2]), color=OTTC, linewidth=2, title="OTT", transp=0) alertcondition(cross(src, OTT[2]), title="Price Cross Alert", message="OTT - Price Crossing!") alertcondition(crossover(src, OTT[2]), title="Price Crossover Alarm", message="PRICE OVER OTT - BUY SIGNAL!") alertcondition(crossunder(src, OTT[2]), title="Price Crossunder Alarm", message="PRICE UNDER OTT - SELL SIGNAL!") buySignalc = crossover(src, OTT[2]) plotshape(buySignalc and showsignalsc ? OTT*0.995 : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0) sellSignallc = crossunder(src, OTT[2]) plotshape(sellSignallc and showsignalsc ? OTT*1.005 : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) 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 buySignalc strategy.entry("Long", strategy.long,when=Timerange()) if sellSignallc strategy.entry("Short", strategy.short,when=Timerange())