Strategi perdagangan kuantitatif tekanan dua arah


Tarikh penciptaan: 2023-11-02 13:56:23 Akhirnya diubah suai: 2023-11-02 13:56:23
Salin: 0 Bilangan klik: 633
1
fokus pada
1617
Pengikut

Strategi perdagangan kuantitatif tekanan dua arah

Gambaran keseluruhan

Strategi perdagangan kekuatan tekanan dua arah adalah strategi trend pengesanan yang menggabungkan penunjuk rawak dan penunjuk kuantiti. Strategi ini menggunakan garis K dan D penunjuk rawak dan garis kuantiti untuk menghasilkan isyarat beli dan jual, ditambah dengan garpu emas dan garpu mati garpu untuk menghasilkan isyarat tambahan.

Prinsip Strategi

Isyarat untuk membeli

Logik utama yang mencetuskan isyarat pembelian adalah:

  1. Garis K dan Garis D sama-sama menembusi kawasan oversold (contohnya 20), dan menghasilkan persilangan ke atas, dan Garis K dan Garis D sama-sama berada dalam trend menaik

  2. Jumlah transaksi melebihi tahap tertentu (contohnya 1.4 kali jumlah transaksi rata-rata)

  3. Harga penutupan lebih tinggi daripada harga pembukaan (garis K putih)

Isyarat pembelian tambahan mungkin datang dari:

  1. Garpu rata-rata: melalui EMA yang perlahan pada EMA yang cepat, dan kedua-dua garis rata-rata naik pada masa yang sama

  2. Garis K dan Garis D secara serentak memasuki kawasan oversold dari paras rendah (contohnya naik dari bawah 20 ke dalam 20 hingga 80)

Jual isyarat

Logik utama yang mencetuskan isyarat menjual adalah:

  1. Garis K dan Garis D memasuki kawasan terjual lebih (contohnya 80)

  2. Fork mati rata-rata: EMA laju di bawah EMA perlahan

  3. Garis bawah K melintasi Garis D, dan Garis K dan Garis D sama-sama dalam trend menurun

Isyarat berhenti

Tetapkan peratusan tertentu (contohnya 6%) daripada harga beli sebagai garis stop loss, dan jika harga jatuh di bawah garis ini, ia akan mencetuskan stop loss dan menjual.

Analisis kelebihan strategi

  • Mengelakkan isyarat palsu dengan menggunakan penunjuk rawak ganda
  • Gabungan penapisan bunyi lalu lintas untuk memastikan trend
  • Menambah ketepatan dengan pelbagai isyarat
  • Garis rata membantu menentukan arah trend besar
  • Tetapkan strategi kawalan risiko

Kelebihan 1: Penunjuk rawak berganda mengelakkan isyarat palsu

Tanda rawak tunggal boleh menghasilkan banyak isyarat palsu. Strategi ini menggunakan gabungan dua tanda rawak K dan D (rata-rata bergerak garis K) yang dapat menyaring isyarat palsu dengan berkesan dan memastikan kebolehpercayaan isyarat.

Kelebihan 2: Penapisan bunyi lalu lintas untuk memastikan trend

Penambahan syarat jumlah transaksi sebagai kriteria penilaian tambahan, yang memerlukan jumlah transaksi melebihi tahap tertentu, untuk menyaring titik jual beli bukan trend yang rendah, mengurangkan risiko pegangan.

Kelebihan 3: Tambahan pelbagai isyarat, meningkatkan ketepatan

Strategi ini menggabungkan beberapa isyarat beli dan jual dalam bentuk acak, kuantiti, dan rata-rata, yang perlu dicetuskan secara serentak untuk menghasilkan isyarat perdagangan yang sebenar. Pelbagai isyarat yang disusun dapat meningkatkan kebolehpercayaan isyarat.

Kelebihan 4: Garis rata membantu menentukan arah trend besar

Menambahkan peraturan penghakiman garis rata-rata, misalnya hanya mempertimbangkan isyarat beli apabila garis rata-rata naik secara serentak. Ini dapat mengelakkan pembelian berlawanan atau puncak, dan menilai trend dari jangka masa yang besar.

Kelebihan 5: Setting Stop Loss Strategy dan Kawalan Risiko

Strategi ini mengandungi reka bentuk isyarat hentian, yang secara automatik berhenti jika harga jatuh di bawah satu peratusan pembelian. Ini dapat mengawal kerugian maksimum perdagangan tunggal dengan berkesan.

