ダイナミック・シフト・平均・クロス・コンポジション戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-05 10:23:10
タグ:

动态移平均交叉组合策略

概要

ダイナミック・ムービング・アベア・クロスオーバー・コンボ戦略 (Dynamic Moving Average Crossover Combo Strategy) は,複数の技術指標と市場段階の検定を統合した複合的な取引戦略である.これは,価格と長期移動平均線との距離と変動を判断する市場変動を動的に計算し,市場の3つの段階:波動,傾向,整理を判断する.市場段階では,戦略は異なる入出規則を採用し,複数の指標の購入と売却信号を発信する.例えばEMA/SMAクロス,MACD,ボリンジャーバンドなど.

戦略の原理

市場変動を計算する

ATR (平均真波幅) を用いて,過去14日間の市場日間の波動を計算する.その後,100日間の単純な移動平均線波動をフィルタリングして平均波動を得ます.

市場段階を判断する

価格相対200日間の単純な移動平均線の距離を計算する. 距離が平均波動の1.5倍を超える場合,方向が明確であれば,傾向市場と判断する. 現在の波動が平均波動の1.5倍を超える場合,波動市場と判断する.

EMA/SMAの交差点

速いEMAは10日,遅いSMAは30日である. 速いEMAが遅いSMAを横切ると買い信号が生じる.

マックド

12,26,9 のパラメータ MACD を計算します. MACD 列が正に変化すると買取信号が生成されます.

ボリンジャー・バンド

20日間の標準差を計算するチャネル.チャネルの幅が自社の20日SMAよりも小さい場合,整理期と判断する.

入場規則

波動期:急激な線交差またはMACDの柱が正し,取引先はボリンジャーバンド内に収束し,入場は多くなる.

トレンド期:高速・スローライン交差点やMACD柱の変化が正規エントリーを多くする.

整理期:急激なライン交差,閉店価格がローバーバンドより高く,入場数が多い.

出場規則

次の条件を満たす場合,平衡に出場する: MACD の連続した2つのK線がマイナスであり,閉店価格は2日連続で下落した.

波動期:また,StockRSIが超買いに突入すると,上場する.

整理期:また,価格がUpper Bandより低ければ出場します.

優位性分析

市場環境判断を組み合わせたスマート取引戦略であり,以下のような利点があります.

  1. システム化操作,主観的な介入を減らす.

  2. 市場環境の調整と戦略パラメータの調整により,より適応性が高い.

  3. 複数の指標の組み合わせにより,信号の確実性が向上します.

  4. Bollinger Bandsは,リスクを減らすために自動的に停止します.

  5. 条件を判断し,偽信号をフィルタリングする.

  6. ダイナミックストップ損失停止,トレンド利益を追跡する.

リスク分析

リスクは以下の通りです.

  1. パラメータ設定が正しくない場合,ポリシーが失敗する可能性があります. パラメータ組み合わせを最適化することをお勧めします.

  2. 突発的な出来事がモデルに障害をもたらします. 戦略論理を適時に更新することをお勧めします.

  3. 取引費は利益の余地を縮小します. 低手数料のブローカーを選択することをお勧めします.

  4. 複数の指標の組み合わせにより戦略の複雑性が向上します.

優化方向

開発者にとって,この分野では,

  1. 市場環境判断基準を最適化し,正確性を向上させる.

  2. 機械学習モジュールを追加し,パラメータ適応を実現します.

  3. 重要な事件のリスクをテキスト処理と組み合わせて判断する.

  4. 複数の市場を再テストし,最適な組み合わせパラメータを探します.

  5. 追尾ストップの戦略を追加する.

概要

ダイナミック・シフト・アウェイズ・クロスコンポーネーション戦略は,マルチ指標のスマート取引戦略である. 市場環境調整パラメータを組み合わせて,条件判断による体系化取引を実現できる. 適応性と確実性が高い. しかし,パラメータ設定と新しいモジュールの追加は,戦略の複雑さを増やすのを避けるために慎重である. 全体的に,これは実行可能な強力な定量化戦略思考である.


/*backtest
start: 2024-01-28 00:00:00
end: 2024-02-04 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true)

// Volatility
volatility = ta.atr(14)
avg_volatility_sma = ta.sma(volatility, 100)
avg_volatility = na(avg_volatility_sma) ? 0 : avg_volatility_sma

// Market Phase detection
long_term_ma = ta.sma(close, 200)
distance_from_long_term_ma = close - long_term_ma
var bool isTrending = math.abs(distance_from_long_term_ma) > 1.5 * avg_volatility and not na(distance_from_long_term_ma)
var bool isVolatile = volatility > 1.5 * avg_volatility

// EMA/MA Crossover
fast_length = 10
slow_length = 30
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.sma(close, slow_length)
crossover_signal = ta.crossover(fast_ma, slow_ma)

// MACD
[macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9)
macd_signal = crossover_signal or (macdHistogram > 0)

// Bollinger Bands
source = close
basis = ta.sma(source, 20)
upper = basis + 2 * ta.stdev(source, 20)
lower = basis - 2 * ta.stdev(source, 20)
isConsolidating = (upper - lower) < ta.sma(upper - lower, 20)

// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 75
oversold = 25

var float potential_SL = na
var float potential_TP = na
var bool buy_condition = na
var bool sell_condition = na

// Buy and Sell Control Variables
var bool hasBought = false
var bool hasSold = true

// Previous values tracking
prev_macdHistogram = macdHistogram[1]
prev_close = close[1]

// Modify sell_condition with the new criteria
if isVolatile
    buy_condition := not hasBought and crossover_signal or macd_signal and (close > lower) and (close < upper)
    sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - 0.5 * volatility
    potential_TP := close + volatility

if isTrending
    buy_condition := not hasBought and crossover_signal or macd_signal
    sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - volatility
    potential_TP := close + 2 * volatility

if isConsolidating
    buy_condition := not hasBought and crossover_signal and (close > lower)
    sell_condition := hasBought and (close < upper) and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - 0.5 * volatility
    potential_TP := close + volatility

// Update the hasBought and hasSold flags
if buy_condition
    hasBought := true
    hasSold := false

if sell_condition
    hasBought := false
    hasSold := true

// Strategy Entry and Exit
if buy_condition
    strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
    strategy.exit("SELL_TS", from_entry="BUY", trail_price=close, trail_offset=close * 0.05)

if sell_condition
    strategy.close("BUY")
    
// Visualization
plotshape(series=buy_condition, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)

plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)
plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr)
plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr)

bgcolor(isVolatile ? color.new(color.purple, 90) : isTrending ? color.new(color.blue, 90) : isConsolidating ? color.new(color.orange, 90) : na)


もっと見る