Tài nguyên đang được tải lên... tải...

Định dạng vị trí thích nghi động đa chỉ số với chiến lược biến động ATR

Tác giả:ChaoZhang, Ngày: 2024-11-12 11:41:30
Tags:ATREMARSISMA

img

Tổng quan

Chiến lược này là một hệ thống giao dịch định lượng kết hợp nhiều chỉ số kỹ thuật với quản lý rủi ro năng động. Nó tích hợp theo xu hướng EMA, biến động ATR, điều kiện mua quá mức / bán quá mức của RSI và nhận dạng mô hình nến, đạt được lợi nhuận cân bằng thông qua kích thước vị trí thích nghi và cơ chế dừng lỗ năng động.

Nguyên tắc chiến lược

Chiến lược thực hiện giao dịch thông qua:

  1. Sử dụng đường chéo EMA 5 giai đoạn và 10 giai đoạn để định hướng xu hướng
  2. Chỉ số RSI cho các khu vực mua quá mức/bán quá mức
  3. Chỉ số ATR cho stop-loss động và kích cỡ vị trí
  4. Các mô hình nến (nắm, búa, sao rơi) như tín hiệu nhập cảnh
  5. Trả thù trượt động dựa trên ATR
  6. Xác nhận khối lượng để lọc tín hiệu

Ưu điểm chiến lược

  1. Xác nhận chéo nhiều tín hiệu cải thiện độ tin cậy
  2. Quản lý rủi ro năng động thích nghi với biến động thị trường
  3. Chiến lược thu lợi nhuận một phần khóa lợi nhuận
  4. Đặt dừng lỗ sau bảo vệ lợi nhuận tích lũy
  5. Đảm bảo rủi ro
  6. Trả thù trượt động cải thiện việc thực hiện lệnh

Rủi ro chiến lược

  1. Nhiều chỉ số có thể gây ra sự chậm trễ tín hiệu
  2. Giao dịch thường xuyên có thể gây ra chi phí cao
  3. Stop-loss có thể được kích hoạt thường xuyên trên các thị trường dao động
  4. Các yếu tố chủ quan trong nhận dạng mẫu nến
  5. Tối ưu hóa tham số có nguy cơ quá phù hợp

Hướng dẫn tối ưu hóa

  1. Đưa ra phát hiện chu kỳ thị trường để điều chỉnh tham số động
  2. Thêm bộ lọc sức mạnh xu hướng để giảm tín hiệu sai
  3. Tối ưu hóa các thuật toán kích thước vị trí để hiệu quả vốn tốt hơn
  4. Bao gồm các chỉ số tâm lý thị trường bổ sung
  5. Phát triển hệ thống tối ưu hóa tham số thích nghi

Tóm lại

Đây là một hệ thống chiến lược phức tạp kết hợp nhiều chỉ số kỹ thuật, tăng cường sự ổn định giao dịch thông qua quản lý rủi ro năng động và xác nhận nhiều tín hiệu.


/*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)


Có liên quan

Thêm nữa