Analisis risiko

  • Parameter strategi memerlukan penyesuaian yang teliti, dan penyesuaian yang tidak betul boleh menyebabkan prestasi yang buruk
  • Tetapan titik henti perlu mengambil kira risiko melompat
  • Risiko kecairan dalam varieti yang diperdagangkan
  • Berhati-hati dengan risiko urutan dalam indikator pelbagai kitaran masa

Risiko 1: Parameter strategi memerlukan pengendalian yang teliti

Strategi ini merangkumi beberapa parameter, seperti parameter penunjuk rawak, parameter rata-rata, dan parameter kuantiti yang dihasilkan. Parameter-parameter ini perlu dioptimumkan untuk pelbagai jenis, dan penyesuaian yang tidak betul boleh menyebabkan keputusan yang kurang baik.

Risiko 2: Tetapan titik henti perlu mengambil kira risiko melompat

Apabila menetapkan titik berhenti, anda perlu mempertimbangkan kemungkinan harga melompat. Jika titik berhenti terlalu dekat dengan harga beli, ia mungkin melompat menyebabkan berhenti yang tidak perlu.

Risiko 3: Perhatian terhadap risiko kecairan dalam jenis dagangan

Bagi jenis yang kurang bergerak, peraturan kuantiti perpindahan mungkin menapis terlalu banyak isyarat. Pada masa ini, anda perlu menurunkan had syarat kuantiti perpindahan.

Risiko 4: Risiko urutan bit yang perlu diperhatikan dalam pelbagai kitaran masa

Masalah ketidakselarasan urutan antara pelbagai petunjuk kitaran mungkin berlaku, yang boleh menjejaskan ketepatan isyarat. Perlu mengesahkan kesesuaian urutan titik isyarat.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Optimumkan parameter untuk meningkatkan kestabilan

  2. Menambah parameter penyesuaian dinamik kaedah pembelajaran mesin

  3. Optimumkan strategi berhenti kerugian untuk mengurangkan kadar berhenti kerugian

  4. Menambah lebih banyak syarat penapisan untuk mengurangkan jumlah transaksi

  5. Cuba strategi bersyarat atau berhenti untuk meningkatkan kadar pulangan

Arah 1: Optimumkan parameter untuk meningkatkan kestabilan

Parameter utama boleh dioptimumkan melalui kaedah yang lebih sistematik seperti algoritma genetik, memastikan parameter dapat memperoleh prestasi yang stabil dalam kitaran pasaran yang berbeza.

Arah 2: Menambah parameter penyesuaian dinamik kaedah pembelajaran mesin

Model boleh dilatih untuk menilai keadaan pasaran dalam masa nyata, dan menyesuaikan parameter strategi dengan itu, untuk mencapai optimasi dinamik parameter.

Arahan 3: Optimumkan strategi berhenti kerugian untuk mengurangkan kadar berhenti kerugian

Anda boleh mengkaji strategi penutupan kerugian yang lebih baik, mengurangkan kerugian yang tidak perlu dan meningkatkan ruang keuntungan sambil mengekalkan kawalan risiko.

Arah 4: Tambah lebih banyak syarat penapisan untuk mengurangkan jumlah transaksi

Memperkuat syarat penapisan dengan sewajarnya untuk mengurangkan jumlah transaksi, mengurangkan kesan kos transaksi, dan menjadikan setiap transaksi lebih baik.

Arahan 5: Cuba strategi bersyarat atau berhenti untuk meningkatkan kadar pulangan

Ia boleh direka mengikut ciri-ciri pasaran, strategi tunggal syarat atau strategi berhenti bergerak, sambil menjamin hentian kerugian, untuk memaksimumkan keuntungan.

ringkaskan

Strategi ini mempertimbangkan pelbagai aspek seperti penilaian trend, kawalan risiko, frekuensi perdagangan. Kelebihan utamanya adalah penunjuk acak ganda yang menggabungkan penilaian trend indikator kuantiti pertukaran, dan mekanisme hentian risiko yang terkawal.

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

