Sumber dimuat naik... memuat...

Rata-rata Bergerak Ganda dan MACD Trend Gabungan Berikutan Sistem Dagangan Pintar Ambil Keuntungan Dinamis

Penulis:ChaoZhang, Tarikh: 2024-12-13 11:23:00
Tag:MAMACDSMAEMATPSLPIPS

img

Ringkasan

Strategi ini adalah sistem trend berikut yang menggabungkan purata bergerak berganda dan penunjuk MACD. Ia menggunakan purata bergerak 50 tempoh dan 200 tempoh untuk menentukan arah trend sambil menggunakan penunjuk MACD untuk masa kemasukan tertentu. Strategi ini menggunakan mekanisme stop-loss dan mengambil keuntungan yang dinamik, bersama dengan pelbagai keadaan penapisan untuk meningkatkan kualiti perdagangan. Ini adalah sistem perdagangan lengkap yang beroperasi pada jangka masa 15 minit dengan peraturan kemasukan dan keluar yang tepat.

Prinsip Strategi

Logik teras dibina di atas beberapa elemen utama:

  1. Penentuan Trend: Menggunakan kedudukan relatif 50MA dan 200MA untuk menilai trend keseluruhan, dengan trend menaik disahkan apabila MA cepat di atas MA perlahan, dan trend menurun sebaliknya.
  2. Isyarat Masuk: Selepas pengesahan trend, menggunakan persilangan MACD untuk isyarat masuk tertentu. Masuk panjang apabila garis MACD melintasi di atas garis isyarat dalam aliran naik; masuk pendek apabila garis MACD melintasi di bawah garis isyarat dalam aliran turun.
  3. Penapisan Perdagangan: Merangkumi pelbagai mekanisme penapisan termasuk selang perdagangan minimum, kekuatan trend, dan ambang MACD untuk mengelakkan perdagangan berlebihan dalam keadaan pasaran yang tidak menentu.
  4. Kawalan Risiko: Menggunakan mekanisme stop-loss titik tetap dan mengambil keuntungan yang boleh disesuaikan, digabungkan dengan purata bergerak dan isyarat terbalik MACD sebagai keadaan keluar dinamik.

Kelebihan Strategi

  1. Pengikut Trend dan Gabungan Momentum: Menggabungkan purata bergerak dan penunjuk MACD untuk menangkap kedua-dua trend utama dan masa kemasukan yang tepat.
  2. Pengurusan Risiko Komprehensif: Melaksanakan pelbagai mekanisme stop-loss, termasuk berhenti tetap dan berhenti dinamik yang dipicu oleh penunjuk teknikal.
  3. Tetapan Parameter Fleksibel: Parameter utama seperti titik stop-loss/take-profit dan tempoh MA boleh diselaraskan mengikut keadaan pasaran.
  4. Mekanisme Penapisan Pintar: Mengurangkan isyarat palsu melalui pelbagai keadaan penapisan untuk meningkatkan kualiti perdagangan.
  5. Statistik Prestasi Lengkap: Statistik perdagangan terperinci terbina dalam termasuk kadar kemenangan dan pengiraan purata keuntungan / kerugian dalam masa nyata.

Risiko Strategi

  1. Risiko pasaran berbelit-belit: Boleh menghasilkan isyarat palsu yang kerap di pasaran sampingan; pertimbangkan untuk menambah penunjuk pengesahan trend.
  2. Risiko slippage: Dagangan jangka pendek mudah tergelincir; pertimbangkan untuk memperluaskan tetapan stop-loss.
  3. Sensitiviti Parameter: Prestasi strategi sensitif kepada tetapan parameter, yang memerlukan pengoptimuman menyeluruh.
  4. Kebergantungan persekitaran pasaran: Strategi berfungsi dengan baik di pasaran trend yang kuat tetapi mungkin tidak stabil dalam keadaan pasaran lain.

Arahan Pengoptimuman Strategi

  1. Pengoptimuman Stop-Loss Dinamik: Boleh menyesuaikan julat stop-loss secara dinamik berdasarkan penunjuk ATR untuk menyesuaikan diri dengan lebih baik dengan turun naik pasaran.
  2. Peningkatan Masa Masuk: Boleh menambah RSI atau penunjuk tambahan lain untuk mengesahkan masa masuk dan meningkatkan ketepatan perdagangan.
  3. Pengurusan Posisi Optimum: Memperkenalkan sistem pengurusan kedudukan dinamik berdasarkan turun naik untuk kawalan risiko yang lebih baik.
  4. Pengiktirafan persekitaran pasaran: Tambah modul pengiktirafan persekitaran pasaran untuk menggunakan kombinasi parameter yang berbeza di bawah keadaan pasaran yang berbeza.

Ringkasan

Ini adalah trend yang direka dengan baik mengikuti sistem dagangan dengan logik yang lengkap. Dengan menggabungkan penunjuk teknikal klasik dengan kaedah pengurusan risiko moden, strategi ini menyeimbangkan penangkapan trend dengan kawalan risiko. Walaupun terdapat bidang untuk pengoptimuman, secara keseluruhan ia adalah strategi dagangan yang praktikal berharga. Pedagang dinasihatkan untuk menjalankan pengujian balik yang menyeluruh sebelum pelaksanaan langsung dan menyesuaikan parameter mengikut instrumen dagangan dan persekitaran pasaran tertentu.


/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © WolfofAlgo

