Strategi penunjuk teknikal yang komprehensif


Tarikh penciptaan: 2023-10-07 15:34:33 Akhirnya diubah suai: 2023-10-07 15:34:33
Salin: 0 Bilangan klik: 783
1
fokus pada
1621
Pengikut

Gambaran keseluruhan

Strategi ini menggunakan pelbagai indikator teknikal untuk menilai trend harga untuk memberi isyarat beli dan jual.

Prinsip Strategi

Strategi ini menilai trend harga berdasarkan beberapa petunjuk teknikal berikut:

  1. Indikator Super Trend ((SuperTrend): berdasarkan ATR yang dikira di atas dan di bawah, harga melakukan lebih banyak untuk menembusi atas dan di bawah;

  2. purata bergerak mudah (SMA): harga naik melalui SMA dan turun melalui SMA;

  3. Penunjuk Momentum: pergerakan harga lebih positif dan kurang negatif;

  4. MACD: DIFF naik melampaui garis DEA dan turun melampaui garis DEA;

  5. Bull and Bear: Kekuatan Bull dan Bear lebih besar daripada kekuatan Bull dan Bear, sebaliknya, Kekuatan Bull dan Bear lebih besar daripada kekuatan Bull dan Bear.

  6. RSI: RSI lebih tinggi daripada 30 dan kurang daripada 70

  7. Garis cahaya: Garis cahaya berturut-turut N kosong, Garis cahaya berturut-turut N lebih banyak;

  8. CCI: CCI lebih besar daripada 100 untuk melakukan over dan kurang daripada 100 untuk melakukan over;

  9. DMI: DMI lebih besar daripada DMI kosong, sebaliknya kosong;

  10. Dalam satu video yang disiarkan di YouTube, beliau berkata: “Saya tidak tahu apa yang berlaku di Malaysia, tetapi saya tidak tahu apa yang berlaku di Malaysia.

  11. Penunjuk rawak: Penunjuk rawak dengan 20 baris lebih banyak, 80 baris kosong.

Keputusan yang dikira oleh indikator ini memberi nilai 1 atau -1 bergantung pada arah ke atas atau ke bawah. Tambah jumlah semua indikator untuk mendapatkan jumlah keseluruhan. Apabila jumlah keseluruhan melewati garis 0, ia menghasilkan isyarat beli; apabila jumlah keseluruhan melewati garis 0, ia menghasilkan isyarat jual.

Analisis kelebihan

Kelebihan terbesar strategi gabungan pelbagai indikator ini adalah kebolehpercayaan yang tinggi, kerana penggunaan pelbagai indikator untuk menentukan arah trend, dapat mengurangkan isyarat palsu dengan berkesan, menjadikan isyarat lebih dipercayai. Kebolehpercayaan dan kestabilan strategi gabungan ini lebih baik berbanding dengan satu indikator.

Kelebihan lain ialah fleksibiliti dan penyesuaian strategi. Jenis indikator dan parameter boleh disesuaikan mengikut pasaran yang berbeza, menjadikan strategi lebih sesuai dengan keadaan yang berbeza.

Analisis risiko

Strategi gabungan ini mempunyai risiko yang perlu diperhatikan:

  1. Jika hubungan antara indikator yang dipilih terlalu tinggi, ia akan menimbulkan risiko signal yang berulang. Ini memerlukan kombinasi antara indikator dengan hubungan yang lebih rendah berdasarkan keadaan pasaran yang berbeza.

  2. Sekiranya jumlah indikator terlalu banyak, pengiraan terlalu lama, ia akan menjejaskan ketepatan masa penghantaran isyarat. Hubungan antara jumlah indikator dan ketepatan masa perlu ditimbang.

  3. Penetapan parameter penunjuk yang tidak betul juga boleh menjejaskan kesan strategi, perlu melakukan pengiraan semula untuk mencari parameter terbaik.

  4. Kesan Indikator juga akan berbeza-beza mengikut peringkat pasaran. Ia perlu diperiksa secara berterusan melalui pengulangan bergulir.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Mengoptimumkan jenis dan jumlah Indikator, memilih kombinasi yang optimum;

  2. Mengoptimumkan tetapan parameter untuk setiap Indikator;

  3. Menyesuaikan nisbah berat Indikator untuk meningkatkan berat Indikator Utama;

  4. Menambah penapisan syarat, seperti lonjakan jumlah transaksi, untuk mengelakkan penembusan palsu;

  5. Menggunakan pendekatan model gabungan, algoritma pembelajaran mesin secara automatik mencari gabungan strategi yang optimum.

ringkaskan

Ringkasnya, strategi gabungan pelbagai indikator ini menggunakan kelebihan pelbagai jenis penunjuk, kombinasi menentukan arah trend, dapat mengurangkan isyarat palsu, meningkatkan kebolehpercayaan isyarat. Dengan mengoptimumkan pemilihan penunjuk, penetapan parameter, peruntukan berat, dan lain-lain, anda dapat meningkatkan kestabilan strategi.

Kod sumber strategi
/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Super indicator ", overlay=true, precision=2, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
_0 = input(false,  "════════ Test Period ═══════")
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() =>true


hilow = ((high - low)*100)
openclose = ((close - open)*100)
vol1 = (volume / hilow)
spreadvol = (openclose * vol1)
VPT = spreadvol + cum(spreadvol)
window_len = 28

v_len = 14
price_spread = stdev(high-low, window_len)

vp =  spreadvol + cum(spreadvol)
smooth = sma(vp, v_len)
v_spread = stdev(vp - smooth, window_len)
shadow = (vp - smooth) / v_spread * price_spread

out1 = shadow > 0 ? high + shadow : low + shadow

//plot(out, style=line,linewidth=3, color=color)
len=5
vpt=ema(out1,len)


// INPUTS //
st_mult   =3
st_period = 7

// CALCULATIONS //
up_lev = vpt - (st_mult * atr(st_period))
dn_lev = vpt + (st_mult * atr(st_period))

up_trend   = 0.0
up_trend   := close[1] > up_trend[1]   ? max(up_lev, up_trend[1])   : up_lev

down_trend = 0.0
down_trend := close[1] < down_trend[1] ? min(dn_lev, down_trend[1]) : dn_lev

// Calculate trend var
trend10 = 0
trend10 := close > down_trend[1] ? 1: close < up_trend[1] ? -1 : nz(trend10[1], 1)

// Calculate SuperTrend Line
st_line = trend10 ==1 ? up_trend : down_trend

//
src = input(close, title="Source")
//sma
sma20 = sma(src, 20)
smapoint = 0
smapoint := src > sma20 ? smapoint + 1 : smapoint - 1


//AO
ao = sma(hl2,5) - sma(hl2,34)
aopoint = ao > 0 ? 1 : ao < 0 ? -1 : 0
//momentum
mom = src - src[14]
mompoint = mom > 0 ? 1 : mom < 0 ? -1 : 0
//MACD
fast_ma = ema(src, 12)
slow_ma = ema(src, 26)
macd = fast_ma - slow_ma
signal = ema(macd, 9)
hist = macd - signal
histpoint = hist > hist[1] ? 3 : -3

//Bull bear
Length = 30
r1=iff(close[1]<open,max(open-close[1],high-low),high-low)
r2=iff(close[1]>open,max(close[1]-open,high-low),high-low)
bull=iff(close==open,iff(high-close==close-low,iff(close[1]>open,max(high-open,close-low),r1),iff(high-close>close-low,iff(close[1]<open, max(high-close[1],close-low), high-open),r1)),iff(close<open,iff(close[1]<open,max(high-close[1],close-low), max(high-open,close-low)),r1))
bear=iff(close==open,iff(high-close==close-low,iff(close[1]<open,max(open-low,high-close),r2),iff(high-close>close-low,r2,iff(close[1]>open,max(close[1]-low,high-close), open-low))),iff(close<open,r2,iff(close[1]>open,max(close[1]-low,high-close),max(open-low,high-close))))
colors=iff(sma(bull-bear,Length)>0, color.green, color.red)
// barcolor(colors)
bbpoint = sma(bull-bear,Length)>0 ? 1 : -1
//UO
length7 = 7,
length14 = 14,
length28 = 28
average(bp, tr_, length) => sum(bp, length) / sum(tr_, length)
high_ = max(high, src[1])
low_ = min(low, src[1])
bp = src - low_
tr_ = high_ - low_
avg7 = average(bp, tr_, length7)
avg14 = average(bp, tr_, length14)
avg28 = average(bp, tr_, length28)
uoout = 100 * (4*avg7 + 2*avg14 + avg28)/7
uopoint = uoout > 70 ? 1 : uoout < 30 ? -1 : 0
//IC
conversionPeriods = 9
basePeriods = 26
laggingSpan2Periods = 52
displacement = 26
donchian(len) => avg(lowest(len), highest(len))
baseLine = donchian(basePeriods)
icpoint = src > baseLine ? 1 : -1

//HMA
hullma = wma(2*wma(src, 9/2)-wma(src, 21), round(sqrt(21)))
hmapoint = src > hullma ? 2 : -2
//
//
trendDetectionLength =4
float trend = na
float wave = na
float vol = na
mov = close>close[1] ? 1 : close<close[1] ? -1 : 0
trend := (mov != 0) and (mov != mov[1]) ? mov : nz(trend[1])
isTrending = rising(close, trendDetectionLength) or falling(close, trendDetectionLength)
wave := (trend != nz(wave[1])) and isTrending ? trend : nz(wave[1])
vol := wave == wave[1] ? (nz(vol[1])+volume) : volume
up1 = wave == 1 ? vol : 0
dn1 = wave == 1 ? 0 : vol
Weis= up1 > dn1 ? 2 : -2


//

roclen =20
ccilen =21
dilen = 5
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

f_draw_infopanel(_x, _y, _line, _text, _color)=>
    _rep_text = ""
    for _l = 0 to _line
        _rep_text := _rep_text + "\n"
    _rep_text := _rep_text + _text
    var label _la = na
    label.delete(_la)
    _la := label.new(
         x=_x, y=_y, 
         text=_rep_text, xloc=xloc.bar_time, yloc=yloc.price, 
         color=color.black, style=label.style_labelup, textcolor=_color, size=size.normal)

TD = 0
TS = 0
TD := close > close[4] ? nz(TD[1]) + 1 : 0
TS := close < close[4] ? nz(TS[1]) + 1 : 0
TDUp = TD - valuewhen(TD < TD[1], TD , 1 )
TDDn = TS - valuewhen(TS < TS[1], TS , 1 )
td = TDUp > 0 ? 2 : TDDn > 0 ? -2 : 0
roc = roc(close, roclen)
Roc=roc > 0 ? 1 : -1
cci = cci(close, ccilen)
CCI=cci > 0? 2 : -2
[plus, minus] = dirmov(dilen)
dmi = plus - minus
DMI= dmi >= 0? 2 : -2
//
STT=trend10 == 1 ? 1 : -1
//
periods = 2
smooth1 =  14
price = close
fn(src, length) => 
    MA_s= 0.0
    MA_s:=(src + nz(MA_s[1] * (length-1)))/length
    MA_s
r11 = ema( price, periods ) 
r22 = iff( price > r11, price - r11, 0 ) 
r3 = iff( price < r11, r11 - price, 0 ) 
r4 = fn( r22, smooth1 ) 
r5 = fn( r3, smooth1 ) 
rr = iff( r5 == 0, 100, 100 - ( 100 / ( 1 + ( r4 / r5 ) ) ) ) 

length = 20,fast = 7,slow = 13
//
src10 = rr
er = abs(change(src,length))/sum(abs(change(src10)),length)
dev = er*stdev(src10*2,fast) + (1-er)*stdev(src10*2,slow)
a = 0.
a := bar_index < 9 ? src10 : src10 > a[1] + dev ? src10 : src10 < a[1] - dev ? src10 : a[1]
//

rsi=fixnan(a > a[1] ? 3 : a < a[1] ?-3 : na)
//
totalpoints =rsi+td+STT+Roc+DMI+ CCI+Weis+smapoint  + aopoint + mompoint + histpoint  + bbpoint  + icpoint  + hmapoint
//
piz=input(1)
tt=sma(totalpoints,piz)

//

zero=0
down = crossunder(tt, 0) 
up = crossover(tt, -0) 

//Alerts
/////// Alerts /////
alertcondition(down,title="sell")
alertcondition(up,title="buy")
//
/////////////// Strategy /////////////// 
long = up
short = down

strategy.entry("Long", strategy.long, when = long) 
strategy.entry("Short", strategy.short, when = short)