
량화 빛은 스토카스틱 지표와 OTT 지표를 사용하는 조합 전략이다. 전략은 스토카스틱 지표를 사용하여 구매 및 판매 신호를 생성하고, OTT 지표와 결합하여 신호를 필터링하여 큰 트렌드를 잡기 위해 시도하고 시장의 흔들림으로 인한 가짜 신호의 영향을 줄인다. 이 기사는 이 전략에 대한 자세한 평가를 할 것이다.
이 전략의 핵심 아이디어는 Stochastic 지표에 OTT 지표를 중첩하여 신호 필터링을 수행하는 것입니다. Stochastic 지표는 가격을 지정된 시간 동안의 최고 가격과 최저 가격과 비교하여 가격이 극한 지역에 있는지 판단하는 데 사용됩니다. OTT 지표는 이동 평균과 동적 스톱로스를 사용하여 트렌드를 추적합니다.
코드 설정 Stochastic의 높이는 1080이고, 낮이는 1020이며, Stochastic의 중간값은 그 사이에 평평한 간격이다. Stochastic이 구매/판매 신호를 생성할 때, 코드는 OTT 지표에 따라 신호의 유효성을 판단한다. 가격이 OTT 평균선을 위쪽으로 통과하면 구매 신호가 발송되며, 가격이 OTT 평균선을 아래로 통과하면 판매 신호가 발송된다.
이 조합은 스토카스틱을 사용하여 과매매를 판단하고 진입 신호를 발송합니다. OTT는 트렌드를 추적하고, 너무 강한 진동 상황을 막기 위해 손실 필터를 사용하는 가짜 신호를 사용하여 신호의 정확도와 변동을 최적화합니다.
이 전략은 스토카스틱과 OTT 지표의 조합을 사용하여 다음과 같은 몇 가지 측면을 최적화합니다.
종합적으로 볼 때, 이 전략은 OTT를 사용하여 스토카스틱 신호를 필터링하여 신호 품질과 전략 수익을 효과적으로 향상시키며, 거래 수와 전략 변동성을 줄여서, 경향에 가까운, 낮은 위험과 높은 수익의 효과를 얻었습니다.
위와 같은 위험에는 다음과 같은 개선방안이 있습니다.
이 전략은 다음의 몇 가지 측면에서 더욱 개선될 수 있습니다.
다른 시장과 주식 종류에 따라 변수를 조정한다. 현재 기본값은 일반적이며, 다른 주식마다 개별적으로 테스트하여 최적의 변수 조합을 찾을 수 있다.
스톱 메커니즘과 모바일 스톱을 도입한다. 현재는 다이내믹한 고정 스톱이 적용되고 있으며, 손실과 수익을 동적으로 추적할 수 없다. 전략적 위험과 수익을 더 제어하기 위해 모바일 스톱과 스톱을 도입하는 테스트가 가능하다.
최적화 신호 판단 논리. 현재 판단 논리는 간단하고, 가격의 상하 돌파는 직접적으로 구매 및 판매 신호를 표시한다. 신호의 신뢰성을 보장하기 위해 더 많은 지표와 가격 형태 판단을 결합하는 것을 고려할 수 있다.
포지션 개시 조건과 필터링 메커니즘을 추가한다. 현재 전략은 각 신호를 무차별적으로 처리한다. 양력 지표, 거래량 지표 등의 포지션 개시 조건을 도입하고, 가짜 신호를 필터링하기 위해 특정 신호 시간 창을 추가할 수 있다.
다양한 지표와 OTT의 결합을 테스트한다. 현재는 Stochastic과 OTT의 조합이 사용된다. MACD, RSI 등 다른 지표와 OTT의 결합 효과를 테스트할 수 있다.
융합자금관리 및 포지션관리 모듈. 현재는 자금관리 및 포지션 제어 장치가 없으며, 전적으로 스톱로스에 의존한다. 개별 및 전체 위험을 더욱 제어하기 위해 다양한 유형의 자금관리 및 포지션 관리 방법을 테스트 할 수 있다.
량화의 빛 Stochastic과 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())