Purata pergerakan tindih sifar lag digabungkan dengan strategi perdagangan keluar garis julur


Tarikh penciptaan: 2024-01-22 10:03:05 Akhirnya diubah suai: 2024-01-22 10:03:05
Salin: 0 Bilangan klik: 1897
1
fokus pada
1617
Pengikut

Purata pergerakan tindih sifar lag digabungkan dengan strategi perdagangan keluar garis julur

Gambaran keseluruhan

Idea utama strategi ini adalah menggabungkan arah arah trend dengan penunjuk bergerak berlapis rata-rata berselang sifar ((ZLSMA) dan penunjuk keluar garis berliku ((CE) untuk mencari masa masuk dan keluar yang lebih tepat. ZLSMA adalah penunjuk trend yang dapat menentukan perubahan trend lebih awal.

Prinsip Strategi

  1. Bahagian ZLSMA:

    • Garis LMA dengan panjang 130 kitaran dikira secara berasingan menggunakan kaedah regresi linear.
    • Kemudian letakkan dua baris LMA di atasnya untuk mendapatkan perbezaan yang diberikan kepada eq.
    • Akhirnya, perbezaan eq ditambah melalui garis LMA asal untuk membentuk purata bergerak berlagu sifar ZLSMA。
  2. Bahagian CE:

    • Hitung nilai ATR dan kalikan dengan faktor ((default2) untuk menentukan jarak dinamik dari titik tertinggi atau terendah terdekat.
    • Apabila harga penutupan melepasi garis hentian bertopeng atau garis hentian kosong yang paling dekat, ia akan disesuaikan dengan garis hentian tersebut.
    • Berdasarkan perubahan kedudukan harga penutupan terhadap garis henti rugi, lebih banyak arah melakukan shorting.
  3. Waktu masuk:

    • ZLSMA menilai arah trend, CE masuk apabila isyarat dikeluarkan.
  4. Penangguhan kerugian:

    • Talian panjang mempunyai hentian dan penghentian tetap.
    • Garis pendek menggantikan hentian tetap dengan output dinamik CE.

Analisis kelebihan

  1. ZLSMA dapat menilai trend lebih awal dan mengelakkan penembusan palsu.
  2. CE boleh menyesuaikan tempat keluar dengan fleksibel mengikut tahap turun naik pasaran.
  3. Rasio risiko dan ganjaran strategi boleh disesuaikan.
  4. Garis pendek dan panjang menggunakan kaedah hentian kerugian yang berbeza, dan pada masa yang sama mengawal risiko.

Analisis risiko

  1. Tetapan parameter yang tidak betul boleh meningkatkan kadar input atau meluaskan jangkauan stop loss.
  2. Jika keadaan berubah dengan cepat, masih ada risiko untuk melepasi had kerugian.

Arah pengoptimuman

  1. Anda boleh menguji pengoptimuman parameter untuk pasaran dan tempoh masa yang berbeza.
  2. Anda boleh mempertimbangkan untuk menyesuaikan parameter Stop Loss mengikut kadar turun naik atau kitaran tertentu.
  3. Anda boleh cuba menggabungkannya dengan indikator atau model lain untuk meningkatkan kadar keuntungan.

ringkaskan

Strategi ini digunakan untuk menentukan arah trend dengan menggunakan rata-rata bergerak yang dilapisi dengan ketinggalan sifar, digabungkan dengan penunjuk keluar dari garisan pendaratan untuk mencari masa masuk dan keluar yang lebih tepat. Kelebihan strategi ini adalah bahawa nisbah stop loss yang boleh disesuaikan dapat disesuaikan, dan perubahan dinamik keluar dari garisan pendaratan dapat mengawal risiko mengikut keadaan pasaran. Langkah seterusnya adalah untuk mencuba pengoptimuman parameter dan kombinasi strategi untuk meningkatkan kestabilan dan keuntungan lebih lanjut.

Kod 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")