Strategi Pembalikan Harian Super Trend


Tarikh penciptaan: 2024-02-22 16:22:28 Akhirnya diubah suai: 2024-02-22 16:22:28
Salin: 0 Bilangan klik: 724
1
fokus pada
1617
Pengikut

Strategi Pembalikan Harian Super Trend

Gambaran keseluruhan

Strategi Pembaikan Harian Super Trend adalah strategi perdagangan kuantitatif yang menggunakan indikator super trend untuk menentukan trend pasaran, digabungkan dengan penembusan harga dan pengiraan stop loss untuk jangkauan pergerakan sebenar rata-rata, dan menggunakan indikator perubahan kadar harga untuk menyaring isyarat super trend. Strategi ini sesuai untuk garis matahari dan jangka masa yang lebih tinggi, dan boleh digunakan untuk pasaran seperti mata wang digital dan saham.

Prinsip Strategi

Indikator Super Trend Indicator adalah indikator utama strategi ini. Indikator Super Trend adalah berdasarkan purata pergerakan sebenar (ATR), yang dapat menentukan arah trend pasaran dengan lebih jelas. Apabila harga menembusi Super Trend, ia memberi isyarat penurunan, dan apabila ia menembusi, ia memberi isyarat bullish.

Strategi ini disertakan dengan penggunaan indikator kadar perubahan harga ((ROC) untuk menyaring indikator super trend, untuk mengelakkan isyarat super trend yang tidak berkesan. Ia hanya mengambil bahagian dalam isyarat super trend apabila kadar turun naik harga lebih besar, atau tidak mengambil bahagian.

Berkenaan dengan hentian, strategi ini menawarkan dua jenis hentian: peratusan hentian tetap dan hentian pengurangan automatik berdasarkan ATR. Hentian tetap mudah dan langsung, dan Hentian ATR boleh menyesuaikan julat hentian mengikut turun naik pasaran.

Keadaan masuk adalah apabila penunjuk supertrend berbalik dan penunjuk kadar perubahan harga melalui penapis. Keadaan keluar adalah apabila supertrend berbalik sekali lagi atau menembusi garis hentian. Strategi ini mengikuti prinsip trend track dan hanya membenarkan satu kedudukan setiap arah.

Analisis kelebihan

Kelebihan utama strategi ini ialah penggunaan indikator super trend untuk menentukan arah trend dengan kejernihan dan kestabilan yang lebih tinggi, dan lebih sedikit kebisingan berbanding rata-rata bergerak biasa. Selain itu, strategi ini menyertakan indikator kadar perubahan harga yang berkesan menyaring beberapa isyarat palsu.

Mekanisme penangguhan kerugian ATR juga membolehkan strategi ini menyesuaikan diri dengan keadaan pasaran yang lebih luas. Penangguhan akan dikurangkan secara automatik apabila turun naik meningkat, sehingga maksimum keuntungan dikunci.

Dari hasil ujian, strategi ini berkinerja baik dalam pasaran lembu. Ia mempunyai kadar kemenangan yang tinggi dalam trend garis panjang yang lebih besar dan mempunyai jangka masa keuntungan yang panjang.

Analisis risiko

Risiko utama yang dihadapi oleh strategi ini adalah kesalahan penghakiman pembalikan trend, yang boleh menyebabkan kehilangan isyarat pembalikan atau menghasilkan isyarat pembalikan yang tidak perlu. Ini biasanya berlaku apabila harga berulang kali menyusun di sekitar kawasan sokongan atau rintangan utama.

Selain itu, penyetempatan yang terlalu longgar juga boleh menyebabkan kerugian meningkat. Penetapan ATR disesuaikan dengan turun naik pasaran, jadi penutupan yang lebih luas mungkin ditarik semasa kejadian pasaran yang tidak dijangka.

Untuk risiko di atas, anda boleh memendekkan kitaran pengiraan ATR atau menyesuaikan faktor perkalian untuk menghentikan kerosakan ATR. Anda juga boleh menambah petunjuk tambahan untuk menentukan kawasan rintangan sokongan utama, untuk mengelakkan isyarat yang salah di kawasan tersebut.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Menyesuaikan parameter indikator trend super, mengoptimumkan kitaran ATR dan kelipatan ATR, menjadikan garis trend super lebih halus.

  2. Menyesuaikan parameter untuk penunjuk kadar perubahan harga, mengoptimumkan kitaran dan nilai terhad kadar perubahan, mengurangkan isyarat palsu.

  3. Mencuba mekanisme penutupan yang berbeza, seperti menjejaki penutupan, atau mengoptimumkan penutupan penutupan tetap.

  4. Menambah penanda penilaian tambahan untuk mengenal pasti rintangan sokongan utama dan mengelakkan kesilapan penilaian pembalikan trend.

  5. Uji tetapan dan kesan parameter yang berbeza untuk mencari kombinasi parameter yang optimum.

  6. Untuk mengoptimumkan pengesanan semula, cari tetapan parameter terbaik.

ringkaskan

Strategi pembalikan garisan super trend secara keseluruhan adalah strategi pengesanan trend yang lebih stabil dan boleh dipercayai. Ia menggabungkan indikator super trend dan indikator kadar perubahan harga untuk penapisan, yang dapat mengenal pasti arah trend garisan tengah dan panjang dengan berkesan.

Kod sumber strategi
/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Super Trend Daily BF 🚀", 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 ///////////////
_1 = 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

///////////// Super Trend /////////////
_2 = input(false,  "══════ Super Trend ══════")
length = input(title="ATR Period", type=input.integer, defval=3)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=1.3)

atr = mult * atr(length)

longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop :=  close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > shortStopPrev ? 1 : dir == 1 and close < longStopPrev ? -1 : dir

///////////// Rate Of Change ///////////// 
_3 = input(false,  "══════ Rate of Change ══════")
source = close
roclength = input(30, "ROC Length",  minval=1)
pcntChange = input(6, "ROC % Change", minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

///////////////  Strategy  /////////////// 
long = dir == 1 and dir[1] == -1 and isMoving()
short = dir == -1 and dir[1] == 1 and isMoving()

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

/////////////// Dynamic ATR Stop Losses ///////////////
_4 = input(false,  "════════ Stop Loss ═══════")
SL_type = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type")
sl_inp = input(6.0, title='Fixed Stop Loss %') / 100
atrLkb = input(20, minval=1, title='ATR Stop Period')
atrMult = input(1.5, step=0.25, title='ATR Stop Multiplier') 
atr1 = atr(atrLkb)

longStop1 = 0.0
longStop1 :=  short_signal ? na : long_signal ? close - (atr1 * atrMult) : longStop1[1]
shortStop1 = 0.0
shortStop1 := long_signal ? na : short_signal ? close + (atr1 * atrMult) : shortStop1[1]

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L", strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop = SL_type == "Fixed" ? long_sl : longStop1, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop = SL_type == "Fixed" ? short_sl : shortStop1, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(isMoving() ? dir == 1 ? color.lime : color.red : color.white , transp=80)