Strategi pengumpulan pecahan berdasarkan penapisan bar yang ketara


Tarikh penciptaan: 2024-01-03 16:30:16 Akhirnya diubah suai: 2024-01-03 16:30:16
Salin: 0 Bilangan klik: 585
1
fokus pada
1621
Pengikut

Strategi pengumpulan pecahan berdasarkan penapisan bar yang ketara

Gambaran keseluruhan

Strategi ini menjangkakan trend dengan menilai garis K yang bergelombang, dan menggabungkan isyarat pecah untuk menghantar isyarat perdagangan. Strategi ini akan menyaring garis K yang terlalu kecil, dan hanya menganalisis garis K yang bergelombang, yang dapat mengelakkan gangguan oleh kejatuhan kecil yang terlalu kerap, menjadikan isyarat lebih stabil dan boleh dipercayai.

Prinsip Strategi

  1. Untuk menilai panjang badan entiti K-baris semasa, jika lebih besar daripada 3 kali nilai purata 6 K-baris badan terakhir, ia dianggap sebagai garis tiang yang bermakna.

  2. Jika 3 tali berturut-turut yang bererti tiang tiang adalah garis yangar, ia akan dianggap sebagai isyarat berbilang kepala; jika 3 tali berturut-turut yang bererti tiang tiang adalah garis yangar, ia akan dianggap sebagai isyarat kosong kepala.

  3. Dalam menilai isyarat, isyarat perdagangan tambahan akan dihasilkan jika harga berada di titik tinggi atau rendah sebelum penembusan.

  4. Gunakan garis rata-rata SMA sebagai penapis dan hanya buka kedudukan apabila harga menembusi SMA.

  5. Selepas memegang kedudukan, jika harga menembusi titik masuk atau garis rata-rata SMA sekali lagi, maka ia akan ditutup.

Analisis kelebihan

  1. Menggunakan penyaringan tiang makna untuk menilai trend, anda boleh menyaring gangguan yang tidak perlu dan menjadikan isyarat lebih jelas.

  2. Gabungan isyarat trend dan isyarat pecah dapat meningkatkan kualiti isyarat dan mengurangkan isyarat palsu.

  3. Penapisan rata-rata SMA dapat mengelakkan pengejaran tinggi dan rendah. Membeli di bawah penutupan, menjual di atas penutupan, meningkatkan kebolehpercayaan isyarat.

  4. Tetapkan syarat hentian kerugian, anda boleh menghentikan hentian kerugian tepat pada masanya, yang membantu menyimpan wang.

Analisis risiko

  1. Strategi ini lebih radikal, menggunakan 3 K-line untuk menilai isyarat, dan mungkin salah mengartikan goyah jangka pendek sebagai pembalikan trend.

  2. Data ujian tidak mencukupi, dan kesan mungkin berbeza antara varieti dan kitaran yang berbeza.

  3. Tidak menyertai kawalan kedudukan bermalam malam, terdapat risiko kedudukan bermalam malam.

Arah pengoptimuman

  1. Parameter untuk tali tiang makna boleh dioptimumkan lebih jauh, seperti bilangan baris K yang dinilai, definisi tali makna makna dan sebagainya.

  2. Anda boleh menguji kesan parameter kitaran yang berbeza terhadap kesan dan mencari kitaran yang optimum.

  3. ATR boleh ditambah untuk mengawal risiko.

  4. Ia boleh dipertimbangkan untuk menambah logik kawalan kedudukan semalaman.

ringkaskan

Strategi ini menggunakan penyaringan gelombang dan trend dalam garis tiang yang bermakna, digabungkan dengan sinyal perdagangan pembentukan terobosan, dapat menyaring dengan berkesan terlalu banyak pergerakan kecil yang tidak perlu, dan isyaratnya lebih jelas dan boleh dipercayai. Tetapi kerana tempoh penilaian yang pendek, mungkin terdapat risiko kesalahan tertentu.

Kod sumber strategi
/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//AlexInc
//2018

// закрытие - вычислить и в течение скольки-то баров его добиваться
// если нет, то по первому противоположному
// по стоп-лоссу в любом случае - стоп вычислить

