動的移動平均のクロスオーバーコンボ戦略

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

img

概要

ダイナミック・ムービング・アベア・クロスオーバー・コンボ戦略は,複数の技術指標と市場状況の検出を統合した組み合わせた取引戦略である. 市場変動を動的に計算し,長期移動平均値と変動からの価格距離に基づいて3つの市場段階を決定する. 変動,トレンド,統合. 異なる市場状況下で,戦略は異なるエントリーと出口ルールを採用し,EMA/SMAクロスオーバー,MACD,ボリンジャーバンドなどの指標の組み合わせで購入と販売信号を生成する.

戦略の論理

市場変動を計算する

ATR インディケーターを使用して,過去 14 日間の市場変動を測定します.その後,平均変動を得るために 100 日間の SMA フィルターを適用します.

市場 段階 を 決定 する

価格と200日SMAの距離を計算する.絶対距離が明確な方向性を持つ平均変動の1.5倍を超えると,トレンド市場として決定される.現在の変動が平均の1.5倍を超えると,それは変動市場である.

EMA/SMAクロスオーバー

急速EMA期間は10日である.スローSMA期間は30日である.高速EMAがスローSMAを超えると購入信号が生成される.

マックド

MACD を 12, 26, 9 のパラメータで計算します.正の MACD ヒストグラムは購入信号を表示します.

ボリンジャー・バンド

20日標準偏差チャネルを計算する.チャネル幅が20日SMAより小さい場合,それは統合している.

入国規則

波動性:クロスオーバーやMACDがポジティブで価格がバンド内にある場合,ロングを入力します.

トレンド:クロスオーバーまたはMACDが正である場合,ロングを入力します.

コンソリデーション:クロスオーバーと価格が下帯を超えるとロングに入ります.

退去規則

一般:MACDが2バーでマイナスで価格が2日下がると出口.

変動性: 株式RSIが過剰に買い上げられた場合の出口

統合: 上部帯を下回る価格の場合,プラス出口

利点

この戦略には以下の強みがあります.

  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)


もっと