
Strategi penembusan dua garis sejajar adalah strategi pelacakan tren yang didasarkan pada persilangan rata-rata bergerak dari dua periode yang berbeda sebagai sinyal jual beli. Strategi ini menggunakan rata-rata cepat dan persilangan rata-rata lambat sebagai titik masuk perdagangan, setelah persilangan menentukan arah tren dan membangun posisi overhead atau kosong yang sesuai.
Strategi ini menggunakan dua rata-rata bergerak: satu MA cepat dan satu MA lambat. Siklus MA cepat biasanya diatur untuk periode yang lebih pendek (seperti periode 15) untuk menangkap perubahan harga jangka pendek; Siklus MA lambat biasanya diatur untuk periode yang lebih panjang (seperti periode 21) untuk menentukan arah tren utama.
Dengan mengatur berbagai kombinasi siklus MA, Anda dapat menyesuaikan durasi waktu strategi menangkap tren. Kombinasi MA yang lebih pendek dapat menangkap peluang perubahan harga dalam periode kecil yang lebih pendek; Kombinasi MA yang lebih panjang dapat menyaring getaran dan hanya menangkap tren di tingkat garis panjang.
Strategi ini juga mencakup modul manajemen risiko: Stop Loss, Stop Loss, dan Stop Loss Mobile. Ini dapat membatasi kerugian maksimum dari satu perdagangan dan membantu melindungi keuntungan keseluruhan.
Strategi dua garis lurus memiliki keuntungan sebagai berikut:
Ada beberapa risiko yang terkait dengan strategi “dua jalur” ini, yang terkonsentrasi pada beberapa hal:
Risiko ini dapat diperbaiki dan dioptimalkan dengan menyesuaikan parameter MA, menambahkan kondisi filter, dan mengoptimalkan logika stop loss.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Dengan optimasi dan perbaikan ini, Anda dapat secara signifikan meningkatkan peluang, tingkat keuntungan, dan tingkat pengembalian risiko dari strategi Anda.
Strategi penembusan dua garis sejajar secara keseluruhan adalah strategi pelacakan tren yang mudah diterapkan dan dioptimalkan. Ini memiliki keunggulan seperti operasi yang sederhana, fleksibilitas yang dapat disesuaikan, dan kontrol risiko, sangat cocok sebagai strategi masuk untuk perdagangan kuantitatif. Dengan pengujian dan pengoptimalan terus menerus, strategi ini dapat terus ditingkatkan dan memiliki potensi untuk menjadi strategi yang dioptimalkan.
/*backtest
start: 2022-12-10 00:00:00
end: 2023-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true)
maFastSource = input(defval = ohlc4, title = "Fast MA Source")
maFastLength = input(defval = 15, title = "Fast MA Period", minval = 1)
maSlowSource = input(defval = ohlc4, title = "Slow MA Source")
maSlowLength = input(defval = 21, title = "Slow MA Period", minval = 1)
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
inpTakeProfit = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0)
inpStopLoss = input(defval = 100, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na
useTimeLimit = input(defval = true, title = "Use Start Time Limiter?")
startYear = input(defval = 2018, title = "Start From Year", minval = 0, step = 1)
startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1)
startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1)
startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1)
startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1)
startTimeOk() =>
inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
timeOk = time > inputTime ? true : false
r = (useTimeLimit and timeOk) or not useTimeLimit
maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)
fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50)
aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false
if( startTimeOk() )
enterLong = not tradeDirection[1] and tradeDirection
exitLong = tradeDirection[1] and not tradeDirection
strategy.entry( id = "Long", long = true, when = enterLong )
//strategy.close( id = "Long", when = exitLong )
enterShort = tradeDirection[1] and not tradeDirection
exitShort = not tradeDirection[1] and tradeDirection
strategy.entry( id = "Short", long = false, when = enterShort )
//strategy.close( id = "Short", when = exitShort )
strategy.exit("Exit Long", from_entry = "Long", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)
strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)