
この戦略は,ハル移動平均 ((HMA) の1,2,3,4段階の時間係数を使用した投資に基づいています.それは,一定の資金を投入します.エントリーポイントは,2,3および4段階の係数のトレンドによって識別され,エクジットポイントは新しいエントリーポイントまたは追跡停止パーセントで作成されます.
この戦略は,まずHMAを計算する.Hull移動平均は,次の式を使用して計算される加重移動平均である.
hullma = wma(2*wma(src,sm/2)-wma(src,sm),round(sqrt(sm)))
src は価格,sm は平均の長さを制御する入力パラメータである.
その後,この策略は速度 ((1階導関数),加速度 ((2階導関数),振動 ((3階導関数),および振動 ((4階導関数) を計算する.これらは,HMAとその遅滞値の間の差値を計算して,長さlenで割り算する.例えば,速度計算の公式は:
speed = (hullma-hullma[len])/len
残りの係数の計算方法も同様である.
策略は,加速,振動,波動の正負を見て入場と出場を決定する. 3つの指標がすべて正であるなら,多張開く. 3つの指標がすべて負であるなら,空張開く.
さらに,この戦略は,利益をロックするためにtrailing stop lossも使用します. 多頭位は,調整可能な入力パーセントに基づいて停止損失を設定し,空頭位は同じです.
この戦略の主要な利点は,入場と出場の信号として複数の導関数を使用することであり,これは偽信号をフィルターすることができます. 速度のみを頼りにして入場を決定することは通常非常に脆弱ですが,2,3,4の導関数と組み合わせて,より強力なシステムを構築できます.
戦略のもう一つの優点は,この戦略が非常に柔軟であることです. HMAの長さ,様々な導関数の長さ,停止損失の割合など,さまざまな市場に対して最適化できる複数の調整可能なパラメータがあります.
調整可能な追跡ストップを使用することも優位である.これは,戦略がトレンドの状況でより多くの利益を得ることを助け,震動の状況でタイムリーで退出し,最大撤退を制限する.
この戦略の主なリスクは,突発事件によるヒット率の低下である.関連フィルタリングルールがなければ,重大ニュースイベント突発の後に複数の導関数が同時に誤信号を発し,大きな損失を引き起こす可能性がある.いくつかのニュースフィルタを設定するか,突発事件の後に戦略を一時停止することで,このリスクを軽減することができる.
もう一つのリスクは,パラメータが過度に適合しやすいことである.HMA長さ,各導関数の長さなどのパラメータは,結果に影響を与える可能性がある.これは,異なる市場でのこれらのパラメータの安定性を評価する厳格な回測方法の採用を必要とする.また,トラッキング・ストーブ・パーセンテージがあまりにも大きく設定されないように注意することもよい.そうでないと,損失が拡大する可能性がある.
この戦略は,以下の点で最適化できます.
突発的な事件に基づくフィルタリングの追加,重大ニュースイベントの後に取引を一時停止し,誤ったエントリーポイントで過度の損失を防ぐ
パラメータの多市場再測を行い,その安定性を確保する.異なる品種,異なる時間帯のデータを再測し,パラメータ設定の安定性を評価する.
エントランス・フィールド・ロジックを改造する. 単純正負判断ではなく,自動トレンド認識の機械学習アルゴリズムを導入する.
ストップの改善方法. 単純にパーセンテージ・トラッキング・ストップの代わりに,波動率ストップまたは機械学習ストップを使用できます.
ストップを追加し,終了する. 既存の論理は,主にストップ・ロスを依拠し,追加的にストップを向上させ,または目標利益の退出を加えることができます.
この戦略は,複数の時間尺度のトレンド追跡戦略である。この戦略は,ハル移動平均の複数の導関数をポジションとポジションの信号として使用し,ストップロスを追跡して利益をロックする。主要な利点には,偽信号をフィルターする複数の導関数の利用,戦略パラメータの柔軟性などがある。注意すべきリスクには,突発事件の影響とパラメータの過適合性が含まれている。この戦略は,フィルタリング機構を追加し,パラメータの安定性を改善し,エントリー・エクジット・ロジックスを改めることなどから最適化され,より信頼性と安定性の高い自動取引システムにすることができる。
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title="Derivative Based Strategy", shorttitle="DER", currency="USD", calc_on_order_fills=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, initial_capital=1000)
len = input(1, minval=1, title="Derivatives Length")
sm = input(4, minval=1, title="HMA Length")
longTrailPerc=input(title="Trail Long Loss %", type=float,minval=0.0,step=0.1,defval=25)*0.01
shortTrailPerc=input(title="Trail Short Loss %",type=float,minval=0.0,step=0.1,defval=25)*0.01
longStopPrice=0.0
shortStopPrice=0.0
src = input(ohlc4, title="Source")
hullma = wma(2*wma(src,sm/2)-wma(src,sm),round(sqrt(sm)))
speed = (hullma-hullma[len])/len
accel = (speed-speed[len])/len
jerk = (accel-accel[len])/len
jounce = (jerk-jerk[len])/len
plot(speed, color=green)
plot(accel, color=purple)
plot(jerk, color=red)
plot(jounce, color=blue)
// hline(0, linestyle=solid, color=black)
if accel>0 and jerk>0 and jounce>0// and strategy.opentrades==0
strategy.entry("openlong", strategy.long)
if accel<0 and jerk<0 and jounce<0// and strategy.opentrades==0
strategy.entry("openshort",strategy.short)
speed_profit = (strategy.openprofit-strategy.openprofit[1])/len
accel_profit = (speed_profit-speed_profit[1])/len
jerk_profit = (accel_profit-accel_profit[1])/len
longStopPrice:=if(strategy.position_size>0)
stopValue=ohlc4*(1-longTrailPerc)
max(stopValue,longStopPrice[1])
else
0
shortStopPrice:=if(strategy.position_size<0)
stopValue=ohlc4*(1+shortTrailPerc)
min(stopValue,shortStopPrice[1])
else
999999
if(strategy.position_size>0)
strategy.exit(id="closelong",stop=longStopPrice)
if(strategy.position_size<0)
strategy.exit(id="closeshort",stop=shortStopPrice)