ダイナミック・ムービング・アベア・クロスオーバー・コンボ戦略は,複数の技術指標と市場状況の検出を統合した組み合わせた取引戦略である. 市場変動を動的に計算し,長期移動平均値と変動からの価格距離に基づいて3つの市場段階を決定する. 変動,トレンド,統合. 異なる市場状況下で,戦略は異なるエントリーと出口ルールを採用し,EMA/SMAクロスオーバー,MACD,ボリンジャーバンドなどの指標の組み合わせで購入と販売信号を生成する.
ATR インディケーターを使用して,過去 14 日間の市場変動を測定します.その後,平均変動を得るために 100 日間の SMA フィルターを適用します.
価格と200日SMAの距離を計算する.絶対距離が明確な方向性を持つ平均変動の1.5倍を超えると,トレンド市場として決定される.現在の変動が平均の1.5倍を超えると,それは変動市場である.
急速EMA期間は10日である.スローSMA期間は30日である.高速EMAがスローSMAを超えると購入信号が生成される.
MACD を 12, 26, 9 のパラメータで計算します.正の MACD ヒストグラムは購入信号を表示します.
20日標準偏差チャネルを計算する.チャネル幅が20日SMAより小さい場合,それは統合している.
波動性:クロスオーバーやMACDがポジティブで価格がバンド内にある場合,ロングを入力します.
トレンド:クロスオーバーまたはMACDが正である場合,ロングを入力します.
コンソリデーション:クロスオーバーと価格が下帯を超えるとロングに入ります.
一般:MACDが2バーでマイナスで価格が2日下がると出口.
変動性: 株式RSIが過剰に買い上げられた場合の出口
統合: 上部帯を下回る価格の場合,プラス出口
この戦略には以下の強みがあります.
主観的な介入が少ない体系的な操作です
適応性パラメータは,市場状況に基づいて調整されます.
複数のインディケーターのコンボで 信号の精度が高くなる
Bollinger Bandsの自動ストップ損失のリスクは低い.
誤った信号を避けるため 条件フィルタを丸めてください
動的なストップ・ロストと 利益を取ってトレンドをフォローします
主なリスクは以下のとおりです.
パラメーターの調整が不適切なら 戦略は有効ではない.最適化が提案されている.
突発的な出来事によるモデル障害 ロジック更新が推奨
取引コストから利益率を絞る 低手数料のブローカーを勧めます
複数のモジュールでより複雑な 基本指標は推奨
最適化の可能性:
市場環境の判断基準を改善する.
自動パラメータ適応のための機械学習を導入します
イベントを検出するためにテキスト分析を追加します.
最良のパラメータを見つけるため 多市場バックテスト
より良い利益を得るため,遅延停止戦略を実装する.
ダイナミック・ムービング・アベア・クロスオーバー・コンボ戦略は,インテリジェントなマルチインジケーター量的な取引システムである. 市場状況に基づいてパラメータを動的に調整し,体系的なルールベースの取引を実施する. 戦略は高度に適応性があり決定的である. しかし,パラメータと追加のモジュールは過度に複雑さを避けるために慎重に導入する必要があります. 全体的にこれは実行可能な量的な戦略のアイデアです.
/*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)