양자 빛 이동 평균 트렌드 추적 최적화 전략

저자:차오장, 날짜: 2024-01-04 15:44:23
태그:

img

전반적인 설명

퀀트 라이트 (Quant Lights) 는 스토카스틱 지표와 OTT 지표를 사용하는 결합 전략이다. 이 전략은 스토카스틱 지표를 사용하여 구매 및 판매 신호를 생성하고 신호를 필터하기 위해 OTT 지표와 결합하여 큰 추세를 파악하고 잘못된 신호를 유발하는 시장 변동의 영향을 줄이려고합니다. 이 기사는 전략을 자세히 평가합니다.

전략 원칙

이 전략의 핵심 아이디어는 신호 필터링을 위해 OTT 지표와 스토카스틱 지표를 중첩하는 것입니다. 스토카스틱 지표는 가격이 극단적 인 영역에 있는지 판단하기 위해 지정된 시간 내에 가장 높고 가장 낮은 가격과 가격을 비교합니다. OTT 지표는 트렌드를 추적하기 위해 이동 평균과 동적 중지기를 사용합니다.

이 코드는 스토카스틱의 높은 수준을 1080로 설정하고 낮은 수준을 1020로 설정합니다. 스토카스틱 값이 그 사이에있을 때 범위 제한 영역입니다. 스토카스틱이 구매 / 판매 신호를 생성 할 때 코드는 OTT 지표에 따라 신호의 유효성을 결정합니다. 가격이 OTT 평균 라인을 넘으면 구매 신호가 발급됩니다. 가격이 OTT 평균 라인을 넘으면 판매 신호가 발급됩니다.

이 조합은 스토카스틱을 활용하여 과반 구매 및 과반 판매 조건을 결정하고 입시 신호를 생성하는 반면, OTT는 트렌드를 추적하고 과도한 시장 변동으로 인한 잘못된 신호를 필터링하기 위해 스톱을 사용하여 신호 정확성과 변동성을 최적화합니다.

이점 분석

이 전략은 다음과 같은 측면을 최적화하기 위해 스토카스틱 및 OTT 지표를 결합합니다.

  1. 신호 정확성 향상. 스토카스틱 판단 과반 구매 및 과반 판매 조건, OTT는 변동 시장으로 인한 잘못된 신호를 필터.
  2. 전략의 변동성을 줄이고 동적 스톱을 통해 현재의 손실을 제한하여 많은 가짜 브레이크를 필터링합니다.
  3. 주요 주식 트렌드를 효과적으로 포착합니다. 스토카스틱은 기본 신호를 제공하고 OTT는 주요 트렌드를 추적합니다.
  4. 과도한 신호 간섭을 줄이고 쓸모없는 신호를 줄이는 동시에 신호 품질을 향상시킵니다.
  5. 동적 스톱 설정을 정량화합니다. 현재 손실을 질적으로 보장하고 전략 변동성을 더욱 감소시킵니다.
  6. 이 시스템은 트렌드와 과잉 구매/ 과잉 판매 지표를 통합합니다. 이 두 가지 유형의 지표를 사용하여 서로의 약점을 최적화하십시오.

요약하자면, OTT를 사용하여 스토카스틱 신호를 필터링함으로써 전략은 신호 품질과 투자 수익을 효과적으로 향상시키고 거래 수와 전략 변동성을 줄여 낮은 위험, 높은 수익과 트렌드를 자세히 추적하는 효과를 달성합니다.

위험 분석

  • 이 전략의 적용 범위는 상대적으로 좁습니다. 그것은 주로 명백한 추세를 보이는 주식에 적합합니다. 그것은 매우 큰 가격 변동 또는 측면 통합 주식에 덜 영향을줍니다.
  • 완전히 기술 분석에 의존합니다. 전략은 주식 기본과 거시 환경을 고려하지 않으므로 약간의 맹점이 있습니다.
  • 민감한 매개 변수 설정. 스토카스틱과 OTT의 여러 매개 변수는 전문적인 조정이 필요합니다. 그렇지 않으면 전략의 수익성에 영향을 줄 것입니다.
  • 스톱은 너무 느슨해 더 이상 최적화해야 할 잠재적 손실이 있습니다.
  • 가짜 브레이크와 변동 시장에서 특정 손실과 신호 간섭이 발생할 것입니다. 판단 조건과 정지 조건이 수정되어야합니다.

위 위험에 대해 다음과 같은 조치를 취하여 개선 할 수 있습니다.

  1. 다른 종류의 조류에 대해 다른 매개 변수 조합을 사용하십시오.
  2. 기본 정보와 뉴스를 포함해서 신호를 강화하세요.
  3. 최적의 설정을 찾기 위해 테스트를 통해 매개 변수를 최적화합니다.
  4. 위험을 줄이기 위해 이동 스톱을 도입하십시오.
  5. 판단 조건을 수정하고 더 엄격한 신호 확인 메커니즘을 사용합니다.

최적화 방향

이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.

  1. 다른 시장과 주식 유형에 따라 매개 변수 설정을 조정합니다. 현재 기본 값은 보편적이며 최적의 매개 변수 조합을 찾기 위해 다른 주식에 대해 개별적으로 테스트 할 수 있습니다.

  2. 이윤을 취하고 이동 중지 메커니즘을 도입한다. 현재 동적 고정 중지를 사용하여 손실과 이익을 동적으로 추적할 수 없다. 추가 위험과 이익 통제를 위해 이동 중지 및 수익을 도입하는 테스트를 수행 할 수 있다.

  3. 신호 판단 논리를 최적화한다. 현재 판단 논리는 비교적 간단하며, 가격이 깨지거나 떨어지면 직접 구매 및 판매 신호를 표시합니다. 신호 신뢰성을 보장하기 위해 더 많은 지표와 가격 패턴을 통합 할 수 있습니다.

  4. 오픈 포지션 조건과 필터링 메커니즘을 증가시킵니다. 현재의 전략은 모든 신호를 무차별적으로 처리합니다. 볼륨 지표, 거래량 지표 및 기타 오픈 포지션 조건이 도입 될 수 있으며, 잘못된 신호를 필터링하기위한 특정 신호 시간 창이 있습니다.

  5. OTT로 다른 지표 조합을 테스트합니다. 현재는 스토카스틱과 OTT 조합을 사용합니다. MACD 및 RSI와 같은 다른 지표를 OTT로 결합하는 효과는 테스트 할 수 있습니다.

  6. 자본 관리 및 포지션 사이징 모듈을 통합한다. 현재는 자본 관리 및 포지션 제어 메커니즘이 없으며 완전히 중지에 의존한다. 단일 및 전반적인 위험을 더 통제하기 위해 다양한 유형의 자본 관리 및 포지션 사이징 방법이 테스트 될 수 있다.

요약

퀀트 라이트 (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())

  
  



더 많은