Tren dinamis mengikuti beberapa indikator strategi perdagangan pengambilan untung batch

EMA MACD RSI ATR
Tanggal Pembuatan: 2025-02-10 14:49:11 Akhirnya memodifikasi: 2025-02-10 14:49:11
menyalin: 2 Jumlah klik: 378
1
fokus pada
1617
Pengikut

Tren dinamis mengikuti beberapa indikator strategi perdagangan pengambilan untung batch

Ringkasan

Ini adalah strategi perdagangan kuantitatif yang menggabungkan trend-following dan analisis teknis. Strategi ini mengkonfirmasi sinyal perdagangan melalui beberapa indikator teknis, menggunakan stop-loss batch dan mekanisme manajemen posisi dinamis yang dirancang untuk menangkap tren utama pasar sambil mengendalikan risiko. Strategi ini mengintegrasikan beberapa indikator teknis seperti EMA, MACD, dan RSI untuk mengidentifikasi peluang perdagangan potensial melalui persilangan dan perpindahan antara indikator.

Prinsip Strategi

Strategi ini didasarkan pada beberapa elemen kunci:

  1. Sinyal masuk menggunakan filter indikator multi-teknik: EMA cepat dengan EMA lambat yang bersilang, sinyal MACD Gold/Dead Forks dan indikator RSI overbought dan oversold. Masuk ke dalam pasar multi-kepala membutuhkan EMA cepat dengan EMA lambat dan MACD Gold dengan RSI di bawah 70; masuk ke pasar kosong membutuhkan EMA cepat dengan EMA lambat dan MACD Dead Forks dengan RSI di atas 30.
  2. Pengendalian risiko menggunakan stop loss proporsional yang ditetapkan pada 5% dari harga pembukaan posisi.
  3. Mekanisme Stop Stop Batch: Stop Stop pertama terletak pada 8% dan Stop Stop kedua terletak pada 12%, dengan menyesuaikan posisi Stop Stop kedua secara dinamis untuk menyesuaikan dengan fluktuasi pasar.
  4. Manajemen posisi didasarkan pada perhitungan ATR dinamis, dengan risiko maksimum tunggal dikendalikan pada 5%, dan posisi maksimum tidak melebihi 40% dari ekuitas akun.

Keunggulan Strategis

  1. Multiple technical indicator cross-validation, yang efektif untuk menyaring sinyal palsu dan meningkatkan kualitas transaksi.
  2. Menggunakan mekanisme batch stop, dapat mengunci sebagian keuntungan, tetapi tidak sepenuhnya kehilangan keuntungan dari kelanjutan.
  3. Sistem manajemen posisi dinamis dapat secara otomatis menyesuaikan skala perdagangan sesuai dengan volatilitas pasar, untuk mengontrol risiko secara efektif.
  4. Sistem kontrol angin yang baik, termasuk stop loss tetap, posisi dinamis, dan batas maksimum untuk strategi, memastikan stabilitas jangka panjang.
  5. Logika strategi yang jelas, parameter yang dapat disesuaikan, mudah untuk dioptimalkan sesuai dengan kondisi pasar yang berbeda.

Risiko Strategis

  1. Dalam pasar yang berfluktuasi cepat, stop loss dapat sering terjadi. Perhatikan untuk menyesuaikan parameter atau menghentikan perdagangan jika tingkat fluktuasi pasar terlalu tinggi.
  2. Pergeseran pasar horizontal dapat menyebabkan kerugian terus menerus, sehingga disarankan untuk menambahkan mekanisme penilaian horizontal.
  3. Filter multi-indikator dapat menyebabkan kehilangan bagian dari tren, dan mungkin kurang baik dalam pasar tren yang kuat sebagai strategi indikator tunggal.
  4. Mekanisme batch-stop mungkin tidak dapat dihapus pada waktu yang tepat dalam pasar yang berbalik dengan cepat, dan perlu dipertimbangkan untuk meningkatkan penilaian sinyal reversal.

Arah optimasi strategi

  1. Pertimbangkan untuk memperkenalkan mekanisme penyaringan volatilitas pasar, mengurangi posisi atau menghentikan perdagangan jika volatilitas terlalu tinggi.
  2. Anda dapat meningkatkan penilaian kekuatan tren dan menyesuaikan posisi stop selama tren kuat untuk mendapatkan lebih banyak keuntungan tren.
  3. Mengoptimalkan sistem manajemen posisi, pertimbangkan untuk menambahkan perubahan posisi dinamis berdasarkan rasio untung rugi.
  4. Menambahkan mekanisme penilaian kondisi pasar, menggunakan kombinasi parameter yang berbeda dalam kondisi pasar yang berbeda.
  5. Pertimbangkan untuk menambahkan indikator volume transaksi untuk meningkatkan keandalan sinyal perdagangan.

Meringkaskan

Strategi ini menggunakan kombinasi dari beberapa indikator teknis, digabungkan dengan batch stop loss dan manajemen posisi dinamis, untuk membangun sistem perdagangan yang relatif sempurna. Keuntungan dari strategi ini adalah kontrol risiko yang komprehensif, keandalan sinyal perdagangan yang tinggi, tetapi ada juga kelemahan yang mungkin melewatkan beberapa situasi.

