Strategi Perdagangan Volume Rekursif


Tarikh penciptaan: 2024-01-31 16:56:31 Akhirnya diubah suai: 2024-01-31 16:56:31
Salin: 0 Bilangan klik: 596
1
fokus pada
1617
Pengikut

Strategi Perdagangan Volume Rekursif

Gambaran keseluruhan

Strategi ini adalah strategi trend-following dan penembusan yang berdasarkan kepada indikator pita berulang yang dibangunkan oleh alexgrover. Strategi ini menggunakan indikator pita berulang untuk menentukan trend harga dan tahap rintangan sokongan utama, digabungkan dengan penyaringan penembusan palsu oleh syarat momentum, untuk mencapai kemasukan yang rendah tetapi berkualiti tinggi.

Prinsip Strategi

Pengiraan Indeks Talian Kembali

Penunjuk tali pengulangan terdiri daripada tali atas, tali bawah dan garis tengah. Cara pengiraan indikator adalah:

Talian atas = nilai maksimum ((talian atas garisan K terdahulu, harga penutupan + n*kadar turun naik) Bahagian bawah = nilai minimum ((Bahagian bawah garis K sebelumnya, harga penutupan - n*kadar turun naik)
Garis tengah = (garis atas + garis bawah) / 2

n adalah faktor skala, kadar turun naik boleh dipilih ATR, standard deviation, saluran rata-rata dan kaedah RFV khas. Sensitiviti parameter panjang mengawal indikator, nilai yang lebih besar, semakin tidak mudah untuk mencetuskan indikator.

Peraturan perdagangan strategik

Strategi pertama adalah untuk mengesan sama ada arah bawah terus naik dan arah atas terus turun untuk menghapuskan pecah palsu.

Apabila harga jatuh ke bawah, buat lebih banyak; apabila harga melebihi atas, buat lebih sedikit.

Selain itu, strategi ini juga menetapkan logik stop loss.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan kerangka kerja berulang, pengiraan penunjuk lebih cekap dan mengelakkan pengiraan berulang
  2. Parameter penunjuk boleh disesuaikan untuk menyesuaikan diri dengan keadaan pasaran yang berbeza
  3. Menggabungkan Trend dan Penembusan untuk Mengelakkan Penembusan Palsu
  4. Penapisan keadaan tenaga untuk memastikan kualiti isyarat dagangan

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Tetapan parameter yang tidak betul boleh menyebabkan frekuensi transaksi yang terlalu tinggi atau kualiti isyarat yang buruk
  2. Apabila trend kitaran besar berubah, kerugian yang lebih besar mungkin berlaku
  3. Kegagalan mengawal titik turun harga yang melampau boleh meningkatkan kerugian

Risiko ini boleh dikawal dengan mengoptimumkan parameter, menetapkan stop loss, dan meningkatkan titik slippage.

Arah pengoptimuman

Strategi ini juga boleh dioptimumkan dalam beberapa arah:

  1. Menggabungkan pelbagai indikator kitaran untuk perdagangan pelbagai kerangka masa
  2. Menambah modul pembelajaran mesin untuk mengoptimumkan parameter penyesuaian
  3. Menambah analisis hubungan kuantitatif untuk mencari kombinasi parameter terbaik
  4. Menggunakan pembelajaran mendalam untuk meramalkan laluan harga, meningkatkan ketepatan isyarat

ringkaskan

Strategi ini secara keseluruhan merupakan strategi trend-tracking yang sangat praktikal dan cekap. Ia menggabungkan kerangka berturun-turun untuk menjimatkan sumber pengiraan, menggunakan sokongan rintangan trend untuk menentukan arah trend besar, meningkatkan penyaringan penipuan penembusan keadaan momentum, untuk memastikan kualiti isyarat perdagangan.

Kod sumber strategi
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
// Original indicator by alexgrover
strategy('Extended Recursive Bands Strategy', overlay=true, commission_type=strategy.commission.percent,commission_value=0.06,default_qty_type =strategy.percent_of_equity,default_qty_value = 100,initial_capital =1000)
length = input.int(260, step=10, title='Length')
src = input(close, title='Source')
method = input.string('Classic', options=['Classic', 'Atr', 'Stdev', 'Ahlr', 'Rfv'], title='Method')
bandDirectionCheck = input.bool(true, title='Bands Hold Direction')
lookback = input(3)
//----
atr = ta.atr(length)
stdev = ta.stdev(src, length)
ahlr = ta.sma(high - low, length)
rfv = 0.
rfv := ta.rising(src, length) or ta.falling(src, length) ? math.abs(ta.change(src)) : rfv[1]
//-----
f(a, b, c) =>
    method == a ? b : c
v(x) =>
    f('Atr', atr, f('Stdev', stdev, f('Ahlr', ahlr, f('Rfv', rfv, x))))
//----
sc = 2 / (length + 1)
a = 0.
a := math.max(nz(a[1], src), src) - sc * v(math.abs(src - nz(a[1], src)))
b = 0.
b := math.min(nz(b[1], src), src) + sc * v(math.abs(src - nz(b[1], src)))
c = (a+b)/2

// Colors
beColor = #675F76
buColor = #a472ff

// Plots
pA = plot(a, color=color.new(beColor, 0), linewidth=2, title='Upper Band')
pB = plot(b, color=color.new(buColor, 0), linewidth=2, title='Lower Band')
pC = plot(c, color=color.rgb(120,123,134,0), linewidth=2, title='Middle Band')
fill(pC, pA, color=color.new(beColor,90))
fill(pC, pB, color=color.new(buColor,90))

// Band keeping direction
// By Adulari
longc = 0
shortc = 0
for i = 0 to lookback-1
    if b[i] > b[i+1]
        longc:=longc+1
    if a[i] < a[i+1]
        shortc:=shortc+1
bhdLong = if bandDirectionCheck
    longc==lookback
else
    true
bhdShort = if bandDirectionCheck
    shortc==lookback
else
    true

// Strategy
if b>=low and bhdLong
    strategy.entry(id='Long',direction=strategy.long)
if high>=a and bhdShort
    strategy.entry(id='Short',direction=strategy.short)

// TP at middle line
//if low<=c and strategy.position_size<0 and strategy.position_avg_price>close
    //strategy.exit(id="Short",limit=close)
//if high>=c and strategy.position_size>0 and strategy.position_avg_price<close
    //strategy.exit(id="Long",limit=close)