Rata-rata pergerakan superimposed zero lag dikombinasikan dengan strategi perdagangan keluar garis kantilever


Tanggal Pembuatan: 2024-01-22 10:03:05 Akhirnya memodifikasi: 2024-01-22 10:03:05
menyalin: 0 Jumlah klik: 1897
1
fokus pada
1617
Pengikut

Rata-rata pergerakan superimposed zero lag dikombinasikan dengan strategi perdagangan keluar garis kantilever

Ringkasan

Gagasan utama dari strategi ini adalah untuk mencari waktu masuk dan keluar yang lebih tepat dengan menggabungkan arah arah tren dari nol lag di atas rata-rata bergerak (ZLSMA) dan keluar dari garis tegak (CE). ZLSMA adalah indikator tren yang dapat menentukan perubahan tren lebih awal.

Prinsip Strategi

  1. Bagian ZLSMA:

    • Garis LMA dengan panjang 130 periode dihitung secara terpisah menggunakan metode regresi linier.
    • Kemudian letakkan dua garis LMA di atasnya untuk mendapatkan perbedaan yang diberikan pada eq.
    • Akhirnya, perbedaan eq ditambahkan melalui garis LMA asli untuk membentuk rata-rata bergerak ZLSMA dengan overlap nol.
  2. Bagian CE:

    • Hitung indikator ATR dan kalikan dengan faktor ((default2) untuk menentukan jarak dinamis dari titik tertinggi atau titik terendah terdekat.
    • Ketika harga penutupan melampaui garis stop loss atau garis stop loss headline yang paling dekat, aturlah garis stop loss tersebut sesuai.
    • Berdasarkan perubahan posisi harga penutupan terhadap garis stop loss, lebih banyak arah melakukan shorting.
  3. Waktu masuk:

    • ZLSMA menilai arah tren, CE masuk saat sinyal.
  4. Stop loss:

    • Kabel panjang dilengkapi dengan stop loss dan stop stop.
    • Garis pendek menggantikan stop loss tetap dengan output dinamis CE.

Analisis Keunggulan

  1. ZLSMA dapat mengidentifikasi tren lebih awal dan menghindari terobosan palsu.
  2. CE dapat menyesuaikan titik ekspor secara fleksibel sesuai dengan tingkat fluktuasi pasar.
  3. Rasio risiko-keuntungan dari strategi dapat disesuaikan.
  4. Lini panjang dan pendek menggunakan metode stop loss yang berbeda untuk mengendalikan risiko.

Analisis risiko

  1. Penetapan parameter yang tidak tepat dapat meningkatkan tingkat input atau memperluas jangkauan stop loss.
  2. Jika situasi berubah dengan cepat, masih ada risiko hambatan akan dilanggar.

Arah optimasi

  1. Optimasi parameter dapat diuji untuk berbagai pasar dan periode waktu.
  2. Parameter stop loss dapat dipertimbangkan untuk disesuaikan dengan fluktuasi atau siklus tertentu.
  3. Anda dapat mencoba kombinasi dengan indikator atau model lain untuk meningkatkan tingkat keuntungan.

Meringkaskan

Strategi ini terutama menggunakan nol lag overlay moving averages untuk menentukan arah tren, dikombinasikan dengan indikator pending line output untuk mencari waktu masuk dan keluar yang lebih tepat. Keuntungan dari strategi ini adalah bahwa rasio stop loss dapat disesuaikan, dan bahwa dinamika pending line output dapat disesuaikan untuk mengendalikan risiko sesuai dengan kondisi pasar. Langkah selanjutnya adalah mencoba optimasi parameter dan kombinasi strategi untuk meningkatkan stabilitas dan profitabilitas lebih lanjut.

Kode Sumber Strategi
/*backtest
start: 2024-01-14 00:00:00
end: 2024-01-21 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © GGkurg

//@version=5

strategy(title = "ZLSMA + Chandelier Exit", shorttitle="ZLSMA + CE", overlay=true)


var GRP1 = "take profit / stop loss"
TP = input(title='long TP%', defval=2.0,   inline = "1", group = GRP1) 
SL = input(title='long SL%', defval=2.0,    inline = "1", group = GRP1) 
TP2 = input(title='short TP', defval=2.0,    inline = "2", group = GRP1) 
SL2 = input(title='short SL', defval=2.0,    inline = "2", group = GRP1) 
//-------------------------------------------------calculations
takeProfitPrice = strategy.position_avg_price * (1+(TP/100))
stopLossPrice = strategy.position_avg_price * (1-(SL/100))
takeProfitPrice2 = strategy.position_avg_price * (1-(TP2/100))
stopLossPrice2 = strategy.position_avg_price * (1+(SL2/100))


//---------------------------------------ZLSMA - Zero Lag LSMA
var GRP2 = "ZLSMA settings"
length1 = input(title='Length', defval=130, inline = "1", group = GRP2) 
offset1 = input(title='Offset', defval=0, inline = "2", group = GRP2) 
src = input(close, title='Source', inline = "3", group = GRP2) 
lsma = ta.linreg(src, length1, offset1)
lsma2 = ta.linreg(lsma, length1, offset1)
eq = lsma - lsma2
zlsma = lsma + eq

plot(zlsma, color=color.new(color.yellow, 0), linewidth=3)


//---------------------------------------ZLSMA conditisions 
//---------long
longc1 = close > zlsma
longclose1 = close < zlsma
//---------short
shortc1 = close < zlsma
shortclose1 = close > zlsma


//---------------------------------------Chandelier Exit
var string calcGroup = 'Chandelier exit settings'
length = input.int(title='ATR Period', defval=1, group=calcGroup)
mult = input.float(title='ATR Multiplier', step=0.1, defval=2.0, group=calcGroup)
useClose = input.bool(title='Use Close Price for Extremums', defval=true, group=calcGroup)

var string visualGroup = 'Visuals'
showLabels = input.bool(title='Show Buy/Sell Labels', defval=true, group=visualGroup)
highlightState = input.bool(title='Highlight State', defval=true, group=visualGroup)

var string alertGroup = 'Alerts'
awaitBarConfirmation = input.bool(title="Await Bar Confirmation", defval=true, group=alertGroup)

atr = mult * ta.atr(length)

longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop

shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop

var int dir = 1
dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir

var color longColor = color.green
var color shortColor = color.red
var color longFillColor = color.new(color.green, 90)
var color shortFillColor = color.new(color.red, 90)
var color textColor = color.new(color.white, 0)

longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.new(longColor, 0))
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title='Long Stop Start', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(longColor, 0))
plotshape(buySignal and showLabels ? longStop : na, title='Buy Label', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(longColor, 0), textcolor=textColor)

shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.new(shortColor, 0))
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title='Short Stop Start', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(shortColor, 0))
plotshape(sellSignal and showLabels ? shortStop : na, title='Sell Label', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(shortColor, 0), textcolor=textColor)

midPricePlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0, display=display.none, editable=false)

longStateFillColor = highlightState ? dir == 1 ? longFillColor : na : na
shortStateFillColor = highlightState ? dir == -1 ? shortFillColor : na : na
fill(midPricePlot, longStopPlot, title='Long State Filling', color=longStateFillColor)
fill(midPricePlot, shortStopPlot, title='Short State Filling', color=shortStateFillColor)

await = awaitBarConfirmation ? barstate.isconfirmed : true
alertcondition(dir != dir[1] and await, title='Alert: CE Direction Change', message='Chandelier Exit has changed direction!')
alertcondition(buySignal and await, title='Alert: CE Buy', message='Chandelier Exit Buy!')
alertcondition(sellSignal and await, title='Alert: CE Sell', message='Chandelier Exit Sell!')




//---------------------------------------Chandelier Exit conditisions 
//---------long
longc2 = buySignal
longclose2 = sellSignal
//---------short
shortc2 = sellSignal
shortclose2 = buySignal



//---------------------------------------Long entry and exit
if longc1 and longc2 
    strategy.entry("long", strategy.long)

if strategy.position_avg_price > 0
    strategy.exit("close long", "long", limit = takeProfitPrice, stop = stopLossPrice, alert_message = "close all orders")

if longclose1 and longclose2 and strategy.opentrades == 1
    strategy.close("long","ema long cross", alert_message = "close all orders")


//---------------------------------------Short entry and exit
if shortc1 and shortc2 
    strategy.entry("short", strategy.short)

if strategy.position_avg_price > 0
    strategy.exit("close short", "short", limit = takeProfitPrice2, stop = stopLossPrice2, alert_message = "close all orders")

if shortclose1 and shortclose2 and strategy.opentrades == 1
    strategy.close("close short","short", alert_message = "close all orders")