資源の読み込みに... 荷物...

ATR波動性戦略を用いた多指標動的適応位置サイズ化

作者: リン・ハーンチャオチャン開催日:2024年11月12日11時30分
タグ:ATRエイマRSISMA

img

概要

この戦略は,複数の技術指標とダイナミックなリスク管理を組み合わせた定量的な取引システムである.EMAトレンドフォロー,ATR波動性,RSI過剰購入/過剰売却条件,キャンドルスタイクパターン認識を統合し,適応型ポジションサイズ化とダイナミックストップロスのメカニズムを通じてバランスの取れたリターンを達成する.

戦略の原則

戦略は,以下を通じて取引を実施する.

  1. トレンド指向の5期と10期EMAクロスオーバーを使用する
  2. 過剰購入/過剰販売ゾーンのRSI指標
  3. ダイナミックストップ・ロストとポジションサイズ付けのATR指標
  4. 入力信号としてキャンドルスタイルのパターン (飲み込み,ハンマー,落星)
  5. ATRベースの動的滑り補償
  6. シグナルフィルタリングのボリューム確認

戦略 の 利点

  1. 複数の信号のクロスバリダーションは信頼性を向上させる
  2. ダイナミックなリスク管理は市場の変動に適応する
  3. 部分的な利益戦略は利益に固執する
  4. ストップ・ロスは累積利益を守ります
  5. 日々の損失制限 リスクリスク管理
  6. ダイナミック・スライド補償は,オーダーの実行を改善する

戦略リスク

  1. 複数の指標が信号遅延を引き起こす可能性があります
  2. 頻繁 に 取引 する こと に は 高額 な 費用 が かかる こと が あり ます
  3. ストップ・ロスは,様々な市場で頻繁に発生する可能性があります.
  4. ろうそくのパターン認識における主観的要因
  5. パラメータの最適化で過適性リスク

オプティマイゼーションの方向性

  1. ダイナミックパラメータ調整のための市場サイクル検出を導入する
  2. 偽信号を減らすためにトレンド強度フィルターを追加します
  3. 資本効率の向上のためにポジションサイズアルゴリズムを最適化する
  4. 市場情勢の指標を追加する
  5. アダプティブパラメータ最適化システムを開発

概要

これは複数の技術指標を組み合わせた洗練された戦略システムで,ダイナミックなリスク管理と複数のシグナル検証を通じて取引の安定性を高めます.主な強みは適応性と包括的なリスク管理システムにあります.しかし,ライブ取引では徹底的な検証と継続的な最適化が必要です.


/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Optimized Scalping with High Risk-Reward", overlay=true)

// Input for EMA periods
shortEMA_length = input(5, title="Short EMA Length")
longEMA_length = input(10, title="Long EMA Length")

// ATR for dynamic stop-loss
atrPeriod = input(14, title="ATR Period")
atrMultiplier = input(1.5, title="ATR Multiplier for Stop Loss")

// Calculate EMAs
shortEMA = ta.ema(close, shortEMA_length)
longEMA = ta.ema(close, longEMA_length)

// ATR calculation for dynamic stop loss
atr = ta.atr(atrPeriod)

// RSI for overbought/oversold conditions
rsi = ta.rsi(close, 14)

// Plot EMAs
plot(shortEMA, color=color.blue, title="Short EMA")
plot(longEMA, color=color.red, title="Long EMA")

// Dynamic Slippage based on ATR
dynamic_slippage = math.max(5, atr * 0.5)

// Candlestick pattern recognition
bullish_engulfing = close[1] < open[1] and close > open and close > open[1] and close > close[1]
hammer = close > open and (high - close) / (high - low) > 0.6 and (open - low) / (high - low) < 0.2
bearish_engulfing = open[1] > close[1] and open > close and open > open[1] and close < close[1]
shooting_star = close < open and (high - open) / (high - low) > 0.6 and (close - low) / (high - low) < 0.2

