量子光 移動平均 トレンド追跡 最適化戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-04 15:44:23
タグ:

img

概要

量子ライト (Quant Lights) は,ストコスタスティック指標とOTT指標を使用した組み合わせ戦略である.この戦略は,ストコスタスティック指標を使用して購入・販売信号を生成し,それらをOTT指標と組み合わせてシグナルをフィルタリングし,大きなトレンドを捉え,偽信号を引き起こす市場の変動の影響を軽減しようとしています.この記事は戦略を詳細に評価します.

戦略原則

OTTインジケーターは,STOCHASTICインジケーターにOTTインジケーターを重ねてシグナルフィルタリングを行う.OTTインジケーターは,価格が極端な領域にあるかどうかを判断するために,指定された時間帯の最高値と最低値と比較する.OTTインジケーターは,動平均値と動的ストップを使用してトレンドを追跡する.

コードはストコスタスティックの高値を1080で,低値を1020に設定する.ストコスタスティック値が両者の間にあるとき,それは範囲限定領域である.ストコスタスティックはOTT指標に基づいて購入/販売信号を生成すると,コードはシグナルの有効性を決定する.価格がOTT平均線を超えると,購入信号が発行される.価格がOTT平均線を下回ると,販売信号が発行される.

この組み合わせは,ストカスティックを利用し,過剰購入・過剰販売の条件を決定し,エントリー信号を生成し,OTTはトレンドを追跡し,過剰な市場変動によって引き起こされる偽信号をフィルタリングするためにストップを使用し,それによって信号の精度と変動性を最適化します.

利点分析

この戦略は,ストカスティック指標とOTT指標を組み合わせて,以下の側面を最適化しています.

  1. 信号の精度が向上しました ストキャスティック判断は 過剰購入と過剰販売の状況で OTTは変動する市場によって引き起こされる 誤った信号をフィルタリングします
  2. 戦略の変動が減少し ダイナミックストップで現在の損失を制限し 偽のブレイクをフィルタリングします
  3. 主要な株価動向を効果的に把握する.ストカスティックは基本的な信号を提供し,OTTは主要な動向を追跡する.
  4. 過剰な信号干渉を軽減し 無用な信号を減らす
  5. ダイナミックストップ設定を定量化します. 質的に現在の損失を保証し,戦略の変動性をさらに減少します.
  6. システムにはトレンド指標と過買い/過売り指標が統合されています.この2種類の指標を使用して,お互いの弱点を最適化します.

要するに,ストカストシシグナルをフィルタリングするためにOTTを使用することで,戦略は信号品質と投資収益を効果的に向上させ,取引数と戦略の変動性を減少させ,低リスク,高収益性,傾向の詳細な追跡効果を達成します.

リスク分析

  • この戦略の適用範囲は比較的狭い.主に明らかな傾向のある株式に適している.非常に大きな価格変動または横向 konsolidiation の株に影響が少ない.
  • 戦略は,株式の基本やマクロ環境を考慮していないので,いくつかの盲点があります.
  • センシティブなパラメータ設定.ストカスティックとOTTの複数のパラメータは,プロのチューニングを必要とします.そうでなければ,戦略の収益性に影響します.
  • ストップは緩すぎた 潜在的損失を伴い 更に最適化が必要だ
  • 偽のブレイクや変動する市場では,一定の損失と信号の干渉が発生します.判断条件とストップ条件は修正する必要があります.

上記リスクの改善には,次の措置が講じられます.

  1. 異なる種類のストックに対して異なるパラメータの組み合わせを使用する.
  2. 基本情報やニュースを含めることで 信号を強化します
  3. テストを通してパラメータを最適化して最適な設定を見つけます
  4. 移動停止を導入してリスクをさらに減らす
  5. 判断条件を変更し,より厳格な信号確認メカニズムを使用する.

オプティマイゼーションの方向性

この戦略は,次の側面においてさらに最適化することができる.

  1. パラメータ設定を異なる市場や株の種類に応じて調整する.現在のデフォルト値は普遍的で,最適なパラメータ組み合わせを見つけるために異なる株で別々にテストすることができます.

  2. 利益を取ることと移動ストップメカニズムを導入する.現在,動的固定ストップを使用することで,損失と利益を動的に追跡することはできません.さらなるリスクと利益管理のために移動ストップと利益を取ることを導入するテストを実施することができます.

  3. シグナル判断ロジックを最適化する.現在の判断ロジックは比較的シンプルで,価格が崩れ落ちたりすると直接購入・販売信号をマークする.信号の信頼性を確保するためにより多くの指標と価格パターンを組み込むことができます.

  4. オープンポジション条件とフィルタリングメカニズムを増やす.現在の戦略は,すべてのシグナルを無差別に処理する.ボリューム指標,取引ボリューム指標および他のオープンポジション条件を導入することができ,また,誤ったシグナルをフィルタリングするための特定のシグナルタイムウィンドウを導入することができます.

  5. OTTで異なる指標組み合わせをテストする.現在,ストカスティックとOTTの組み合わせを使用している.MACDやRSIなどの他の指標をOTTで組み合わせる有効性をテストすることができます.

  6. 資本管理とポジションサイジングモジュールを統合する.現在,完全にストップに依存する資本管理およびポジション制御メカニズムは存在しない.単一のリスクおよび全体的なリスクをさらに制御するために,さまざまなタイプの資本管理およびポジションサイジング方法が試験することができる.

概要

量子ライトは,ストーカスティック指標と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())

  
  



もっと