Strategi terobosan berganda panjang dan pendek


Tarikh penciptaan: 2023-11-03 17:16:02 Akhirnya diubah suai: 2023-11-03 17:16:02
Salin: 1 Bilangan klik: 623
1
fokus pada
1617
Pengikut

Strategi terobosan berganda panjang dan pendek

Gambaran keseluruhan

Strategi ini menggunakan indikator Brin untuk mencari titik pecah kosong dan menggabungkan indikator ADX untuk menyaring pergerakan turun naik yang tidak baik, untuk mengikuti trend.

Prinsip Strategi

Strategi ini adalah berdasarkan kepada indikator Brinband untuk menilai arah kosong. Garis tengah Brinband adalah purata bergerak harga penutupan N hari, dan bandwidth dikira melalui perbezaan piawai. Apabila harga menembusi ke bawah, dinilai sebagai isyarat kosong. Apabila harga menembusi ke atas, dinilai sebagai isyarat kosong.

Untuk mengelakkan perdagangan yang salah yang disebabkan oleh penembusan yang tidak berkesan dalam keadaan bukan trend, strategi ini menggabungkan penunjuk ADX untuk menapis pergerakan turun naik. Isyarat beli dan jual dikeluarkan hanya apabila nilai ADX berada di bawah paras paras yang ditetapkan. Apabila nilai ADX berada di atas paras yang ditetapkan, semua kedudukan dipadamkan dan menunggu trend berubah.

Strategi ini juga menetapkan hentian regresi dan hentian pengesanan ke atas. Secara khusus, setiap kali membuka kedudukan, harga terendah N hari sebelumnya akan direkodkan sebagai hentian regresi ke arah itu, dan harga tertinggi sebagai hentian pengesanan ke atas. Ini dapat mengunci keuntungan, sambil meminimumkan kerugian yang disebabkan oleh pembalikan.

Dari segi kod logik, strategi ini mula-mula mengira parameter indikator Brin dan ADX. Kemudian, menilai sama ada harga menembusi Brin dan turun ke bawah, dan sama ada ADX berada di bawah nilai terendah, dan jika dipenuhi, ia akan menghasilkan isyarat beli dan jual.

Analisis kelebihan

  • Menggunakan Brin Belt untuk menilai titik pecah yang jelas, anda boleh merebut peluang trend
  • Penapisan ADX komprehensif untuk mengelakkan aliran riak apabila tiada trend yang jelas
  • Hentikan kerugian dengan mengawal kerugian tunggal dengan berkesan
  • Tracking stop up boleh mengunci sebahagian besar keuntungan

Analisis risiko

  • Penembusan Brin tidak mengambil kira hubungan kuantitatif dan mungkin menyebabkan penembusan palsu
  • Pertimbangan yang salah dalam penapisan ADX juga boleh kehilangan peluang trend
  • Penangguhan kemusnahan yang terlalu dekat mungkin dibalikkan
  • Penetapan parameter yang tidak betul boleh menjejaskan prestasi strategi

Anda boleh mempertimbangkan untuk menggabungkan sokongan penilaian dengan indikator lain untuk memastikan penembusan VALID; mengoptimumkan keadaan penapisan ADX, menggunakan kemiringan kurva ADX untuk menentukan titik peralihan trend; meluaskan julat hentian kerugian dengan sewajarnya, untuk mengelakkan terlalu dekat dengan halangan.

Arah pengoptimuman

  • Optimumkan parameter panjang tali pinggang Brin untuk mencari kesan penembusan terbaik
  • Mengoptimumkan syarat penapisan ADX, mengimbangi penghakiman trend dan kadar kesalahan
  • Menambah Indeks Kesan Sokongan untuk Mengelakkan Penembusan Palsu
  • Mengoptimumkan kemusnahan regresi untuk mengelakkan kemusnahan yang terlalu sensitif
  • Mengoptimumkan penghentian jejak, jarak yang tepat

ringkaskan

Strategi ini secara keseluruhannya jelas dan ringkas, menggunakan tanda Brin untuk menilai isyarat penembusan yang jelas, dan menggunakan indikator ADX untuk menyaring perdagangan Choppy yang tidak mempunyai trend yang jelas, untuk mengunci peluang trend. Strategi ini mudah difahami, layak untuk diuji dan dioptimumkan, dan boleh menjadi strategi pengesanan trend asas.

Kod sumber strategi
/*backtest
start: 2023-10-26 00:00:00
end: 2023-11-02 00:00:00
period: 1m
basePeriod: 1m
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/
// © tweakerID

// This strategy uses Bollinger Bands to buy when the price 
// crosses over the lower band and sell when it crosses down
// the upper band. It only takes trades when the ADX is 
// below a certain level, and exits all trades when it's above it.

//@version=4
strategy("BB + ADX Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_value = 0.04, initial_capital=100)

//Inputs
i_reverse=input(false, title="Reverse Trades")
i_ADXClose=input(true, title="ADX Close")
i_SL=input(false, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=0, step=.5, title="SL Expander")
i_TPExpander=input(defval=0, step=.5, title="TP Expander")

//ADX Calculations
adxlen = input(14, title="ADX Smoothing")
dilen = input(20, title="DI Length")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
adxlevel=input(30, step=5)

//BB Calculations
BBCALC=input(false, title="-----------BB Inputs-----------")

length = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
MAlen=input(defval=9)
source = close
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev

//Entry Logic
BUY = crossover(source, lower) and sig < adxlevel
SELL = crossunder(source, upper) and sig < adxlevel

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0))*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0))*i_SLExpander)
lTP=strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0))+((valuewhen(bought, atr(14), 0))*i_TPExpander))
sTP=strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0)-strategy.position_avg_price)-((valuewhen(bought, atr(14), 0))*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0
SL= islong ? LSL : isshort ? SSL : na
TP= islong ? lTP : isshort ? sTP : na

//Entries
strategy.entry("long", long=i_reverse?false:true, when=BUY)
strategy.entry("short", long=i_reverse?true:false, when=SELL)

//EXITS
if i_ADXClose
    strategy.close_all(when=sig > adxlevel)
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots	
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross, title="SL")
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross, title="TP")
plot(upper)
plot(lower)