
量化光は,ストキャスティック指標とOTT指標を組み合わせた戦略である.この戦略は,ストキャスティック指標を利用して買入と売却のシグナルを生成し,OTT指標と組み合わせてシグナルをフィルタリングして,大トレンドを捉え,市場変動による偽信号の影響を軽減しようとする.この記事は,この戦略を詳細に評価する.
この戦略の核心的な考えは,OTT指標をストカスティック指標に重ねて信号フィルタリングを行うことです.ストカスティック指標は,価格が指定された時間帯の最高価格と最低価格と比較して,価格が極端な領域にあるかどうかを判断するために使用されます.OTT指標は,移動平均と動的ストップを動向を追跡するために使用します.
コード設定 ストキャスティックの高位は1080,低位は1020で,ストキャスティックの中位は平らな区間である.ストキャスティックが買取/売却シグナルを生成する際,コードはOTT指標に基づいて信号の有効性を判断する.価格がOTT平均線を上方から越えた場合,買取シグナルが送信され,価格がOTT平均線を下方から越えた場合,販売シグナルが送信されます.
この組み合わせは,ストカスティック判断を活用し,オーバーバイを判断し,入場シグナルを発信する.OTTは,トレンドを追跡し,ストップダメージフィルタをオフにして,強すぎる振動状態による偽信号を利用し,シグナルの正確性と波動率を最適化する.
この戦略は,StochasticとOTTの指標を組み合わせて,以下のいくつかの側面を最適化しています.
総合的に見ると,この戦略はOTTを利用してストキャスティック信号をフィルタリングすることで,信号品質と戦略的利益を効果的に向上させ,取引回数と戦略の変動率を低下させ,傾向に近い,低リスク高利益の効果を達成した.
上記のリスクに対して,以下の改善策を講じることができます.
この戦略は,次のいくつかの点で深化・最適化できます.
異なる市場と株のカテゴリーに応じてパラメータを調整する.現在のデフォルト値は一般的であり,異なる株を個別にテストして最適なパラメータの組み合わせを探することができる.
ストップ・メカニズムと移動ストップの導入.現在,動的な固定ストップが採用されており,損失と利益を動的に追跡することはできません.戦略のリスクと利益をさらに制御するために移動ストップとストップの導入をテストすることができます.
信号判断の論理を最適化する.現在の判断の論理は比較的単純で,価格の上下突破を直接標識して買いと売りの信号を与える.信号の信頼性を確保するために,より多くの指標と価格形態の判断を組み合わせることを考えることができる.
ポジション開設条件とフィルターメカニズムを追加する.現在の戦略は,各信号を無差別に処理する.量能指標,成交量指標などのポジション開設条件を導入し,偽信号を排除するために一定の信号時間ウィンドウを追加する.
異なる指標とOTTの組み合わせをテストする.現在,StochasticとOTTの組み合わせが採用されている.MACD,RSIなどの他の指標とOTTの組み合わせの効果をテストすることができる.
融合資金管理とポジション管理モジュール 資金管理とポジション管理のメカニズムが存在しないため,完全にはストップ・ローズに依存している. 単一のリスクと全体的なリスクをさらに制御するために,異なる種類の資金管理とポジション管理方法をテストすることができます.
量化光線は,OTT指標とストキャスティックが有機的に結合した量化戦略である.これは,2つの指標の互補的な優位性を利用し,信号の正確性を向上させ,大きなトレンドを効果的に捉えながらもリスクを低減する.
この戦略は,誤差が低く,信号が明確で波動が少ないという利点があります.信号の信頼性を高め,ストップ・ロスのレベルを最適化し,取引頻度を低下させ,推奨される量化戦略です.
同時に,この戦略には改善の余地があります.パラメータの最適化,損壊防止機構の改善,信号およびフィルタリング機構の強化などの手段によって,この戦略をより安定,自動化,および知能化へと発展させることができます.これは私たちの将来の仕事の目標でもあります.
/*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())