Uhl MA をベースにした適応型移動平均のクロスオーバー戦略

作者: リン・ハーンチャオチャン,日付: 2023-09-19 22:06:42
タグ:

概要

Uhl MAシステムは,従来のMAシステムの欠陥を克服するために設計された適応型移動平均クロスオーバーシステムである.これは,トレーディング信号を生成するために高速および遅い移動平均を使用し,ゆっくりとしたMAはアンドレアス・ウールによって最初に提案された修正されたMA (CMA) で,高速MAは修正されたトレンドステップ (CTS) で,修正されたMAに基づいています.システムは,より信頼性の高いトレーディング信号を達成するために,適応的にMAパラメータを調整します.

原則分析

この戦略の核心は,Uhl MA と CTS ラインの計算にあります.Uhl MA ラインは,SMA と以前の CMA の間の重さを適応的に調整するために,変数 (VAR) と歴史的な平方偏差 (SECMA) を用いて,従来の SMA に比べて強化されています.VAR が SECMA よりも小さいとき,SMA により重量を与え,そうでなければ CMA により重量を与えられます.これは少量のノイズをフィルタリングし,よりスムーズな MA を生成するのに役立ちます.CTS ラインは,SRC 価格に基づいた同様の適応計算を使用します.

クロスオーバーロジックは伝統的なMAシステムと同じである.CTSがUhlMAを越えると購入信号が生成され,以下を越えると販売信号が生成される.これは適応型MA取引システムを形成する.

利点分析

この戦略の最大の利点は,従来のMAクロスオーバーシステムと比較して,いくつかのノイズをフィルタリングし,範囲限定市場でより信頼性の高い信号を生成できる適応型MAの使用である.適応型クロスオーバーは,デッドクロスとゴールデンクロスと比較して偽信号を減少させる.また,速いと遅いMAの組み合わせにより,いくつかのトレンド取引機会を捉えることができます.バックテストの結果から,明らかなトレンドを持つ資産の優れたパフォーマンスを見ることができます.

リスク分析

この戦略の主なリスクは,MAsが傾向を伴う指標であるため,範囲市場における誤った信号の増加から生じる.これは主にCMAの適応計算によるもので,統合の際に価格範囲に収束し,不必要な信号を生成する.適切なパラメータ調節も大きな課題である.不適切なパラメータは,良い取引を逃したり,誤った信号を増やしたりする可能性があります.

最適化 の 提案

潜在的な最適化には,以下が含まれます.

  1. CMAの計算を改善し,例えば他の指標を用いて市場差の収束を回避する.

  2. 遺伝子アルゴリズムのような 多変数最適化アルゴリズムで パーマータを最適化します

  3. ストップ・ロスを導入して 単一の取引損失を制御します

  4. 統合における過度取引を避けるために,変動指標,RFMインデックスなど,他の指標を用いたフィルターを追加する.

  5. リスク管理を最適化し,ポジションのサイズ,リスクメトリックを考慮し,全体的なリスクをより良く制御する.

結論

Uhl MAシステムは非常に革新的な適応型MAクロスオーバー戦略である.従来の戦略と比較して,ダイナミックMAは誤った信号を軽減し,トレンドをより良く捉えるのに役立ちます.しかし,範囲の市場には限界があります.計算方法論のさらなる改善とフィルターを追加することは大きな可能性を秘めています.一方,パラメータチューニングとリスク管理も重要です.全体として,Uhl MA戦略は良好な可能性とさらなる探求に値する研究価値を持っています.

[/トランス]


/*backtest
start: 2023-01-01 00:00:00
end: 2023-06-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © alexgrover

//@version=4
strategy("Uhl MA System - Strategy Analysis")
length = input(100),mult = input(1.),src = input(close)
//----
out = 0., cma = 0., cts = 0.
Var = variance(src,length)           ,sma = sma(src,length)
secma = pow(nz(sma - cma[1]),2)      ,sects = pow(nz(src - cts[1]),2) 
ka = Var < secma ? 1 - Var/secma : 0 ,kb = Var < sects ? 1 - Var/sects : 0
cma := ka*sma+(1-ka)*nz(cma[1],src)  ,cts := kb*src+(1-kb)*nz(cts[1],src)
//----
if crossover(cts,cma)
    strategy.entry("Buy", strategy.long)
if crossunder(cts,cma)
    strategy.entry("Sell", strategy.short)
//----
cap = 50000
eq = strategy.equity
rmax = 0.
rmax := max(eq,nz(rmax[1]))
//----
css = eq > cap ? #0cb51a : #e65100
a = plot(eq,"Equity",#2196f3,2,transp=0)
b = plot(rmax,"Maximum",css,2,transp=0)
fill(a,b,css,80)

もっと