Strategi pelacakan osilasi pita gratis


Tanggal Pembuatan: 2024-02-04 10:28:24 Akhirnya memodifikasi: 2024-02-04 10:28:24
menyalin: 0 Jumlah klik: 614
1
fokus pada
1617
Pengikut

Strategi pelacakan osilasi pita gratis

Ringkasan

Gagasan utama dari strategi ini adalah untuk menghitung stop loss pada garis panjang dan garis pendek berdasarkan indikator ATR, dan menghasilkan sinyal perdagangan ketika harga menembus garis stop loss ini.

Prinsip Strategi

Strategi ini menggunakan N-periode ATR dari indikator ATR yang dikalikan dengan faktor untuk menghitung garis stop loss yang panjang dan panjang di kedua sisi. Rumus perhitungan spesifiknya adalah sebagai berikut:

长线止损 = 最高价 - ATR * 系数
短线止损 = 最低价 + ATR * 系数

Ketika harga naik, Anda melakukan over, dan ketika harga turun, Anda melakukan over. Setelah melakukan over, Anda akan mengikuti pergerakan harga secara real-time untuk memindahkan stop loss.

Metode ini menggunakan pita ATR sebagai setelan stop loss yang dapat menangkap tren harga dengan baik dengan asumsi bahwa risiko stop loss dijamin. Sinyal yang dihasilkan ketika harga mengalami terobosan yang lebih besar dapat secara efektif menghilangkan terobosan palsu.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini adalah dapat secara otomatis menyesuaikan stop loss, menangkap tren harga dan mengontrol risiko. Keuntungan spesifiknya adalah sebagai berikut:

  1. Berdasarkan ATR, stop loss floating dapat disesuaikan dengan volatilitas pasar, sehingga dapat mengontrol kerugian tunggal.

  2. Dengan menggunakan cara penembusan untuk menghasilkan sinyal, sebagian dari kebisingan dapat dihilangkan, sehingga tidak ada kebocoran dan kebocoran.

  3. Pengaturan Stop Lines secara real-time untuk melacak pergerakan harga, mencegah stop loss terlalu longgar, dan mengunci lebih banyak keuntungan.

Analisis risiko

Strategi ini juga memiliki beberapa risiko, terutama berfokus pada pengaturan stop loss dan bagaimana sinyal dihasilkan.

  1. Siklus ATR dan faktor yang tidak tepat dapat menyebabkan stop loss terlalu lebar atau terlalu sempit.

  2. Cara penembusan sinyal dapat melewatkan peluang di awal tren.

  3. Pemantauan stop loss pada akhir tren mungkin terlambat dan tidak dapat keluar dengan sempurna.

Pengendalian ini terutama dilakukan untuk menyesuaikan parameter agar stop loss lebih masuk akal, atau untuk membantu indikator lain menilai tren dan sinyal.

Arah optimasi

Strategi ini dapat terus dioptimalkan dalam beberapa hal:

  1. Untuk lebih mengontrol risiko, setup Stop Loss Layer 2.

  2. Ini juga dapat meningkatkan kualitas sinyal, dikombinasikan dengan indikator lain untuk menilai tren.

  3. Menambahkan strategi mobile stop-loss untuk meningkatkan keuntungan jika tren terus berlanjut.

  4. Mengoptimalkan siklus ATR dan parameter koefisien untuk membuat stop loss lebih dekat dengan fluktuasi harga yang sebenarnya.

Meringkaskan

Strategi ini sangat praktis secara keseluruhan, dapat secara otomatis menyesuaikan stop loss untuk mengontrol risiko secara efektif, sementara keuntungan yang baik dapat diperoleh melalui pelacakan tren. Kita dapat mengoptimalkan dan memperbaiki strategi lebih lanjut dengan menggabungkan metode analisis lain pada dasar asli, membuatnya lebih stabil dan cerdas.

Kode Sumber Strategi
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
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/
// © melihtuna
//@version=4
strategy("Chandelier Exit - Strategy",shorttitle="CE-STG" , overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD, commission_value=0.03, commission_type=strategy.commission.percent)

length = input(title="ATR Period", type=input.integer, defval=22)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=false)
useClose = input(title="Use Close Price for Extremums ?", type=input.bool, defval=true)
highlightState = input(title="Highlight State ?", type=input.bool, defval=true)

atr = mult * atr(length)

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

shortStop = (useClose ? lowest(close, length) : lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? 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

longStopPlot = plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
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=longColor, transp=0)
plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0)

shortStopPlot = plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
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=shortColor, transp=0)
plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0)

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

longFillColor = highlightState ? (dir == 1 ? longColor : na) : na
shortFillColor = highlightState ? (dir == -1 ? shortColor : na) : na
fill(midPricePlot, longStopPlot, title="Long State Filling", color=longFillColor)
fill(midPricePlot, shortStopPlot, title="Short State Filling", color=shortFillColor)


long_short = input(true, "Long-Short",type=input.bool, group="Strategy Settings")

start     = input(timestamp("2019-01-01"), "Date", type=input.time, group="Strategy Settings")
finish    = input(timestamp("2025-01-01"), "Date", type=input.time, group="Strategy Settings")   
window()  => true

slRatio=input(5, "Manuel Stop Loss Ratio", type=input.float, minval=0, group="Strategy Settings")
tpRatio=input(20, "Take Profit Ratio", type=input.float, minval=0, group="Strategy Settings")
tsStartRatio=input(10, "Trailing Stop Start Ratio", type=input.float, minval=0, group="Strategy Settings")
tsRatio=input(5, "Trailing Stop Ratio", type=input.float, minval=1, group="Strategy Settings")

lastBuyPrice = strategy.position_avg_price

diffHiPriceRatio = (high-lastBuyPrice)/lastBuyPrice*100
diffLoPriceRatio = (close-lastBuyPrice)/lastBuyPrice*100
posHiRatio=0.0
posHiRatio:= strategy.position_size > 0 ? diffHiPriceRatio > posHiRatio[1] ? diffHiPriceRatio : posHiRatio[1] : 0

s_diffHiPriceRatio = (low-lastBuyPrice)/lastBuyPrice*100
s_diffLoPriceRatio = (close-lastBuyPrice)/lastBuyPrice*100
s_posHiRatio=0.0
s_posHiRatio:= strategy.position_size < 0 ? s_diffLoPriceRatio < s_posHiRatio[1] ? s_diffLoPriceRatio : s_posHiRatio[1] : 0

strategy.entry("LONG", strategy.long, when = window() and buySignal)
strategy.close("LONG", when = window() and sellSignal)
strategy.close("LONG", when = diffLoPriceRatio<(slRatio*(-1)), comment="STOP-LONG")
strategy.close("LONG", when = diffHiPriceRatio>tpRatio, comment="TAKE-PROFIT-LONG")
strategy.close("LONG", when = ((posHiRatio[1]>tsStartRatio) and (posHiRatio[1]-diffHiPriceRatio)>tsRatio), comment="TRAILING-STOP-LONG")

if long_short
    strategy.entry("SHORT", strategy.short, when = window() and sellSignal)
    strategy.close("SHORT", when = window() and buySignal)
    strategy.close("SHORT", when = s_diffLoPriceRatio>(slRatio), comment="STOP-SHORT")
    strategy.close("SHORT", when = s_diffHiPriceRatio<(tpRatio*(-1)), comment="TAKE-PROFIT-SHORT")
    strategy.close("SHORT", when = ((s_posHiRatio[1]*(-1)>tsStartRatio) and ((s_posHiRatio[1]-s_diffLoPriceRatio))*(-1)>tsRatio), comment="TRAILING-STOP-SHORT")