Strategi Dagangan Garis Trend Slope Dinamik

Penulis:ChaoZhang, Tarikh: 2024-02-06 11:51:14
Tag:

img

Ringkasan

Idea teras strategi ini adalah menggunakan cerun dinamik untuk menentukan arah trend harga dan menghasilkan isyarat perdagangan dalam kombinasi dengan penghakiman pecah. Khususnya, ia mengesan harga tertinggi dan terendah dalam masa nyata berdasarkan perubahan harga dalam tempoh masa yang berbeza untuk mengira cerun dinamik, dan kemudian menentukan isyarat panjang dan pendek mengikut pecah harga terhadap garis trend.

Prinsip Strategi

Langkah utama strategi ini ialah:

  1. Menghakimi harga tertinggi dan terendah: Lacak harga tertinggi dan terendah dalam kitaran tertentu (contohnya 20 bar) untuk menentukan sama ada harga tertinggi atau terendah baru telah dicapai.

  2. Mengira cerun dinamik: Mencatatkan nombor bar apabila tahap tinggi atau rendah baru dicapai, dan mengira cerun dinamik dari titik tinggi/rendah baru ke titik tinggi/rendah selepas kitaran tertentu (contohnya 9 bar).

  3. Jadual garis trend: Jadual garis trend menaik dan menurun berdasarkan cerun dinamik.

  4. Memperpanjang dan mengemas kini garis trend: Apabila harga memecahkan garis trend, memperluaskan dan mengemas kini garis trend.

  5. Isyarat dagangan: Tentukan isyarat panjang dan pendek berdasarkan penembusan harga terhadap garis trend.

Kelebihan Strategi

Kelebihan strategi ini termasuk:

  1. Menentukan arah trend secara dinamik untuk fleksibiliti sebagai tindak balas kepada perubahan pasaran.

  2. Mengendalikan berhenti dengan munasabah dan meminimumkan pengeluaran.

  3. Isyarat perdagangan terobosan yang jelas yang mudah dilaksanakan.

  4. Parameter yang boleh disesuaikan untuk kebolehsesuaian yang kuat.

  5. Struktur kod yang bersih yang mudah difahami dan dikembangkan lebih lanjut.

Risiko dan Penyelesaian

Terdapat juga beberapa risiko dengan strategi ini:

  1. Terlalu lama dan pendek apabila trend adalah terhad. Tambah keadaan penapis.

  2. Mempunyai lebih banyak isyarat palsu pada pelarian, sesuaikan parameter atau tambah penapis.

  3. Stop loss risiko apabila pasaran bergerak dengan ganas.

  4. Ruang pengoptimuman yang terhad dan potensi keuntungan, sesuai untuk perdagangan jangka pendek.

Arahan pengoptimuman

Bidang untuk mengoptimumkan strategi termasuk:

  1. Tambah lebih banyak penunjuk teknikal sebagai isyarat penapis.

  2. Mengoptimumkan kombinasi parameter untuk parameter terbaik.

  3. Cuba meningkatkan strategi stop loss untuk mengurangkan risiko.

  4. Tambah fungsi untuk menyesuaikan julat harga kemasukan secara automatik.

  5. Cuba menggabungkan dengan strategi lain untuk menemui lebih banyak peluang.

Ringkasan

Secara keseluruhan, ini adalah strategi jangka pendek yang cekap berdasarkan menggunakan kemiringan dinamik untuk menentukan trend dan penembusan perdagangan. Ia mempunyai penilaian yang tepat, risiko yang boleh dikawal, dan sesuai untuk menangkap peluang jangka pendek di pasaran. Pengoptimuman lebih lanjut pada parameter dan menambah penapis dapat meningkatkan kadar kemenangan dan keuntungan.


