この戦略は,ハル移動平均 (HMA) の1,2,3,4回次デリバティブを活用することで,同じ割合の資本を投資する.エントリーポイントは2,3,4回次デリバティブの動向によって特定され,出口ポイントは新しいエントリーポイントまたはトレーリングストップ損失パーセントで作成される.
この戦略はまずHMAを計算する.Hull Moving Averageは,次の式で計算された重度の移動平均値である.
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つの指標がすべて陰性であれば,それは短くなります.
さらに,この戦略は,利益をロックするためにストップ損失も追跡します.ロングポジションは,調整可能なインプットパーセントに基づいてストップ損失を設定し,ショートポジションも同様です.
この戦略の主要な利点は,複数のデリバティブを入力および出口信号として使用し,いくつかの誤った信号をフィルタリングすることができることである.エントリを決定するために速度 (1 番目のデリバティブ) にのみ依存することはしばしば脆弱すぎるが,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)