多指標のトレンド追跡戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-23 15:19:46
タグ:

概要

この戦略は,トレンド識別のための複数の指標を統合し,並べた方向の変化に基づいて取引信号を生成します.移動平均速度,STOCHおよびMACDを組み合わせて包括的で堅牢なトレンドフォローシステムを形成します.

戦略の論理

主要な指標は以下の通りです

  1. 移動平均速度: 価格の勢いを反映する.

  2. STOCH: 傾向の変化のために過売/過買い.

  3. MACD: ツールの移動平均値からのトレンド変化.

取引規則は以下のとおりです

  1. 移動平均速度が上昇すると 上向きな信号が伝わります

  2. 超買い区間のSTOCHは下落シグナルを示します.

  3. MACDのポジティブなクロスオーバーは,上昇信号を示します.

  4. 2つのインジケーターが信号を並べるときに入力します.

  5. 指示信号が変わると退場する

この組み合わせは複数の次元からトレンドを評価し 騒音をフィルタリングして 強い信条信号を検出します

利点

単一指標と比較して,コンボ戦略には以下の利点があります.

  1. 組み合わせた視点は精度を向上させる.

  2. フィルタリングは誤った信号を減らす

  3. 傾向指標と平均逆転指標を含みます.

  4. 配列された信号は高い信頼性を持ち 偽の突破を避ける

  5. シンプルで明快なルールで 実行が簡単です

  6. 柔軟なパラメータ調節 頑丈さ

  7. 異なる時間枠に適用できる.

  8. 機械学習で指標体重を訓練できます

  9. 単一指標よりも全体的に安定性と収益性が優れている.

リスク

利点を考慮するリスクは以下の通りです

  1. 複数の指標で複雑性が高まる

  2. パラメータの最適化と重み付けが困難です

  3. 矛盾するインジケーター信号が現れる可能性があります.

  4. 損失をすべて避けることはできません.

  5. 運の要素で 片方向で 保持期間が不確実だ

  6. 集合信号は,トレンド取引に固有のリスクを排除することはできません.

  7. 高い取引頻度は 取引コストを増加させます

  8. 報酬/リスクの比率を監視する必要がある

改良

分析に基づいて,改善には以下の要素が含まれる.

  1. 異なる市場における指標の有効性を評価する.

  2. 過剰なフィットメントを防ぐためにパラメータ強度チェックを追加します.

  3. 衝突を減らすために指標の重さを最適化します

  4. 重大な損失を制限するためにストップを実行します.

  5. 制限のない保持期間を制御するために時間出口を使用します.

  6. 取引頻度が取引コストに与える影響を評価する.

  7. リスク指標の制約を組み込む.

  8. 複数の市場で耐久性をテストする

  9. 戦略の有効性を継続的に検証する

結論

この戦略は,トレンド評価のための複数の指標を統合することによって安定したアンサンブル信号を形成する.しかし,継続的な最適化は,リスクの監視と過剰なフィッティングを防ぐ,どの戦略にとっても鍵である.量子取引は継続的な学習プロセスである.


/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// By TradeStation
//@version=5

strategy("Mov Avg Speed Strategy", overlay=true)

src = input(close, title="Source")

// MA Speed  
avg_len = input.int(50, minval=1, title="Avg Length", group="MA Speed")
roc_len = input.int(1, minval=1, title="Rate of Change Length", group="MA Speed")
avg_roc_len = input.int(10, minval=1, title="Avg Rate of Change Length", group="MA Speed")

// Stochastic
stoch_len = input.int(14, minval=1, title="Stochastic Length", group="Stochastic")
smooth_k = input.int(3, minval=1, title="Stochastic Smooth K", group="Stochastic")
overbought = input.float(80, title="Stochastic Overbought", group="Stochastic")
oversold = input.float(20, title="Stochastic Oversold", group="Stochastic")

// MACD
fast_length = input(12, title="Fast Length", group="MACD")
slow_length = input(26, title="Slow Length", group="MACD")
macd_avg_length = input.int(9, title="MACD Avg Length",  minval=1, group="MACD")

// MA Speed
avg = ta.sma(src, avg_len)
roc = ta.roc(avg, roc_len)
avg_roc = ta.sma(roc, avg_roc_len)
avg_roc_signal = avg_roc > 0 ? 1 : avg_roc < 0 ? -1 : 0 

// Stochastic k
k = ta.sma(ta.stoch(close, high, low, stoch_len), smooth_k)
stochastic_signal = k <= oversold ? 1 : k >= overbought ? -1 : 0

// MACD
fast_ma = ta.ema(src, fast_length)
slow_ma = ta.ema(src, slow_length)
macd = fast_ma - slow_ma
macd_avg = ta.ema(macd, macd_avg_length)
macd_signal = macd_avg > macd_avg[1] ? 1 : macd_avg < macd_avg[1] ? -1 : 0

// set the signal couint
long_count = 0
short_count = 0

if macd_signal == 1
    long_count += 1

else if macd_signal == -1
    short_count += 1
 
if stochastic_signal == 1
    long_count += 1

else if stochastic_signal == -1
    short_count += 1
 
if avg_roc_signal == 1
    long_count += 1

else if avg_roc_signal == -1
    short_count += 1

if (long_count >= 2)
    strategy.entry("Long", strategy.long)

if (short_count >= 2)
    strategy.entry("Short", strategy.short)

もっと