
Strategi ini mengambil keuntungan dengan mengenal pasti saham yang meningkat dengan cepat dan membuat lebih banyak kedudukan apabila melampaui ketinggian baru. Strategi ini adalah strategi mengikuti trend.
Strategi ini berdasarkan kepada dua indikator:
RSI pantas: untuk menilai pergerakan harga dengan mengira perubahan turun naik 3 K garis terakhir. Apabila RSI pantas adalah lebih rendah daripada 10, ia dianggap sebagai saham dalam keadaan lebih rendah.
Penapisan utama: Mengira purata saiz entiti dalam 20 garis K terkini, apabila entiti harga lebih besar daripada entiti purata sebanyak 2.5 kali, dianggap sebagai penembusan yang berkesan.
Apabila RSI cepat adalah di bawah 10, dan penapis entiti berfungsi, buka lebih banyak kedudukan. Kemudian tetapkan titik berhenti tetap 20% apabila harga melebihi harga bukaan*(1 + Stop Stop Ratio) apabila, kedudukan kosong Stop Stop.
Kelebihan strategi ini adalah dapat menangkap peluang untuk memecahkan tahap permulaan trend, dengan menilai kawasan bawah dengan RSI yang cepat, penapisan entiti untuk mengelakkan pecah palsu. Mengambil kaedah penangguhan tetap untuk mengunci setiap keuntungan tunggal, anda dapat terus memahami trend.
Strategi ini mempunyai kelebihan berikut:
Menggunakan RSI pantas untuk menentukan kawasan di bawah yang lebih rendah, anda boleh meningkatkan ketepatan masuk.
Mekanisme penapisan utama dapat mengelakkan penembusan palsu yang disebabkan oleh gegaran.
Mengambil pendekatan peratusan tetap, anda boleh terus mendapat keuntungan dan memahami trend.
Strategi logiknya mudah difahami dan mudah dilaksanakan.
Struktur kodnya elegan, boleh diperluaskan, dan mudah dioptimumkan.
Dalam tempoh tinjauan semula, strategi ini memperoleh keuntungan positif yang stabil dan mempunyai kadar kemenangan yang tinggi.
Strategi ini juga mempunyai risiko yang perlu diperhatikan:
Strategi ini tidak mempunyai mekanisme stop loss, dan terdapat risiko peningkatan kerugian tunggal.
Penetapan yang tidak betul pada titik berhenti tetap boleh menyebabkan berhenti terlalu awal atau berhenti terlalu dalam.
Dalam keadaan yang tidak menentu, kerugian kecil berturut-turut boleh berlaku.
Tidak mengambil kira kos pembiayaan dan pembiayaan, pendapatan dalam masa nyata akan berkurangan.
Parameter strategi tidak dioptimumkan dengan baik, parameter perlu disesuaikan untuk pelbagai jenis.
Strategi ini boleh dioptimumkan dengan:
Menambah mekanisme penangguhan kerugian untuk mengawal kerugian tunggal.
Mengoptimumkan titik tolak untuk mengesan trend secara dinamik.
Mengoptimumkan penilaian penembusan, meningkatkan ketepatan kemasukan.
Tambah modul pengurusan kedudukan untuk mengoptimumkan kedudukan.
Tambah modul pengoptimuman parameter varieti untuk mengoptimumkan parameter yang berbeza secara automatik.
Menambah syarat penapisan untuk mengelakkan kerugian apabila pasaran terlalu bergolak.
Pertimbangkan untuk menambah modul pengurusan kos purata kedudukan.
Strategi ini secara keseluruhannya adalah strategi trend-following yang sangat ringkas dan elegan. Ia menggunakan RSI yang cepat untuk menilai ketinggalan, penapisan entiti untuk menentukan penembusan yang berkesan, dan mengambil titik berhenti tetap untuk mendapatkan keuntungan yang stabil. Walaupun terdapat beberapa ruang yang boleh dioptimumkan, strategi ini bertindak balas dengan cepat, sesuai untuk menangkap situasi yang berubah dengan cepat.
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// this is based on https://www.tradingview.com/v/PbQW4mRn/
strategy(title = "ONLY LONG V4 v1", overlay = true, initial_capital = 1000, pyramiding = 1000,
calc_on_order_fills = false, calc_on_every_tick = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 50, commission_value = 0.075)
//study(title = "ONLY LONG V4 v1", overlay = true)
//Fast RSI
src = close
fastup = rma(max(change(src), 0), 3)
fastdown = rma(-min(change(src), 0), 3)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
//Body Filter
body = abs(close - open)
abody = sma(body, 20)
mac = sma(close, 20)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)
up = close < open and len > sma * 2 and min < min[1] and fastrsi < 10 and body > abody * 2.5
// Strategy
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
var bool longCondition = na
longCondition := up == 1 ? 1 : na
// Get the price of the last opened long
var float last_open_longCondition = na
last_open_longCondition := longCondition ? close : nz(last_open_longCondition[1])
// Get the bar time of the last opened long
var int last_longCondition = 0
last_longCondition := longCondition ? time : nz(last_longCondition[1])
// Take profit
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
tp = input(20, "TAKE PROFIT %", type = input.float, minval = 0, step = 0.5)
long_tp = crossover(high, (1+(tp/100))*last_open_longCondition) and not longCondition
// Get the time of the last tp close
var int last_long_tp = na
last_long_tp := long_tp ? time : nz(last_long_tp[1])
Final_Long_tp = long_tp and last_longCondition > nz(last_long_tp[1])
// Count your long conditions
var int sectionLongs = 0
sectionLongs := nz(sectionLongs[1])
var int sectionTPs = 0
sectionTPs := nz(sectionTPs[1])
// Longs Counter
if longCondition
sectionLongs := sectionLongs + 1
sectionTPs := 0
if Final_Long_tp
sectionLongs := 0
sectionTPs := sectionTPs + 1
// Signals
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
// Long
// label.new(
// x = longCondition[1] ? time : na,
// y = na,
// text = 'LONG'+tostring(sectionLongs),
// color=color.lime,
// textcolor=color.black,
// style = label.style_labelup,
// xloc = xloc.bar_time,
// yloc = yloc.belowbar,
// size = size.tiny)
// Tp
// label.new(
// x = Final_Long_tp ? time : na,
// y = na,
// text = 'PROFIT '+tostring(tp)+'%',
// color=color.orange,
// textcolor=color.black,
// style = label.style_labeldown,
// xloc = xloc.bar_time,
// yloc = yloc.abovebar,
// size = size.tiny)
ltp = iff(Final_Long_tp, (last_open_longCondition*(1+(tp/100))), na), plot(ltp, style=plot.style_cross, linewidth=3, color = color.white, editable = false)
// Backtesting
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
testStartYear = input(2019, "BACKTEST START YEAR", minval = 1, maxval = 2222)
testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12)
testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
strategy.entry("long", strategy.long, when = longCondition and (time >= testPeriodStart))
strategy.exit("TP", "long", limit = (last_open_longCondition*(1+(tp/100))))
// Alerts
// ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
alertcondition(longCondition[1], title="Long Alert", message = "LONG")
alertcondition(Final_Long_tp, title="Long TP Alert", message = "LONG TP")