//@version=3
// SW SVE - Stochastic+Vol+EMAs [Sergio Waldoke]
// Script created by Sergio Waldoke (BETA VERSION v0.5, fine tuning PENDING)
// Stochastic process is the main source of signals, reinforced on buying by Volume. Also by Golden Cross.
// Selling is determined by K and D entering overselling zone or EMA's Death Cross signal, the first occurring,
// and some other signals combined.
// Buy Long when you see a long buy arrow.
// Sell when you see a close arrow.
// This is a version to be tuned and improved, but already showing excelent results after tune some parameters
// according to the kind of market.
// Strategy ready for doing backtests.

// SVE SYSTEM DESIGN:
// Buy Signal Trigger:
// - Both Stoch <= 20 crossing up and both growing and green candle and Vol/sma vol >= 1.40 Avg Vol
//   or
// - Both Stoch growing up and Vol/sma vol >= 1.40 Avg Vol and green candle and
//   both prior Stoch crossing up
//   or
//   [OPTIONAL]: (Bad for BTC 2018, excelent for 2017)
// - Crossingover(fast_ema, slow_ema) and growing(fast_ema) and growing(slow_ema) and green candle

// Exit position:
// - Both Stoch <= 20 and Both Stoch were > 20 during position
//   or
// - CrossingUnder(Fast EMA, Medium EMA)
//   or   [OPTIONAL] (Better for BTC 2018, Worse for BNB 1H)
// - CrossingUnder(k, d) and (k and d starting over over_buying) and (k and d descending) and k crossing down over_buying line

//calc_on_every_tick=true,
//calc_on_order_fills=true,   (affects historical calculation, triggers in middle of the bar, may be better for automatic orders)
strategy("SW SVE - Stochastic+Vol+EMAs [Sergio Waldoke]", shorttitle="SW SVE", overlay=true, max_bars_back=5000,
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency="USD",
         commission_type=strategy.commission.percent, commission_value=0.25)

//Strategy Parameters
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2018, title = "From Year", minval = 2009, maxval = 2200)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 2030, title = "To Year", minval = 2009, maxval = 2200)

//Indicator Parameters
//Original defaults for 4HS: 14, 3, 80, 20,   14, 23, 40,   20, 40,   3:
stoch_k = input(title="Stoch K",  defval=14, minval=1)
stoch_d = input(title="Stoch D",  defval=3, minval=1)
over_buying  = input(title="Stoch Overbuying Zone",  defval=80, minval=0, maxval=100)
over_selling = input(title="Stoch Overselling Zone",  defval=20, minval=0, maxval=100)

fast_ema_periods = input(title="Fast EMA (Death Cross)",  defval=14, minval=1, maxval=600)
slow_ema_periods = input(title="Slow EMA (Death Cross)",  defval=23, minval=1, maxval=600)
trend_ema_periods = input(title="Slowest EMA (Trend Test)",  defval=40, minval=1, maxval=600)

volume_periods = input(title="Volume Periods",  defval=20, minval=1, maxval=600)
volume_factor = input(title="Min Volume/Media Increase (%)",  defval=80, minval=-100) / 100 + 1

threshold_sl_perc = input(title="[Sell Trigger] Stop Loss Threshold %", defval=6.0, type=float, minval=0, maxval=100)

//before_buy = input(title="# Growing Before Buy",  defval=2, minval=1)
//before_sell = input(title="# Decreasing Before Sell",  defval=1, minval=1)
//stepsignal = input(title="Show White Steps", type=bool, defval=true)
//steps_base = input(title="White Steps Base",  defval=242, minval=0)

//Signals
fast_ema = ema(close, fast_ema_periods)
slow_ema = ema(close, slow_ema_periods)
trend_ema = ema(close, trend_ema_periods)
k = stoch(close, high, low, stoch_k)
d = sma(k, stoch_d)
vol_ma = sma(volume, volume_periods)

//REVIEW CONSTANT 1.75:
in_middle_zone(a) => a > over_selling * 1.75 and a < over_buying
growing(a) => a > a[1] 

was_in_middle_zone = k == d
was_in_middle_zone := was_in_middle_zone[1] or in_middle_zone(k) and in_middle_zone(d)

//Buy Signal Trigger:
//- Both Stoch <= 20 crossing up and both growing and 
//  green candle and Vol/sma vol >= 1.40 Avg Vol
buy = k <= over_selling and d <= over_selling and crossover(k, d) and growing(k) and growing(d) and
      close > open and volume/vol_ma >= volume_factor

