Sumber daya yang dimuat... Pemuatan...

Dual Moving Average dan MACD Kombinasi Trend Mengikuti Dynamic Take Profit Smart Trading System

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

img

Gambaran umum

Strategi ini adalah sistem trend following yang menggabungkan dua moving average dan indikator MACD. Strategi ini menggunakan rata-rata bergerak 50 periode dan 200 periode untuk menentukan arah tren sambil menggunakan indikator MACD untuk waktu masuk tertentu. Strategi ini menggunakan mekanisme stop-loss dan take-profit yang dinamis, bersama dengan beberapa kondisi penyaringan untuk meningkatkan kualitas perdagangan. Ini adalah sistem perdagangan lengkap yang beroperasi pada jangka waktu 15 menit dengan aturan masuk dan keluar yang tepat.

Prinsip Strategi

Logika inti dibangun di atas beberapa elemen kunci:

  1. Penentuan Tren: Menggunakan posisi relatif 50MA dan 200MA untuk menilai tren keseluruhan, dengan tren naik dikonfirmasi ketika MA cepat di atas MA lambat, dan penurunan sebaliknya.
  2. Sinyal Masuk: Setelah konfirmasi tren, menggunakan crossover MACD untuk sinyal masuk tertentu. Masuk panjang ketika garis MACD melintasi di atas garis sinyal dalam tren naik; masuk pendek ketika garis MACD melintasi di bawah garis sinyal dalam tren turun.
  3. Trading Filtering: Menggabungkan beberapa mekanisme penyaringan termasuk interval perdagangan minimum, kekuatan tren, dan ambang MACD untuk menghindari overtrading dalam kondisi pasar yang tidak stabil.
  4. Pengendalian risiko: Menggunakan stop-loss titik tetap dan mekanisme mengambil keuntungan yang dapat disesuaikan, dikombinasikan dengan rata-rata bergerak dan sinyal MACD terbalik sebagai kondisi keluar dinamis.

Keuntungan Strategi

  1. Trend Following dan Momentum Combination: Menggabungkan moving average dan indikator MACD untuk menangkap tren utama dan waktu masuk yang tepat.
  2. Manajemen Risiko yang Komprehensif: Mengimplementasikan beberapa mekanisme stop loss, termasuk stop tetap dan stop dinamis yang dipicu oleh indikator teknis.
  3. Pengaturan Parameter Fleksibel: Parameter utama seperti titik stop loss/take profit dan periode MA dapat disesuaikan sesuai dengan kondisi pasar.
  4. Mekanisme Penyaringan Cerdas: Mengurangi sinyal palsu melalui beberapa kondisi penyaringan untuk meningkatkan kualitas perdagangan.
  5. Statistik Kinerja Lengkap: Statistik perdagangan terperinci terintegrasi termasuk tingkat kemenangan dan perhitungan rata-rata laba / kerugian secara real-time.

Risiko Strategi

  1. Risiko pasar berbelit-belit: Dapat menghasilkan sinyal palsu yang sering terjadi di pasar sisi; pertimbangkan untuk menambahkan indikator konfirmasi tren.
  2. Risiko slippage: Perdagangan jangka pendek rentan terhadap slippage; pertimbangkan untuk memperluas pengaturan stop-loss.
  3. Sensitivitas Parameter: Kinerja strategi sensitif terhadap pengaturan parameter, yang membutuhkan optimasi menyeluruh.
  4. Ketergantungan pada Lingkungan Pasar: Strategi berkinerja baik di pasar tren yang kuat tetapi mungkin tidak stabil dalam kondisi pasar lainnya.

Arah Optimasi Strategi

  1. Optimasi Stop-Loss Dinamis: Dapat menyesuaikan rentang stop-loss secara dinamis berdasarkan indikator ATR untuk lebih beradaptasi dengan volatilitas pasar.
  2. Optimasi Waktu Masuk: Dapat menambahkan RSI atau indikator tambahan lainnya untuk mengkonfirmasi waktu masuk dan meningkatkan akurasi perdagangan.
  3. Optimalisasi Manajemen Posisi: Memperkenalkan sistem manajemen posisi dinamis berbasis volatilitas untuk pengendalian risiko yang lebih baik.
  4. Pengakuan lingkungan pasar: Tambahkan modul pengakuan lingkungan pasar untuk menggunakan kombinasi parameter yang berbeda dalam kondisi pasar yang berbeda.

Ringkasan

Ini adalah sistem perdagangan yang dirancang dengan baik dengan logika lengkap. Dengan menggabungkan indikator teknis klasik dengan metode manajemen risiko modern, strategi menyeimbangkan penangkapan tren dengan pengendalian risiko. Meskipun ada area untuk optimasi, secara keseluruhan ini adalah strategi perdagangan yang praktis berharga. Pedagang disarankan untuk melakukan backtesting menyeluruh sebelum implementasi langsung dan menyesuaikan parameter sesuai dengan instrumen perdagangan tertentu dan lingkungan pasar.


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