/*backtest
start: 2024-01-06 00:00:00
end: 2024-01-19 00:00:00
period: 2h
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/
// © pune3tghai

//Originally posted by matsu_bitmex

//tried adding alerts on plots and cleared the chart for a cleaner view.
//Publishing the script in hope of getting it improved by someone else.

//Added strategy code for easier calculations

//Needs work on TP and SL part.

//P.S - THE ORIGINAL CODE IS MUCH BETTER BUT I have tried to be more usable and understandable.

//@version=4
strategy("TrendLines with Alerts", overlay=true)     //study("TrendLines with Alerts", overlay=true)
//update

length1 = input(20)
check = input(9)
//length2 = input(200)


u=0.0
u := u[1]

l=0.0
l := l[1]

y=0.0
y := y[1]

yl=0.0
yl := yl[1]

angle = 0.0
angle := angle[1]

anglel = 0.0
anglel := anglel[1]

if (highest(length1) == high[check] and highest(length1) == highest(length1)[check] and barssince(barstate.isfirst) > check)
    u := high[check]

    
if (lowest(length1) == low[check] and lowest(length1) == lowest(length1)[check] and barssince(barstate.isfirst) > check)
    l := low[check]
    

    
p = round(barssince(u == high[check]))

pl = round(barssince(l == low[check]))

if p == 0 and barssince(barstate.isfirst) > check
    y := high[abs(p[1]+1+check)]
    
if pl == 0 and barssince(barstate.isfirst) > check
    yl := low[abs(pl[1]+1+check)]    
    

if p == 0
    angle := (u-y)/p[1]

if pl == 0
    anglel := (l-yl)/pl[1]

uppertrend = u+ (p * angle)

lowertrend = l+ (pl * anglel)

extendup = if barssince(barstate.isfirst) > check
    uppertrend[check] + angle[check] * check*2

extenddown = if barssince(barstate.isfirst) > check
    lowertrend[check] + anglel[check] * check*2




//plot(l[offset]-u,color=red)
//plot(u[offset]-l,color = green )
plot(lowertrend, color = color.green, transp=30,offset = -check)
plot(extenddown, color = color.green, transp=100)
plot(uppertrend, color = color.red, transp=30, offset = -check)
plot(extendup, color = color.red, transp=100)
//plot(l[offset], color = red)

l1 = lowertrend
l2 = extenddown
u1 = uppertrend
u2 = extendup



l2sell = crossunder(high, l2)
u2buy = crossover(low, u2)
buy1 = (low<=lowertrend) and open>lowertrend and high>lowertrend and close>lowertrend
buy2 = (low<=extenddown) and open>extenddown and high>extenddown and close>extenddown
buy = buy1 or buy2 or u2buy
plotshape(series=buy, title="Buy", style=shape.triangleup, size=size.tiny, color=color.lime, location=location.belowbar)
sell1 = (high>=uppertrend) and open<uppertrend and low<uppertrend and close<uppertrend
sell2 = (high>=extendup) and open<extendup and low<extendup and close<extendup
sell = sell1 or sell2 or l2sell
plotshape(series=sell, title="Sell", style=shape.triangledown, size=size.tiny, color=color.red, location=location.abovebar)

longCond = buy
shortCond = sell

tp = input(0.2, title="Take Profit")

tpbuyval = valuewhen(buy, close, 1) + (tp/100)*(valuewhen(buy, close, 1))
tpsellval = valuewhen(sell, close, 1) - (tp/100)*(valuewhen(sell, close, 1))


sl = input(0.2, title="Stop Loss")
slbuyval = valuewhen(buy, close, 0) - (sl/100)*(valuewhen(buy, close, 0))
slsellval = valuewhen(sell, close, 0) + (sl/100)*(valuewhen(sell, close, 0))
// === STRATEGY ===
tradeType = input("BOTH", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"])

// stop loss
slPoints = input(defval=0, title="Initial Stop Loss Points (zero to disable)", minval=0)
tpPoints = input(defval=0, title="Initial Target Profit Points (zero for disable)", minval=0)

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//

testStartYear = input(2019, "Backtest Start Year", minval=1980)
testStartMonth = input(1, "Backtest Start Month", minval=1, maxval=12)
testStartDay = input(1, "Backtest Start Day", minval=1, maxval=31)
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(9999, "Backtest Stop Year", minval=1980)
testStopMonth = input(12, "Backtest Stop Month", minval=1, maxval=12)
testStopDay = input(31, "Backtest Stop Day", minval=1, maxval=31)
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<//

//
//set up exit parameters
TP = tpPoints > 0 ? tpPoints : na
SL = slPoints > 0 ? slPoints : na

// Make sure we are within the bar range, Set up entries and exit conditions
if testPeriod() and tradeType != "NONE"
    strategy.entry("long", strategy.long, when=longCond == true and tradeType != "SHORT")
    strategy.entry("short", strategy.short, when=shortCond == true and tradeType != "LONG")
    strategy.close("long", when=shortCond == true and tradeType == "LONG")
    strategy.close("short", when=longCond == true and tradeType == "SHORT")
    strategy.exit("XL", from_entry="long", profit=tpbuyval, loss=slbuyval)
    strategy.exit("XS", from_entry="short", profit=tpsellval, loss=slsellval)

// === /STRATEGY ===
//EOF


////ALERT SYNTEX
//alertcondition(longCond, title="Long", message="Killer Market")
//alertcondition(shortCond, title="Short", message="Poopy Market")

Lebih lanjut