SAR penjejakan dinamik kejayaan tiga strategi purata bergerak


Tarikh penciptaan: 2023-11-08 11:53:09 Akhirnya diubah suai: 2023-11-08 11:53:09
Salin: 0 Bilangan klik: 491
1
fokus pada
1234
Pengikut

SAR penjejakan dinamik kejayaan tiga strategi purata bergerak

Gambaran keseluruhan

Ini adalah strategi dagangan terobosan yang menggabungkan SAR paras paras paras dengan rata-rata SMMA dalam tiga tempoh yang berbeza. Ia melakukan lebih banyak apabila tiga rata-rata naik secara keseluruhan, dan kosong apabila tiga rata-rata turun secara keseluruhan, sambil menggabungkan SAR untuk menentukan arah trend dan membuka posisi terbalik apabila SAR berubah.

Prinsip Strategi

Strategi ini berdasarkan kepada beberapa perkara:

  1. Menggunakan parasol SAR untuk menentukan arah trend semasa. Indeks SAR dapat secara dinamik menjejaki perubahan harga dan menentukan trend berbilang dan trend kosong.

  2. Ditetapkan tiga garis purata SMMA dengan tiga kitaran yang berbeza: ((Garis 21 kitaran, Garis 50 kitaran, Garis 200 kitaran). Apabila ketiga-tiga garis purata naik, ia dianggap sebagai tren multihead; apabila ketiga-tiga garis purata turun, ia dianggap sebagai tren kepala kosong.

  3. Apabila penunjuk SAR bertukar ke bawah, jika ketiga-tiga garis rata naik secara menyeluruh, masukkan lebih banyak.

  4. Apabila penunjuk SAR bertukar ke atas, jika tiga garis rata turun secara keseluruhan, masuklah secara kosong.

  5. Tetapkan hentian dan hentian. Hentian menggunakan indikator SAR sebagai hentian dinamik, dan hentian ditetapkan sebagai peratusan tertentu dari harga masuk.

Khususnya, strategi pertama menilai sama ada penunjuk SAR BAR semasa bertukar. Jika SAR bertukar dari atas ke bawah, dan tiga garis rata naik secara keseluruhan, lakukan lebih banyak; jika SAR bertukar dari bawah ke atas, dan tiga garis rata turun secara keseluruhan, lakukan kosong.

Selepas memegang kedudukan, garis hentian ditetapkan sebagai harga penunjuk SAR BAR seterusnya, dengan SAR sebagai stop tracking yang dinamik. Stop set adalah 10% daripada harga masuk. Apabila harga mencapai tahap hentian atau hentian, keluar dari kedudukan kosong.

Analisis kelebihan

Strategi ini menggabungkan kelebihan indikator penghakiman trend dan garis purata jangka masa yang banyak, yang dapat masuk ke dalam masa apabila trend bertukar, dan pada masa yang sama menapis pecah palsu melalui garis purata. Kelebihan utamanya adalah:

  1. Penunjuk SAR dapat menilai perubahan trend secara dinamik dan menangkap peluang untuk mengubah trend dengan cepat.

  2. Tiga garis rata dapat menyaring bunyi pasaran dengan berkesan untuk mengelakkan gangguan palsu.

  3. Menggunakan garis rata SMMA, kurva lebih licin, mengurangkan gangguan pergerakan rata-rata.

  4. Bersama-sama dengan seting stop loss, anda boleh mengawal kerugian tunggal, sambil mengunci sebahagian keuntungan.

  5. Tetapan parameter strategi fleksibel, parameter boleh disesuaikan untuk pasaran yang berbeza, mengoptimumkan kesan strategi.

Analisis risiko

Strategi ini juga mempunyai beberapa risiko, terutamanya:

  1. Dalam trend goyah, penunjuk SAR mungkin bertukar berulang kali, menyebabkan kos dagangan meningkat kerana terlalu sering diperdagangkan.

  2. Seting tiga garis rata mungkin tidak sesuai dengan semua jenis, perlu disesuaikan dengan keadaan tertentu.

  3. Stop loss yang ditetapkan sebagai harga SAR BAR seterusnya mempunyai kelewatan masa, yang mungkin meningkatkan kerugian.

  4. Masalah penembusan palsu dalam trend yang stabil yang menyebabkan SAR bertukar arah dapat dikurangkan dengan menyesuaikan parameter untuk meluruskan kurva SAR.

  5. Pengaturan rata-rata yang tidak betul juga boleh terlepas trend atau menghasilkan isyarat yang salah, yang memerlukan ujian dan pengoptimuman yang teliti.

Menghadapi risiko, anda boleh mengoptimumkan dari:

  1. Menyesuaikan parameter SAR mengikut kadar turun naik yang berbeza untuk mengurangkan kemungkinan perubahan yang kerap.

  2. Menyesuaikan parameter tiga garis rata untuk menjadikannya lebih dekat dengan ciri-ciri pelbagai jenis.

  3. Mengoptimumkan strategi penangguhan kerugian, seperti penggunaan penangguhan kecil, penangguhan bergerak dan sebagainya.

  4. Menggunakan harga terhad untuk menghentikan kerugian dalam pasaran yang sering diperdagangkan, untuk mengelakkan titik tergelincir untuk meningkatkan kerugian.

  5. Lakukan ujian penyesuaian parameter untuk menilai kesan garisan purata dan parameter SAR terhadap kesan strategi.

Arah pengoptimuman

Berdasarkan analisis di atas, strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Mengoptimumkan tetapan parameter SAR, meratakan keluk SAR, mengurangkan frekuensi belokan keluk, dan mengelakkan perdagangan berlebihan.

  2. Menyesuaikan panjang tiga garis rata supaya ia lebih sesuai dengan ciri-ciri jenis dagangan tertentu dan berfungsi sebagai penapis trend yang lebih baik

  3. Menggunakan strategi hentikan kerugian dinamik, seperti hentikan bergerak, hentikan kecil, dan sebagainya, untuk mengurangkan kerugian akibat hentikan kerugian.

  4. Menggunakan harga terhad untuk menghentikan kerugian dalam pasaran perdagangan frekuensi tinggi, untuk mengurangkan kehilangan titik terhenti.

  5. Tambahan penapis untuk penunjuk lain, seperti RSI, KD, dan lain-lain, meningkatkan kualiti isyarat dan mengurangkan kebarangkalian penembusan palsu.

  6. Untuk mengoptimumkan keadaan kemasukan, pertimbangkan untuk memeriksa bentuk K-line pada masa yang sama ketika SAR beralih, untuk mengelakkan isyarat berkualiti rendah.

  7. Tambah syarat kemasukan semula apabila harga terus berjalan ke arah yang menguntungkan selepas penutupan.

  8. Memperbaiki strategi penangguhan, seperti penangguhan bergerak, penangguhan separa, penangguhan selisih peringkat, dan lain-lain, untuk meningkatkan keuntungan.

  9. Mengoptimumkan parameter berdasarkan hasil tinjauan balik dan menilai kesan parameter terhadap kesan strategi keseluruhan.

ringkaskan

Secara keseluruhannya, ini adalah strategi penembusan yang mudah dan praktikal yang menggabungkan penunjuk trend SAR dan garisan rata. Ia menggunakan SAR untuk menilai kepekaan perubahan trend, dan pengaruh gelombang garisan rata, untuk memasuki perdagangan dengan cepat di titik perubahan trend.

Kod sumber strategi
/*backtest
start: 2023-10-08 00:00:00
end: 2023-11-07 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="SAR + 3SMMA with SL & TP", overlay=true, calc_on_order_fills=false, calc_on_every_tick=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.USD, commission_type= strategy.commission.percent, commission_value=0.03)
start = input.float(0.02, step=0.01, group="SAR")
increment = input.float(0.02, step=0.01, group="SAR")
maximum = input.float(0.2, step=0.01, group="SAR")

//Take Profit Inputs     
take_profit = input.float(title="Take Profit (%)", minval=0.0, step=0.1, defval = 0.1, group="Stop Loss and Take Profit", inline="TP") * 0.01

//Stop Loss Inputs
stop_loss = input.float(title="StopLoss (%)", minval=0.0, step=0.1, defval=1, group="Stop Loss and Take Profit", inline="SL") * 0.01

// Smooth Moving Average
fastSmmaLen = input.int(21, minval=1, title="Fast Length", group = "Smooth Moving Average")
midSmmaLen = input.int(50, minval=1, title="Mid Length", group = "Smooth Moving Average")
slowSmmaLen = input.int(200, minval=1, title="Slow Length", group = "Smooth Moving Average")

src = input(close, title="Source", group = "Smooth Moving Average")

smma(ma, src, len) => 
    smma = 0.0
    smma := na(smma[1]) ? ma : (smma[1] * (len - 1) + src) / len
    smma

fastSma = ta.sma(src, fastSmmaLen)
midSma = ta.sma(src, midSmmaLen)
slowSma = ta.sma(src, slowSmmaLen)

fastSmma = smma(fastSma, src, fastSmmaLen)
midSmma = smma(midSma, src, midSmmaLen)
slowSmma = smma(slowSma, src, slowSmmaLen)

isSmmaUpward = ta.rising(fastSmma, 1) and ta.rising(midSmma, 1) and ta.rising(slowSmma, 1)

var bool uptrend = na
var float EP = na
var float SAR = na
var float AF = start
var float nextBarSAR = na

if bar_index > 0
	firstTrendBar = false
	SAR := nextBarSAR
	if bar_index == 1
		float prevSAR = na
		float prevEP = na
		lowPrev = low[1]
		highPrev = high[1]
		closeCur = close
		closePrev = close[1]
		if closeCur > closePrev
			uptrend := true
			EP := high
			prevSAR := lowPrev
			prevEP := high
		else
			uptrend := false
			EP := low
			prevSAR := highPrev
			prevEP := low
		firstTrendBar := true
		SAR := prevSAR + start * (prevEP - prevSAR)
	if uptrend
		if SAR > low
			firstTrendBar := true
			uptrend := false
			SAR := math.max(EP, high)
			EP := low
			AF := start
	else
		if SAR < high
			firstTrendBar := true
			uptrend := true
			SAR := math.min(EP, low)
			EP := high
			AF := start
	if not firstTrendBar
		if uptrend
			if high > EP
				EP := high
				AF := math.min(AF + increment, maximum)
		else
			if low < EP
				EP := low
				AF := math.min(AF + increment, maximum)
	if uptrend
		SAR := math.min(SAR, low[1])
		if bar_index > 1
			SAR := math.min(SAR, low[2])
	else
		SAR := math.max(SAR, high[1])
		if bar_index > 1
			SAR := math.max(SAR, high[2])
	nextBarSAR := SAR + AF * (EP - SAR)

sarIsUpTrend = uptrend ? true : false

sarFlippedDown = sarIsUpTrend and not sarIsUpTrend[1] ? true : false
sarFlippedUp = not sarIsUpTrend and sarIsUpTrend[1] ? true : false


longEntryCondition = isSmmaUpward and sarFlippedDown
shortEntryCondition = not isSmmaUpward and sarFlippedUp

if(longEntryCondition)
    strategy.entry("L", strategy.long, stop=nextBarSAR, comment="L")

if(shortEntryCondition)
    strategy.entry("S", strategy.short, stop=nextBarSAR, comment="S")


strategy.exit("CL", when=strategy.position_size > 0, limit=strategy.position_avg_price * (1+take_profit), stop=strategy.position_avg_price*(1-stop_loss))
strategy.exit("CS", when=strategy.position_size < 0, limit=strategy.position_avg_price * (1-take_profit), stop=strategy.position_avg_price*(1+stop_loss))


plot(SAR, style=plot.style_cross, linewidth=1, color=color.orange)
plot(nextBarSAR, style=plot.style_cross, linewidth=1, color=color.aqua)
plot(series = fastSmma, title="fastSmma", linewidth=1)
plot(series = midSmma, title="midSmma", linewidth=2)
plot(series = slowSmma, title="slowSmma", linewidth=3)
plotchar(series = isSmmaUpward, title="isSmmaUpward", char='')
plotchar(series=sarIsUpTrend, title="sarIsUpTrend", char='')
plotchar(series=sarFlippedUp, title="sarFlippedUp", char='')
plotchar(series=sarFlippedDown, title="sarFlippedDown", char='')
plotchar(series=longEntryCondition, title="longEntryCondition", char='')
plotchar(series=shortEntryCondition, title="shortEntryCondition", char='')
plotchar(series=strategy.position_size > 0, title="inLong", char='')
plotchar(series=strategy.position_size < 0, title="inShort", char='')


//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)