//or
//- Both Stoch growing up and Vol/sma vol >= 1.40 Avg Vol and green candle and
//  both prior Stoch crossing up
buy := buy or (growing(k) and growing(d) and volume/vol_ma >= volume_factor and close > open and
              crossover(k[1], d[1]) )
//Worse:
//              (crossover(k[1], d[1]) or (crossover(k, d) and k[1] <= over_selling and d[1] <= over_selling) ) )

//or
//  [OPTIONAL]: (Bad for BTC 2018, excelent for 2017)
//- Crossingover(fast_ema, slow_ema) and growing(fast_ema) and growing(slow_ema) and green candle
buy := buy or (crossover(fast_ema, slow_ema) and growing(fast_ema) and growing(slow_ema) and close > open)


//Debug:
//d1 = close > open  ? 400 : 0
//plot(d1+5200, color=white, linewidth = 3, style = stepline)

//Exit position:
//- Both Stoch <= 20 and Both Stoch were > 20 during position
sell = k <= over_selling and d <= over_selling and was_in_middle_zone

//  or
//- CrossingUnder(Fast EMA, Medium EMA)
sell := sell or crossunder(fast_ema, slow_ema)

//  or  [OPTIONAL] (Better for BTC 2018, Worse for BNB 1H)
//- CrossingUnder(k, d) and (k and d starting over over_buying) and (k and d descending) and k crossing down over_buying line
sell := sell or (crossunder(k, d) and k[1] >= over_buying and d[1] >= over_buying and
                 not growing(k) and not growing(d) and k <= over_buying)

color = buy ? green : red

bought_price = close
bought_price := nz(bought_price[1])

already_bought = false
already_bought := nz(already_bought[1], false)

//Date Ranges
buy  := buy and  not already_bought


//d1 = buy ? 400 : 0
//plot(d1+6500, color=white, linewidth = 3, style = stepline)

was_in_middle_zone := (not buy and was_in_middle_zone) or (in_middle_zone(k) and in_middle_zone(d))

already_bought   := already_bought[1] or buy
bought_price := buy ? close * (1 - threshold_sl_perc/100) : bought_price[1]
trigger_SL = close < bought_price[0]
sell := sell or trigger_SL

sell := sell and  
                 already_bought and not buy and (was_in_middle_zone or trigger_SL)

//plot((sell?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline)
                 
already_bought   := already_bought[0] and not sell
bought_price := sell ? 0 : bought_price[0]

//plot((was_in_middle_zone?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline)

was_in_middle_zone := not sell and was_in_middle_zone

//Plot signals
plot(fast_ema, title="Fast EMA", color=red, linewidth = 4)
plot(slow_ema, title="Slow EMA", color=blue, linewidth = 4)
plot(trend_ema, title="Trend EMA", color=yellow, linewidth = 4)

//Stop Loss
plot(bought_price, color=gray, linewidth=2, style=cross, join=true, title="Stop Loss")

//Y = stepsignal ? lowest(40) : na
//Y = steps_base
//plot(mysignal+Y, title="Steps", color=white, linewidth = 3, style = stepline)
//Unit steps - for debugging
//plot(mysteps+Y, title="Steps2", color=yellow, linewidth = 3, style = stepline)

//Bought or not - for debugging
//plot((already_bought?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline)
//plot((sell?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline)

plotshape(buy, title="Buy arrows", style=shape.arrowup, location=location.belowbar, color=color, text="Buy", textcolor=color, size=size.huge, transp=30)
plotshape(sell, title="Sell arrows", style=shape.arrowdown, location=location.abovebar, color=color, text="Sell", textcolor=color, size=size.huge, transp=30)

//if n>2000
strategy.entry("buy", strategy.long, when=buy)
strategy.close_all(when=sell)

//plot(strategy.equity, title="Equity", color=white, linewidth = 4, style = line)

//AlertS trigger
//msg = "[SW Magic Signals EMA] BUY/SELL Signal has been triggered." + "(" + tostring(fastema) + ", " + tostring(slowema) + ") on " + tickerid + ", " + period + "."
msg = "SW SVE BUY/SELL Signal has been triggered. (#, #) on EXCH:PAIR, period: #."

alertcondition(buy or sell, title="SW SVE (BUY/SELL SIGNAL)", message=msg)
alertcondition(buy, title="SW SVE (BUY SIGNAL)", message=msg)
alertcondition(sell, title="SW SVE (SELL SIGNAL)", message=msg)