複数の指標を組み合わせた適応型トレンド戦略


作成日: 2023-12-19 11:01:05 最終変更日: 2023-12-19 11:01:05
コピー: 1 クリック数: 608
1
フォロー
1621
フォロワー

複数の指標を組み合わせた適応型トレンド戦略

概要

この戦略は,Hull移動平均指数,容量加重移動平均指数,MACD指数,および実力度指数の二重使用を組み合わせて,トレンドの正確な判断を実現します.それは,市場の環境の変化に自動的に適応することができ,強い適応性を持っています.

戦略原則

この戦略の核心指標は,二重ハル移動平均であり,それは2つのパラメータkehとtehの制御によって計算される。この2つのパラメータは,それぞれ速線と遅線の周期を決定する。速線と遅線は,金叉死叉を構成し,現在のトレンドを判断する。

補助判断指標は容量加重移動平均meh1。価格がmeh1より高いときは,看板状態;価格がmeh1より低いときは,看板状態。

もう一つの補助判断指標はMACDである。それは,高速移動平均を減算して遅い移動平均を得ることでMACDであり,またMACDの移動平均を使って信号線を得ることである。MACDが信号線より高いとき,看板状態である。

最後の補助判断指標はTSIで,価格変化率の二重平滑計算によって得られます。その絶対値の大きさは価格変化の勢いを表しています。購入と販売の条件の中でTSIの信号線を判断し,エントリーとエグジットのタイミングを制御します。

この指標の信号を組み合わせることで,トレンドを正確に判断し,市場と同期するためにパラメータを自動的に調整できます.

戦略的優位性

  1. ダブルハル移動平均を主要な判断指標として使用し,他の複数の指標の組み合わせで補足することで,判断の正確性を高め,偽信号を減らすことができる.

  2. 市場への入場と出場のタイミングを判断するために,TSI指標を適用することで,リスクを制御できます.

  3. 複数のパラメータを自律的に調整し,適応性があり,市場の変化に自動的に適応できます.

  4. 指標の組み合わせとパラメータを自律的に適応させる考え方を採用し,戦略の安定性や継続的な収益性を高めます.

リスク分析

  1. TSI指数で判断するタイミングが加えられているが,アルゴリズムが使用する指数はトレンドタイプであり,震動した抽出口市場に出会った場合,大きな利益と損失の変動が増加する.

  2. パラメータを正しく設定しない場合,策略が失敗する可能性があります.自分の経験に基づいて合理的にパラメータを設定する必要があります.

  3. 多指数ポートフォリオは計算量を増やし,データ量が多い株や時間帯で誤報される可能性が高くなり,データ範囲を制御する必要がある.

  4. 異常データの干渉を防ぐために,指標の計算効果を監視する必要があります.

戦略最適化の方向性

  1. BOLL指数などの他の補助指標を追加してテストすることができ,信号をより正確かつ信頼できるようにします.

  2. 市場への出入を最適化し,ストップ・ストップ条件を設定し,単一利益・損失を制御する.

  3. 交易品種のパラメータを訓練し,最適化して,異なる品種に適応させる.

  4. パラメータ自在化モジュールを追加し,最近の取引結果に基づいて戦略パラメータを自動的に調整できます.

要約する

この戦略は,複数の指標の優位性を統合し,指標の組み合わせを使用してトレンドの方向を判断し,リスクを制御しながら,判断の正確性を高めます.パラメータの最適化と論理の最適化により,戦略を市場変化により良く適応させ,連続的な損失を減らす上でより多くの利益を得ることができます.この戦略は安定性があり,株式や暗号通貨などの品種に長期的に適用できます.

ストラテジーソースコード
/*backtest
start: 2023-11-18 00:00:00
end: 2023-12-18 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//                                                    Quad-HullMA-cross & VWMA & MacD & TSI combination  <<<<< by SeaSide420 >>>>>>
strategy("MultiCross420", overlay=true, calc_on_order_fills= true, calc_on_every_tick=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0)
keh=input(title="Double HullMA 1",defval=7, minval=1)
teh=input(title="Double HullMA 2",defval=14, minval=1)
meh=input(title="VWMA",defval=1, minval=1)
meh1=vwma(close,round(meh))
n2ma=2*wma(close,round(keh/2))
nma=wma(close,keh)
diff=n2ma-nma,sqn=round(sqrt(keh))
n2ma1=2*wma(close[2],round(keh/2))
nma1=wma(close[2],keh)
diff1=n2ma1-nma1,sqn1=round(sqrt(keh))
n1=wma(diff,sqn)
n2=wma(diff1,sqn)
b=n1>n2?lime:red
c=n1>n2?green:red
n2ma3=2*wma(close,round(teh/2))
nma2=wma(close,teh)
diff2=n2ma3-nma2,sqn2=round(sqrt(teh))
n2ma4=2*wma(close[2],round(teh/2))
nma3=wma(close[2],teh)
diff3=n2ma4-nma3,sqn3=round(sqrt(teh))
n3=wma(diff2,sqn2)
n4=wma(diff3,sqn3)
fastLength = input(title="MacD fastLength", defval=7)
slowlength = input(title="MacD slowlength", defval=14)
MACDLength = input(title="MacD Length", defval=3)
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
a1=plot(n1,color=c),a2=plot(n2,color=c)
plot(cross(n1, n2) ? n1 : na, style = cross, color=b, linewidth = 3)
a3=plot(n3,color=c),a4=plot(n4,color=c)
plot(cross(n3, n4) ? n1 : na, style = cross, color=b, linewidth = 3)
//a5=plot(meh1,color=c)
long = input(title="TSI Long Length",  defval=5)
short = input(title="TSI Short Length",  defval=3)
signal = input(title="TSI Signal Length",  defval=2)
linebuy = input(title="TSI Upper Line",  defval=4)
linesell = input(title="TSI Lower Line",  defval=-4)
price = close
double_smooth(src, long, short) =>
    fist_smooth = ema(src, long)
    ema(fist_smooth, short)
pc = change(price)
double_smoothed_pc = double_smooth(pc, long, short)
double_smoothed_abs_pc = double_smooth(abs(pc), long, short)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
closelong = n1<n2 and n3<n4 and n1>meh1
if (closelong)
    strategy.close("Long")
closeshort = n1>n2 and n3>n4 and n1<meh1
if (closeshort)
    strategy.close("Short") 
longCondition = strategy.opentrades<1 and n1>n2 and MACD>aMACD and n1<meh1 and n3>n4 and ema(tsi_value, signal)>linesell
if (longCondition)
    strategy.entry("Long",strategy.long)
shortCondition = strategy.opentrades<1  and n1<n2 and MACD<aMACD and n1>meh1 and n3<n4 and ema(tsi_value, signal)<linebuy
if (shortCondition)
    strategy.entry("Short",strategy.short)