
Strategi perdagangan dua hala adalah strategi perdagangan garis pendek yang menggunakan pergerakan harga dan indikator trend pada masa yang sama. Strategi ini menggunakan pelbagai indikator seperti harga penutupan, harga pembukaan, saluran harga, RSI cepat untuk menghasilkan isyarat perdagangan.
Strategi ini digunakan untuk berdagang berdasarkan beberapa kriteria berikut:
Saluran harga: Mengira harga tertinggi dan terendah dari 30 garis K yang lalu, untuk mendapatkan julat saluran. Apabila harga penutupan lebih tinggi daripada garis tengah saluran dianggap sebagai bullish, dan apabila harga penutupan lebih rendah daripada garis tengah saluran dianggap sebagai bearish.
RSI pantas: mengira nilai RSI pada 2 garis K, RSI di bawah 25 dianggap sebagai oversold dan di atas 75 dianggap sebagai overbought.
Penghakiman garis sinis: mengira saiz entiti 2 garis K terakhir. 2 garis sinis dianggap sebagai isyarat penurunan, 2 garis sinis dianggap sebagai isyarat kenaikan.
Syarat Hentikan Kerugian: Apabila kerugian mencapai peratusan tertentu, penutupan kerugian akan dipaksa.
Berdasarkan beberapa petunjuk penghakiman di atas, strategi ini dapat menguasai trend, momentum dan keadaan overbought dan oversold pada masa yang sama, menghasilkan isyarat perdagangan pada titik pembalikan, yang merupakan strategi perdagangan garis pendek yang tipikal.
Strategi ini mempunyai beberapa kelebihan:
Menggunakan pelbagai penunjuk untuk menilai, meningkatkan ketepatan isyarat. Penunjuk tunggal mudah menghasilkan isyarat palsu, penggunaan gabungan boleh saling mengesahkan, menapis beberapa bunyi bising.
RSI pantas lebih sensitif dan dapat menangkap titik perubahan tepat pada masanya. RSI biasa mudah terlewat dan terlepas masa masuk yang terbaik.
Parameter strategi telah diuji dan dioptimumkan beberapa kali untuk mencapai kestabilan yang tinggi. Ia boleh dipercayai dalam pelbagai jenis dan tempoh masa.
Mekanisme Henti Kerosakan Otomatik mengawal kerugian. Tidak dijejaki tanpa had, dapat mengurangkan kerugian melebihi jangkaan.
Strategi ini juga mempunyai risiko yang perlu diperhatikan:
Penetapan parameter saluran harga yang tidak betul boleh menyebabkan kejutan. Jika jarak saluran dipilih terlalu kecil, ia mudah berlaku untuk pecah palsu.
Tempoh pegangan tunggal mungkin terlalu lama. Apabila trend sangat kuat, tempoh pegangan akan melebihi jangkaan.
Penetapan titik hentian yang tidak betul juga akan meningkatkan kerugian. Parameter ini perlu disesuaikan dengan berhati-hati, terlalu besar atau terlalu kecil tidak baik.
Untuk risiko di atas, ia boleh dielakkan dan dikurangkan dengan menyesuaikan parameter laluan, mengoptimumkan masa masuk, dan secara dinamik menyesuaikan titik berhenti.
Strategi ini juga boleh dioptimumkan dengan cara berikut:
Menambah algoritma pembelajaran mesin untuk mengoptimumkan parameter secara automatik. Anda boleh melatih strategi yang lebih pintar dan beradaptasi.
Ia juga boleh digunakan untuk membuat keputusan perdagangan yang lebih baik dengan menggabungkan lebih banyak sumber data, seperti maklumat berita, yang dapat meningkatkan ketepatan isyarat.
Membangunkan mekanisme pengurusan kedudukan dinamik yang secara automatik menyesuaikan kedudukan mengikut keadaan pasaran. Ia boleh mengawal risiko.
Menambah perdagangan Arbitrage Futures, memperluaskan ruang lingkup strategi. Ini boleh menghasilkan keuntungan mutlak yang lebih tinggi.
Strategi ini menggunakan pelbagai kaedah teknikal seperti penembusan harga, isyarat petunjuk, dan penarikan kerugian. Ia mempunyai prestasi yang baik dalam proses pengulangan dan saham, dengan kestabilan yang tinggi. Dengan perkembangan teknologi algoritma dan data, strategi ini masih banyak ruang untuk terus dioptimumkan dan diperbaiki.
/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Price Channel Strategy v1.2", shorttitle = "Price Channel str 1.2", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 100000, title = "capital, %")
uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")
usersi = input(true, defval = true, title = "Use RSI strategy")
pch = input(30, defval = 30, minval = 2, maxval = 200, title = "Price Channel Period")
showcl = input(true, defval = true, title = "Price Channel")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
src = close
//Price channel
lasthigh = highest(src, pch)
lastlow = lowest(src, pch)
center = (lasthigh + lastlow) / 2
trend = low > center ? 1 : high < center ? -1 : trend[1]
col = showcl ? blue : na
col2 = showcl ? black : na
plot(lasthigh, color = col2, linewidth = 2)
plot(lastlow, color = col2, linewidth = 2)
plot(center, color = col, linewidth = 2)
//Bars
bar = close > open ? 1 : close < open ? -1 : 0
rbars = sma(bar, 2) == -1
gbars = sma(bar, 2) == 1
//Fast RSI
fastup = rma(max(change(src), 0), 2)
fastdown = rma(-min(change(src), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//Signals
body = abs(close - open)
abody = sma(body, 10)
up1 = rbars and close > center and uset
dn1 = gbars and close < center and uset
up2 = close <= lastlow and close < open and usect
dn2 = close >= lasthigh and close > open and usect
up3 = fastrsi < 25 and close > center and usersi
dn3 = fastrsi > 75 and close < center and usersi
exit = (((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2)
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
//Trading
if up1 or up2 or up3
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn1 or dn2 or dn3
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
strategy.close_all()