// Enhanced conditions with volume and RSI check
buy_condition = (bullish_engulfing or hammer) and close > shortEMA and shortEMA > longEMA and volume > ta.sma(volume, 20) and rsi < 70
sell_condition = (bearish_engulfing or shooting_star) and close < shortEMA and shortEMA < longEMA and volume > ta.sma(volume, 20) and rsi > 30

// Dynamic ATR multiplier based on recent volatility
volatility = atr
adaptiveMultiplier = atrMultiplier + (volatility - ta.sma(volatility, 50)) / ta.sma(volatility, 50) * 0.5

// Execute buy trades with slippage consideration
if (buy_condition)
    strategy.entry("Buy", strategy.long)
    stop_loss_buy = strategy.position_avg_price - atr * adaptiveMultiplier - dynamic_slippage
    take_profit_buy = strategy.position_avg_price + atr * adaptiveMultiplier * 3 + dynamic_slippage
    strategy.exit("Exit Buy", "Buy", stop=stop_loss_buy, limit=take_profit_buy)

// Execute sell trades with slippage consideration
if (sell_condition)
    strategy.entry("Sell", strategy.short)
    stop_loss_sell = strategy.position_avg_price + atr * adaptiveMultiplier + dynamic_slippage
    take_profit_sell = strategy.position_avg_price - atr * adaptiveMultiplier * 3 - dynamic_slippage
    strategy.exit("Exit Sell", "Sell", stop=stop_loss_sell, limit=take_profit_sell)

// Risk Management
maxLossPerTrade = input.float(0.01, title="Max Loss Per Trade (%)", minval=0.01, maxval=1, step=0.01)  // 1% max loss per trade
dailyLossLimit = input.float(0.03, title="Daily Loss Limit (%)", minval=0.01, maxval=1, step=0.01) // 3% daily loss limit

maxLossAmount_buy = strategy.position_avg_price * maxLossPerTrade
maxLossAmount_sell = strategy.position_avg_price * maxLossPerTrade

if (strategy.position_size > 0)
    strategy.exit("Max Loss Buy", "Buy", stop=strategy.position_avg_price - maxLossAmount_buy - dynamic_slippage)

if (strategy.position_size < 0)
    strategy.exit("Max Loss Sell", "Sell", stop=strategy.position_avg_price + maxLossAmount_sell + dynamic_slippage)

// Daily loss limit logic
var float dailyLoss = 0.0
if (dayofweek != dayofweek[1])
    dailyLoss := 0.0  // Reset daily loss tracker at the start of a new day

if (strategy.closedtrades > 0)
    dailyLoss := dailyLoss + strategy.closedtrades.profit(strategy.closedtrades - 1)

if (dailyLoss < -strategy.initial_capital * dailyLossLimit)
    strategy.close_all("Daily Loss Limit Hit")

// Breakeven stop after a certain profit with a delay
if (strategy.position_size > 0 and close > strategy.position_avg_price + atr * 1.5 and bar_index > strategy.opentrades.entry_bar_index(0) + 5)
    strategy.exit("Breakeven Buy", from_entry="Buy", stop=strategy.position_avg_price)

if (strategy.position_size < 0 and close < strategy.position_avg_price - atr * 1.5 and bar_index > strategy.opentrades.entry_bar_index(0) + 5)
    strategy.exit("Breakeven Sell", from_entry="Sell", stop=strategy.position_avg_price)

// Partial Profit Taking
if (strategy.position_size > 0 and close > strategy.position_avg_price + atr * 1.5)
    strategy.close("Partial Close Buy", qty_percent=50)  // Use strategy.close for partial closure at market price

if (strategy.position_size < 0 and close < strategy.position_avg_price - atr * 1.5)
    strategy.close("Partial Close Sell", qty_percent=50) // Use strategy.close for partial closure at market price

// Trailing Stop with ATR type
if (strategy.position_size > 0)
    strategy.exit("Trailing Stop Buy", from_entry="Buy", trail_offset=atr * 1.5, trail_price=strategy.position_avg_price)

if (strategy.position_size < 0)
    strategy.exit("Trailing Stop Sell", from_entry="Sell", trail_offset=atr * 1.5, trail_price=strategy.position_avg_price)


関連性

もっと