//@version=5
strategy("Trend Following Scalping Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=200)

// Input Parameters
stopLossPips = input.float(5.0, "Stop Loss in Pips", minval=1.0)
takeProfitPips = input.float(10.0, "Take Profit in Pips", minval=1.0)
useFixedTakeProfit = input.bool(true, "Use Fixed Take Profit")

// Moving Average Parameters
fastMA = input.int(50, "Fast MA Period")
slowMA = input.int(200, "Slow MA Period")

// MACD Parameters
macdFastLength = input.int(12, "MACD Fast Length")
macdSlowLength = input.int(26, "MACD Slow Length")
macdSignalLength = input.int(9, "MACD Signal Length")

// Trade Filter Parameters (Adjusted to be less strict)
minBarsBetweenTrades = input.int(5, "Minimum Bars Between Trades", minval=1)
trendStrengthPeriod = input.int(10, "Trend Strength Period")
minTrendStrength = input.float(0.4, "Minimum Trend Strength", minval=0.1, maxval=1.0)
macdThreshold = input.float(0.00005, "MACD Threshold", minval=0.0)

// Variables for trade management
var int barsLastTrade = 0
barsLastTrade := nz(barsLastTrade[1]) + 1

// Calculate Moving Averages
ma50 = ta.sma(close, fastMA)
ma200 = ta.sma(close, slowMA)

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength)

// Calculate trend strength (simplified)
trendDirection = ta.ema(close, trendStrengthPeriod) > ta.ema(close, trendStrengthPeriod * 2)
isUptrend = close > ma50 and ma50 > ma200
isDowntrend = close < ma50 and ma50 < ma200

// Calculate pip value
pointsPerPip = syminfo.mintick * 10

// Entry Conditions with Less Strict Filters
macdCrossUp = ta.crossover(macdLine, signalLine) and math.abs(macdLine - signalLine) > macdThreshold
macdCrossDown = ta.crossunder(macdLine, signalLine) and math.abs(macdLine - signalLine) > macdThreshold

// Long and Short Conditions
longCondition = close > ma50 and macdCrossUp and barsLastTrade >= minBarsBetweenTrades and isUptrend
shortCondition = close < ma50 and macdCrossDown and barsLastTrade >= minBarsBetweenTrades and isDowntrend

// Exit Conditions (made more lenient)
exitLongCondition = macdCrossDown or close < ma50
exitShortCondition = macdCrossUp or close > ma50

// Reset bars counter on new trade
if (longCondition or shortCondition)
    barsLastTrade := 0

// Calculate stop loss and take profit levels
longStopPrice = strategy.position_avg_price - (stopLossPips * pointsPerPip)
longTakeProfitPrice = strategy.position_avg_price + (takeProfitPips * pointsPerPip)
shortStopPrice = strategy.position_avg_price + (stopLossPips * pointsPerPip)
shortTakeProfitPrice = strategy.position_avg_price - (takeProfitPips * pointsPerPip)

// Plot Moving Averages
plot(ma50, "50 MA", color=color.blue)
plot(ma200, "200 MA", color=color.red)

// Plot Entry Signals
plotshape(longCondition, "Long Signal", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(shortCondition, "Short Signal", shape.triangledown, location.abovebar, color.red, size=size.small)

// Strategy Entry Rules
if (longCondition and strategy.position_size == 0)
    strategy.entry("Long", strategy.long)

if (shortCondition and strategy.position_size == 0)
    strategy.entry("Short", strategy.short)

// Strategy Exit Rules
if (strategy.position_size > 0 and exitLongCondition)
    strategy.close("Long")

if (strategy.position_size < 0 and exitShortCondition)
    strategy.close("Short")

// Stop Loss and Take Profit Management
if (strategy.position_size > 0)
    strategy.exit("Long TP/SL", "Long", stop=longStopPrice, limit=useFixedTakeProfit ? longTakeProfitPrice : na)

if (strategy.position_size < 0)
    strategy.exit("Short TP/SL", "Short", stop=shortStopPrice, limit=useFixedTakeProfit ? shortTakeProfitPrice : na)

// Performance Metrics
var float totalTrades = 0
var float winningTrades = 0
var float totalProfitPips = 0
var float totalLossPips = 0

if (strategy.closedtrades > 0)
    totalTrades := strategy.closedtrades
    winningTrades := strategy.wintrades
    totalProfitPips := strategy.grossprofit / pointsPerPip
    totalLossPips := math.abs(strategy.grossloss) / pointsPerPip

// Display Stats
var label statsLabel = na
label.delete(statsLabel[1])

// Create performance stats text
var string stats = ""
if (strategy.closedtrades > 0)
    winRate = (winningTrades / math.max(totalTrades, 1)) * 100
    avgWin = totalProfitPips / math.max(winningTrades, 1)
    avgLoss = totalLossPips / math.max(totalTrades - winningTrades, 1)
    plRatio = avgWin / math.max(avgLoss, 1)
    
    stats := "Win Rate: " + str.tostring(winRate, "#.##") + "%\n" +
             "Avg Win: " + str.tostring(avgWin, "#.##") + " pips\n" +
             "Avg Loss: " + str.tostring(avgLoss, "#.##") + " pips\n" +
             "P/L Ratio: " + str.tostring(plRatio, "#.##") + "\n" +
             "Total Trades: " + str.tostring(totalTrades, "#")

statsLabel := label.new(x=bar_index, y=high, text=stats, style=label.style_label_down, color=color.new(color.blue, 80))


Berkaitan

Lebih lanjut