Strategi perdagangan garis tren kemiringan dinamis

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

img

Gambaran umum

Ide inti dari strategi ini adalah menggunakan kemiringan dinamis untuk menentukan arah tren harga dan menghasilkan sinyal perdagangan dalam kombinasi dengan penilaian breakout. Secara khusus, ini melacak harga tertinggi dan terendah secara real time berdasarkan perubahan harga selama periode waktu yang berbeda untuk menghitung kemiringan dinamis, dan kemudian menentukan sinyal panjang dan pendek sesuai dengan pemecahan harga terhadap garis tren.

Prinsip Strategi

Langkah-langkah utama dari strategi ini adalah:

  1. Menghakimi harga tertinggi dan terendah: Lacak harga tertinggi dan terendah selama siklus tertentu (misalnya 20 bar) untuk menentukan apakah telah mencapai harga tertinggi atau terendah baru.

  2. Menghitung kemiringan dinamis: Catat nomor bar ketika mencapai titik tinggi atau rendah baru, dan hitung kemiringan dinamis dari titik tinggi/rendah baru ke titik tinggi/rendah setelah siklus tertentu (misalnya 9 bar).

  3. Grafik garis tren: Grafik garis tren naik dan turun berdasarkan lereng dinamis.

  4. Perpanjang dan perbarui garis tren: Ketika harga menembus garis tren, perpanjang dan perbarui garis tren.

  5. Sinyal perdagangan: Tentukan sinyal panjang dan pendek berdasarkan harga yang pecah terhadap garis tren.

Keuntungan dari Strategi

Keuntungan dari strategi ini meliputi:

  1. Secara dinamis menentukan arah tren untuk fleksibilitas sebagai tanggapan terhadap perubahan pasar.

  2. Mengontrol secara wajar berhenti dan meminimalkan penarikan.

  3. Sinyal perdagangan terobosan yang jelas yang mudah diterapkan.

  4. Parameter yang dapat disesuaikan untuk fleksibilitas yang kuat.

  5. Struktur kode yang bersih yang mudah dimengerti dan dikembangkan lebih lanjut.

Risiko dan Solusi

Ada juga beberapa risiko dengan strategi ini:

  1. Sering long dan short saat tren terikat rentang.

  2. Ada lebih banyak sinyal palsu pada pelarian, atur parameter atau tambahkan filter.

  3. Stop loss risiko ketika pasar bergerak dengan keras.

  4. Ruang optimasi terbatas dan potensi keuntungan, cocok untuk perdagangan jangka pendek.

Arahan Optimasi

Bidang untuk mengoptimalkan strategi meliputi:

  1. Tambahkan lebih banyak indikator teknis sebagai sinyal filter.

  2. Mengoptimalkan kombinasi parameter untuk parameter terbaik.

  3. Cobalah untuk meningkatkan strategi stop loss untuk mengurangi risiko.

  4. Tambahkan fungsi untuk menyesuaikan rentang harga masuk secara otomatis.

  5. Cobalah menggabungkan dengan strategi lain untuk menemukan lebih banyak peluang.

Ringkasan

Secara keseluruhan ini adalah strategi jangka pendek yang efisien berdasarkan menggunakan kemiringan dinamis untuk menentukan tren dan breakout perdagangan. Ini memiliki penilaian yang akurat, risiko yang dapat dikontrol, dan cocok untuk menangkap peluang jangka pendek di pasar. Optimasi lebih lanjut pada parameter dan menambahkan filter dapat meningkatkan tingkat kemenangan dan profitabilitas.


/*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 banyak