Kode Sumber Strategi
/*backtest
start: 2024-02-10 00:00:00
end: 2025-02-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Hang Strategy Aggressive", overlay=true, initial_capital=1000, currency=currency.USDT, default_qty_type=strategy.cash, default_qty_value=100)

// === 参数设置 ===
fastLength = input.int(5, "快速EMA长度")
slowLength = input.int(15, "慢速EMA长度")
rsiLength = input.int(7, "RSI长度")
atrPeriod = input.int(10, "ATR周期")
leverageMultiple = input.float(3.0, "杠杆倍数", minval=1.0, step=0.5)

// === 止盈止损参数 ===
stopLossPercent = input.float(5.0, "止损百分比", minval=1.0, step=0.5)
firstTakeProfitPercent = input.float(8.0, "第一止盈点百分比", minval=1.0, step=0.5)
secondTakeProfitPercent = input.float(12.0, "第二止盈点百分比", minval=1.0, step=0.5)
firstTakeProfitQtyPercent = input.float(50.0, "第一止盈仓位百分比", minval=1.0, maxval=100.0, step=5.0)

// === 技术指标 ===
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
superFastEMA = ta.ema(close, 3)
rsi = ta.rsi(close, rsiLength)
atr = ta.atr(atrPeriod)

// === 趋势判断 ===
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
macdCross = (macdLine > signalLine) and (macdLine[1] < signalLine[1])
macdCrossDown = (macdLine < signalLine) and (macdLine[1] > signalLine[1])

// === 交易信号 ===
longCondition = (fastEMA > slowEMA) and macdCross and (rsi < 70)
shortCondition = (fastEMA < slowEMA) and macdCrossDown and (rsi > 30)

// === 平仓信号 ===
exitLong = shortCondition or (fastEMA < slowEMA)
exitShort = longCondition or (fastEMA > slowEMA)

// === 仓位管理 ===
maxRiskPerTrade = 0.05
basePosition = strategy.equity * maxRiskPerTrade
atrAmount = atr * close
riskPosition = basePosition / atrAmount * leverageMultiple
positionSize = math.min(riskPosition, strategy.equity * 0.4 / close)

// === 交易状态变量 ===
var isLong = false
var isShort = false
var partialTpTriggered = false
var float stopPrice = na
var float firstTpPrice = na
var float secondTpPrice = na
var float firstTpQty = na

// === 交易执行 ===
// 多头入场
if (longCondition and not isLong and not isShort)
    strategy.entry("多", strategy.long, qty=positionSize)
    isLong := true
    partialTpTriggered := false

// 空头入场
if (shortCondition and not isShort and not isLong)
    strategy.entry("空", strategy.short, qty=positionSize)
    isShort := true
    partialTpTriggered := false

// === 止盈止损逻辑 ===
if (strategy.position_size > 0)  // 多仓
    stopPrice := strategy.position_avg_price * (1 - stopLossPercent/100)
    firstTpPrice := strategy.position_avg_price * (1 + firstTakeProfitPercent/100)
    // 只在未触发第一止盈时计算第二止盈价格
    if not partialTpTriggered
        secondTpPrice := strategy.position_avg_price * (1 + secondTakeProfitPercent/100)
    
    if (close[1] <= stopPrice or low <= stopPrice)
        strategy.close_all("多止损")
        isLong := false
        partialTpTriggered := false
    
    if (not partialTpTriggered and (close[1] >= firstTpPrice or high >= firstTpPrice))
        strategy.order("多第一止盈", strategy.short, qty=firstTpQty)
        partialTpTriggered := true
        // 在这里重新计算第二止盈价格
        secondTpPrice := high * (1 + 0.04)  // 基于当前最高价再上涨4%
    
    if (close[1] >= secondTpPrice or high >= secondTpPrice)
        strategy.close_all("多第二止盈")
        isLong := false
        partialTpTriggered := false

if (strategy.position_size < 0)  // 空仓
    stopPrice := strategy.position_avg_price * (1 + stopLossPercent/100)
    firstTpPrice := strategy.position_avg_price * (1 - firstTakeProfitPercent/100)
    // 只在未触发第一止盈时计算第二止盈价格
    if not partialTpTriggered
        secondTpPrice := strategy.position_avg_price * (1 - secondTakeProfitPercent/100)
    
    if (close[1] >= stopPrice or high >= stopPrice)
        strategy.close_all("空止损")
        isShort := false
        partialTpTriggered := false
    
    if (not partialTpTriggered and (close[1] <= firstTpPrice or low <= firstTpPrice))
        strategy.order("空第一止盈", strategy.long, qty=firstTpQty)
        partialTpTriggered := true
        // 在这里重新计算第二止盈价格
        secondTpPrice := low * (1 - 0.04)  // 基于当前最低价再下跌4%
    
    if (close[1] <= secondTpPrice or low <= secondTpPrice)
        strategy.close_all("空第二止盈")
        isShort := false
        partialTpTriggered := false

// === 其他平仓条件 ===
if (exitLong and isLong)
    strategy.close_all("多平仓")
    isLong := false
    partialTpTriggered := false

if (exitShort and isShort)
    strategy.close_all("空平仓")
    isShort := false
    partialTpTriggered := false

// === 绘图 ===
plot(fastEMA, "快速EMA", color=color.blue)
plot(slowEMA, "慢速EMA", color=color.red)
plot(superFastEMA, "超快EMA", color=color.green)

// 绘制止盈止损线
plot(strategy.position_size != 0 ? strategy.position_avg_price : na, "开仓价", color=color.yellow)
plot(strategy.position_size != 0 ? stopPrice : na, "止损线", color=color.red)
plot(strategy.position_size != 0 ? firstTpPrice : na, "第一止盈线", color=color.green)
plot(strategy.position_size != 0 ? secondTpPrice : na, "第二止盈线", color=color.blue)