Strategi ini menggunakan MACD untuk membuat keputusan perdagangan. MACD terdiri dari EMA cepat dan lambat, yang menghasilkan sinyal perdagangan ketika kurva diferensial menembus sumbu nol. Strategi ini adalah strategi perdagangan kuantitatif tipe pelacakan yang khas.
Prinsip-prinsip Strategi:
Perhitungan EMA garis cepat dan EMA garis lambat, dengan diferensiasi yang membentuk kurva MACD.
EMA halus pada kurva MACD, mendapatkan garis sinyal MACD.
Ketika MACD melakukan lebih banyak saat melewati jalur sinyal, kosong saat melewati jalur sinyal.
Tetapkan persentase stop loss untuk manajemen risiko.
Keuntungan dari strategi ini:
Indikator MACD lebih baik dari EMA tunggal, sehingga lebih jelas mengidentifikasi tren.
Menerobos metode transaksi untuk menangkap peluang konversi tepat waktu.
Sistem Stop Loss Stop Stop membantu mengendalikan risiko transaksi.
Bahaya dari strategi ini:
Lebih banyak sinyal false breakout mungkin terjadi di dekat sumbu nol kurva MACD.
Parameter harus dioptimalkan agar sesuai dengan varietas transaksi yang berbeda.
Perdagangan tren sangat rentan terhadap kejadian yang tidak terduga dan harus memiliki stop loss.
Singkatnya, strategi ini menggunakan hubungan terobosan dari kurva nilai rata-rata MACD untuk menilai. Keunggulan dari indikator MACD dapat meningkatkan efektivitas, tetapi perlu waspada terhadap risiko terobosan palsu dan mengambil langkah-langkah manajemen risiko yang tepat untuk mendapatkan keuntungan yang stabil dalam jangka panjang.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-09-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("uray MACD", overlay=false, pyramiding = 0, calc_on_every_tick=true, precision=2, currency="USD", default_qty_value=10, default_qty_type=strategy.cash,initial_capital=100,commission_type=strategy.commission.percent,commission_value=0.1)
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 6, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 2020, title = "To Year", minval = 2017)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
inTimeframe() => true
isPosLong = strategy.position_size > 0
isPosShort = strategy.position_size < 0
isNoMarginPos= strategy.position_size == 0
fastLength = input(12, minval = 1, title = "MACD fast")
slowlength = input(26, minval = 1, title = "MACD slow")
MACDLength = input( 9, minval = 1, title = "MACD length")
stopLoss = input( 10, minval = 1, title = "Stop Loss (price %)", type=float)
takeProfit = input( 50, minval = 1, title = "Take Profit (price %)", type=float)
src = close // Source of Calculations (Close of Bar)
MACD = ta.ema(src, fastLength) - ta.ema(src, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD
stopLossValue = close*(stopLoss/100)/syminfo.mintick
takeProfitValue = close*(takeProfit/100)/syminfo.mintick
switchLongTrigger = ta.crossover(delta, 0)
switchShortTrigger = ta.crossunder(delta, 0)
closeLongTrigger = ta.crossunder(delta, 0)
closeShortTrigger = ta.crossover(delta, 0)
entryLongTrigger = ta.crossover(delta, 0)
entryShortTrigger = ta.crossunder(delta, 0)
// if inTimeframe()
// if isNoMarginPos
// if entryLongTrigger
// strategy.entry("Long", strategy.long, comment="Entry Long")
// strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue)
// if entryShortTrigger
// strategy.entry("Short", strategy.short, comment="Entry Short")
// strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue)
// if isPosShort
// if switchLongTrigger
// strategy.close_all()
// strategy.entry("Long", strategy.long, comment="switch Long")
// strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue)
// if closeLongTrigger
// strategy.close_all()
// if isPosLong
// if switchShortTrigger
// strategy.close_all()
// strategy.entry("Short", strategy.short, comment="switch Short")
// strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue)
// if closeShortTrigger
// strategy.close_all()
if inTimeframe()
strategy.entry("Long", strategy.long, comment="Entry Long", when=entryLongTrigger)
strategy.close("Long", when=entryShortTrigger)
strategy.entry("Short", strategy.short, comment="Entry Short", when=entryShortTrigger)
strategy.close("Short", when=entryLongTrigger)
strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryShortTrigger)
strategy.exit("Stop (long SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryLongTrigger)