二重移動平均クロスマーケット取引戦略


作成日: 2023-10-24 16:55:38 最終変更日: 2023-10-24 16:55:38
コピー: 0 クリック数: 674
1
フォロー
1617
フォロワー

二重移動平均クロスマーケット取引戦略

概要

この戦略は,ハル移動平均とT3移動平均の優位性を組み合わせて,市間取引のための戦略を設計した.この戦略は,短線取引にも,中長線トレンドの追跡にも使用できます.ハル移動平均とT3移動平均の平均値を主要な取引信号線として計算して,その方向の変化に基づいて入場と出場のタイミングを判断します.

戦略原則

この戦略は主にハル移動平均とT3移動平均の計算に基づいています.

ハル移動平均 (Hull Moving Average,HMA) は,重み付けされた移動平均の反復計算方法によって,市場騒音を効果的にフィルターし,価格トレンドの平滑曲線を示します.それは,単純な移動平均と指数移動平均よりも価格変化に敏感であり,偽突破を効果的に抑制します.

T3移動平均は,遅延効果を軽減しながら,一定の超パラメータ調整によって移動平均を価格により近いものにすることができる.それは,複数の指数計算を円滑にすることで,価格の変化により迅速に反応することができる.

この戦略は,両者の平均値を計算し,主要な取引指標として使用する.入場時刻は,その平均線の方向によって判断する.現在の周期の平均線が前の周期より高い場合は,多頭入場信号;現在の周期の平均線が前の周期より低い場合は,空頭入場信号である.

退場ルールでは,価格がストップ・ロスを突破したり,ストップ・ストップに達したりすると退場する.平均線方向が変化した場合,退場動きも実行する.

優位分析

この戦略は,Hull移動平均とT3移動平均の優位性を組み合わせて,スムーズにノイズを消し去り,価格の変化に迅速に反応し,総合的な指標を生成する.次に,この戦略は,ショートラインと中長線の両方の取引に適用され,計算周期パラメータを調整することにより,適当な周期取引を柔軟に調整することができます.次に,この戦略は,移動ストップと移動ストップセットを採用し,利益をロックし,リスクを制御します.

リスク分析

この戦略は主に均線指標に依存し,振動的なトレンドで複数の偽信号が生じることがあります.さらに,均線は一定の遅滞性を持ち,価格変動の最適な入場時間を逃す可能性があります.止損停止点を設定する際には,過度に緩やかまたは過度に緊急を避けるように注意が必要です.最後に,異なる通貨と取引周期には,最適化パラメータをテストする必要があり,直接再現することはできません.

最適化の方向

均線信号を検証し,偽信号をフィルターする,強弱指標,波動率指標など,他の補助指標を追加することを検討することができる.異なる均線組合せと重み算法をテストし,均線信号の生成効果を最適化することができる.自律的な止損と尾行止まりのダイナミックな管理リスクを追加することができる.異なる通貨と取引サイクルに対して,最適のパラメータ組み合わせを見つけるために,リターン・オプティマイゼーションを行うことができる.

要約する

この戦略は,ハル移動平均とT3移動平均の優位性を統合して,トレンドの方向性を判断するための総合的な指標を形成する.パラメータの最適化により,この戦略は,異なる取引周期に柔軟に適用できます.戦略には一定の優位性がありますが,フォローラグ,偽信号を生成するなどの問題もあります.他の補助指標,最適化パラメータ,およびダイナミックストップストップなどの手段を追加することで,この戦略を継続的に最適化して,より良い効果を得ることができます.

ストラテジーソースコード
/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 1h
basePeriod: 15m
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/
// © exlux99

//@version=4


strategy(title="Swing HULL + T3 avg", shorttitle="Swing HULL T3 AVG", overlay=true)

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 = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true



////////////////////////////GENERAL INPUTS//////////////////////////////////////

length_Ma= input(defval=50, title="Length MAs", minval=1)

//==========HMA
getHULLMA(src, len) =>
    hullma = wma(2*wma(src, len/2)-wma(src, len), round(sqrt(len)))
    hullma

//==========T3
getT3(src, len, vFactor) =>
    ema1 = ema(src, len)
    ema2 = ema(ema1,len)
    ema3 = ema(ema2,len)
    ema4 = ema(ema3,len)
    ema5 = ema(ema4,len)
    ema6 = ema(ema5,len)
    c1 = -1 * pow(vFactor,3)
    c2 = 3*pow(vFactor,2) + 3*pow(vFactor,3)
    c3 = -6*pow(vFactor,2) - 3*vFactor - 3*pow(vFactor,3)
    c4 = 1 + 3*vFactor + pow(vFactor,3) + 3*pow(vFactor,2)
    T3 = c1*ema6 + c2*ema5 + c3*ema4 + c4*ema3
    T3





hullma = getHULLMA(close,length_Ma)

t3 = getT3(close,length_Ma,0.7)


avg = (hullma+t3) /2


////////////////////////////PLOTTING////////////////////////////////////////////


colorado = avg > avg[1]? color.green : color.red

plot(avg , title="avg", color=colorado, linewidth = 4)

long=avg>avg[1]
short=avg<avg[1]

tplong=input(0.08, title="TP Long", step=0.01)
sllong=input(1.0, title="SL Long", step=0.01)

tpshort=input(0.03, title="TP Short", step=0.01)
slshort=input(0.06, title="SL Short", step=0.01)


if(time_cond)
    strategy.entry("long",1,when=long)
    strategy.exit("closelong", "long" , profit = close * tplong / syminfo.mintick, loss = close * sllong / syminfo.mintick, alert_message = "closelong")
    
    strategy.entry("short",0,when=short)
    strategy.exit("closeshort", "short" , profit = close * tpshort / syminfo.mintick, loss = close * slshort / syminfo.mintick, alert_message = "closeshort")