
Strategi ini menggunakan pelbagai indikator teknikal dalam kombinasi untuk membuat keputusan perdagangan dua hala yang panjang dan pendek. Terutama termasuk garis Brin, RSI, dan ADX, dan juga garis rata untuk menentukan arah trend.
Strategi ini digunakan untuk menilai keadaan harga yang bergolak dengan menggunakan garis Bolling, garis Bolling yang lebih ketat mewakili turun naik harga yang lebih rendah, kemungkinan pecah; dan digabungkan dengan RSI untuk menilai fenomena overbought dan oversold, RSI lebih tinggi daripada 70 adalah kawasan overbought, dan lebih rendah daripada 30 adalah kawasan oversold. Apabila garis Bolling lebih ketat, perdagangan berbalik apabila RSI mendekati kawasan overbought dan oversold.
Selain itu, strategi ini juga menggunakan ADX untuk menentukan kekuatan pergerakan harga. Apabila ADX tinggi, yang mewakili trend yang kuat, maka anda boleh memilih perdagangan yang berjalan; Apabila ADX rendah, yang mewakili tiada trend yang jelas, maka anda boleh mempertimbangkan perdagangan yang berbalik.
Khususnya, apabila Burin berkurangan, penunjuk RSI mendekati kawasan jual-beli dan harga jatuh dari landasan, menganggap bahawa harga mungkin bangkit, maka pertimbangkan untuk melakukan lebih banyak; apabila Burin berkurangan, penunjuk RSI mendekati kawasan jual-beli dan harga melompat dari landasan, menganggap bahawa harga mungkin jatuh, maka pertimbangkan untuk melakukan penembusan. Selain itu, jika ADX tinggi, harga dalam trend naik, anda boleh mengambil lebih banyak kedudukan; jika ADX rendah, harga dalam trend turun, anda boleh mengambil kedudukan kosong.
Strategi gabungan pelbagai indikator ini mempunyai kelebihan berikut:
Mengambil kira pelbagai petunjuk teknikal secara menyeluruh meningkatkan ketepatan dan kestabilan isyarat perdagangan. Indikator tunggal mudah disalahgunakan seperti penembusan palsu, kombinasi pelbagai petunjuk dapat mengesahkan isyarat dan mengelakkan perdagangan yang salah.
Mengambil kira trend dan juga gegaran, mampu menyesuaikan diri dengan keadaan pasaran yang berbeza, berubah-ubah. Perdagangan trend mengejar trend besar, dan sasaran dagangan gegaran mendapat keuntungan kecil.
Dalam pada itu, anda boleh melakukan lebih banyak shorting untuk mengurangkan risiko kedudukan di pasaran unilateral dan mengelakkan situasi yang melampau.
Tetapkan titik henti kerugian untuk mengehadkan keuntungan dan had kerugian apabila kedudukan salah.
Dengan mengoptimumkan parameter, anda boleh terus meningkatkan kesan strategi dan menyesuaikan diri dengan perubahan pasaran.
Strategi ini juga mempunyai risiko yang perlu diperhatikan:
Kombinasi pelbagai indikator menambah kerumitan strategi, dan parameter yang tidak betul boleh mengurangkan keberkesanan. Perlu diuji dan dioptimumkan dengan baik.
Terlalu bergantung pada petunjuk teknikal dan mengabaikan maklumat asas boleh menyebabkan isyarat perdagangan tidak tepat.
Apabila penunjuk menghasilkan isyarat, mungkin ada beberapa perubahan dalam pasaran, terdapat risiko mengejar kenaikan dan penurunan. Perlu menunggu panggilan balik yang sesuai.
Multicash Double Opening meningkatkan frekuensi dagangan, meningkatkan kos bayaran dan tekanan kewangan. Perlu mengawal saiz kedudukan.
Terdapat risiko tertentu untuk kecocokan kurva, dan lebih baik untuk menguji kekuatan strategi di pelbagai pasaran.
Risiko boleh dikawal dengan cara yang ketat, berhati-hati, dan mengawal kedudukan dengan bijak. Secara keseluruhan, strategi ini mempunyai kepraktisan yang kuat.
Strategi ini boleh dipertimbangkan untuk dioptimumkan dalam beberapa aspek:
Uji kombinasi parameter yang berbeza untuk mencari parameter yang paling optimum. Pengoptimuman parameter boleh dilakukan dengan kaedah langkah maju, carian rawak, dan algoritma genetik.
Menambah lebih banyak penunjuk seperti penunjuk KDJ, William dan lain-lain, membentuk kumpulan penunjuk, meningkatkan strategi yang stabil.
Mengoptimumkan pengurusan kedudukan dan mengawal risiko dengan menyesuaikan kedudukan secara dinamik.
Menggabungkan algoritma pembelajaran mesin, menggunakan model kuantitatif untuk menilai trend harga dan pergerakan masa depan.
Ujian dalam pelbagai jenis, tempoh masa, dan pasaran untuk meningkatkan kesesuaian strategi.
Optimumkan masa masuk dan keluar dengan menangkap trend pada peringkat awal dan keluar sebelum pembalikan.
Menggunakan kaedah seperti Stop Loss Tracking dan Move Stop untuk mengunci keuntungan dan mengawal risiko.
Menambah faktor asas, penilaian struktur pasaran untuk menapis isyarat yang dihasilkan oleh penunjuk teknikal.
Strategi ini menggunakan pelbagai indikator untuk menentukan trend harga, untuk mewujudkan perdagangan automatik. Strategi ini mempunyai kelebihan seperti pengesahan kumpulan indikator, perdagangan dua hala, dan penghentian kerugian, yang dapat meningkatkan kecekapan perdagangan. Tetapi juga perlu berhati-hati dengan masalah pengoptimuman, isyarat palsu dan sebagainya. Dengan terus mengoptimumkan ujian, strategi ini dapat menjadi sistem perdagangan kuantitatif yang stabil dan praktikal.
/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 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/
// © The_Bigger_Bull
//@version=5
strategy("Best TradingView Strategy", overlay=true, margin_long=0, margin_short=0)
//Bollinger Bands
source1 = close
length1 = input.int(15, minval=1)
mult1 = input.float(2.0, minval=0.001, maxval=50)
basis1 = ta.sma(source1, length1)
dev1 = mult1 * ta.stdev(source1, length1)
upper1 = basis1 + dev1
lower1 = basis1 - dev1
//buyEntry = ta.crossover(source1, lower1)
//sellEntry = ta.crossunder(source1, upper1)
//RSI
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"Bollinger Bands" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")
up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsiMA = ma(rsi, maLengthInput, maTypeInput)
isBB = maTypeInput == "Bollinger Bands"
//plot(rsi, "RSI", color=#7E57C2)
//plot(rsiMA, "RSI-based MA", color=color.yellow)
rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86)
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green)
bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green)
fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill")
//ADX
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
dirmov(len) =>
up1 = ta.change(high)
down1 = -ta.change(low)
plusDM = na(up1) ? na : (up1 > down1 and up1 > 0 ? up1 : 0)
minusDM = na(down1) ? na : (down1 > up1 and down1 > 0 ? down1 : 0)
truerange = ta.rma(ta.tr, len)
plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
[plus, minus]
adx(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)
out = ta.sma(close, 14)
sma1=ta.sma(close,55)
ema200=ta.ema(close,200)
longCondition = (out>sma1) and ta.crossover(source1, lower1)
if (longCondition )
strategy.entry("long", strategy.long)
shortCondition = (out<sma1) and ta.crossunder(source1, lower1)
if (shortCondition )
strategy.entry("short", strategy.short)
stopl=strategy.position_avg_price-50
tptgt=strategy.position_avg_price+100
stopshort=strategy.position_avg_price+50
tptgtshort=strategy.position_avg_price-100
strategy.exit("longclose","long",trail_offset=5,trail_points=45,when=ta.crossover(sma1,out))
strategy.exit("shortclose","short",trail_offset=5,trail_points=45,when=ta.crossover(out,sma1))
//if strategy.position_avg_price<0
plot(sma1 , color=color.blue)
plot(out, color=color.green)
//plot(ema200,color=color.red)