//@version=2
strategy(title = "AlexInc's Bar v1.2", shorttitle = "AlexInc Bar 1.2", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
tryprofitbars = input(6, defval = 6, minval = 1, maxval = 100, title = "Number of candles to take profit anyway")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")

useSMAfilter = input(false, defval = true, title = "Use SMA filter")
SMAlimit = input(10, defval = 10, minval = 1, maxval = 30, title = "SMA filter limit")
bodysizeMlt = input(3, defval = 3, minval = 1, maxval = 10, title = "Body Size Multiplier")
meanfulbardiv = input(3, title = "Meanful Bar size Divider")

showarr = input(false, defval = false, title = "Show Arrows")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//SMA #
index = 0
index := barstate.isfirst ==true ? 0 : nz(index[1])+1

buyindex = 0
buyindex := barstate.isfirst ==true ? 0 : buyindex[1]

sellindex = 0
sellindex := barstate.isfirst ==true ? 0 : sellindex[1]

//predictprofit = barstate.isfirst ==true ? 0 : predictprofit[1]

smafilter = sma(close, SMAlimit)

//Body
body = abs(close - open)
range = abs(high - low)
abody = sma(body, 6)

max3 = 0
if body >= body[1] and body >= body[2]
    max3 := body
else
    if body[1] >= body and body[1] >= body[2]
        max3 := body[1]
    else 
        if body[2] >= body and body[2] >= body[1]
            max3 := body[2]

prevmax3 = 0
prevmax3 := nz(max3[1])


bar = close > open ? 1 : close < open ? -1 : 0
firstbullishopen = 0
firstbullishopen := bar == 1 and bar[1] != 1 ? open : nz(firstbullishopen[1])
firstbearishopen = 0
firstbearishopen := bar == -1 and bar[1] != -1 ? open : nz(firstbearishopen[1])

meanfulbar = body > abody / meanfulbardiv

meanfulbearish = 0
meanfulbearish := nz(meanfulbearish[1])

meanfulbullish = 0
meanfulbullish := nz(meanfulbullish[1])

if meanfulbar
    if bar == 1
        meanfulbullish := 1 + meanfulbullish
        meanfulbearish := 0
    else
        if bar == -1
            meanfulbearish := 1 + meanfulbearish
            meanfulbullish := 0


plot(min(low, high)-10, style=circles, color = meanfulbar ? yellow:black, linewidth=3)

//Signals
up1 = (meanfulbearish >= 3) and (close < firstbullishopen or 1) and (strategy.position_size == 0 or close < strategy.position_avg_price) and body > abody / 5 and (useSMAfilter == false or close < smafilter)
if up1 == true
	predictprofit = sma(body, 3)
up2 = sma(bar, 1) == -1 and body > prevmax3 * bodysizeMlt and (strategy.position_size == 0 or close < strategy.position_avg_price) and body > abody / 5 and (useSMAfilter == false or close < smafilter)
if up2 == true
	predictprofit = body * 0.5
plot(min(low, high), style=circles, color = up1?blue:up2?green:gray, linewidth=3)

dn1 = (meanfulbullish >= 3) and (close > firstbearishopen or 1)  and (strategy.position_size == 0 or close > strategy.position_avg_price) and body > abody / 5 and (useSMAfilter==false or close > smafilter)
if dn1 ==true 
	predictprofit = sma(body, 3)
dn2 = sma(bar, 1) == 1 and body > prevmax3 * bodysizeMlt and (strategy.position_size == 0 or close > strategy.position_avg_price) and body > abody / 5 and (useSMAfilter==false or close > smafilter)
if dn2 ==true	
	predictprofit = body * 0.5
plot(max(low, high), style=circles, color = dn1?blue:dn2?green:gray, linewidth=3)


exit = (((strategy.position_size > 0 and bar == 1 ) or (strategy.position_size < 0 and bar == -1)) and body > abody / 2 )
// or index >= buyindex (or sellindex) + tryprofitbars


//Arrows
col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)


//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
		buyindex = index
		sellindex = index
	if strategy.position_size == 0
		buyindex = index
		
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot )

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
		buyindex = index
		sellindex = index
	if strategy.position_size == 0
		sellindex = index
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot )
    
if  exit
    strategy.close_all()