Strategi Pengenalan Momentum Breakout


Tarikh penciptaan: 2023-11-02 14:39:22 Akhirnya diubah suai: 2023-11-02 14:39:22
Salin: 0 Bilangan klik: 554
1
fokus pada
1617
Pengikut

Strategi Pengenalan Momentum Breakout

Gambaran keseluruhan

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.

Prinsip

Strategi ini berdasarkan kepada dua indikator:

  1. 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.

  2. 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.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan RSI pantas untuk menentukan kawasan di bawah yang lebih rendah, anda boleh meningkatkan ketepatan masuk.

  2. Mekanisme penapisan utama dapat mengelakkan penembusan palsu yang disebabkan oleh gegaran.

  3. Mengambil pendekatan peratusan tetap, anda boleh terus mendapat keuntungan dan memahami trend.

  4. Strategi logiknya mudah difahami dan mudah dilaksanakan.

  5. Struktur kodnya elegan, boleh diperluaskan, dan mudah dioptimumkan.

  6. Dalam tempoh tinjauan semula, strategi ini memperoleh keuntungan positif yang stabil dan mempunyai kadar kemenangan yang tinggi.

Analisis risiko

Strategi ini juga mempunyai risiko yang perlu diperhatikan:

  1. Strategi ini tidak mempunyai mekanisme stop loss, dan terdapat risiko peningkatan kerugian tunggal.

  2. Penetapan yang tidak betul pada titik berhenti tetap boleh menyebabkan berhenti terlalu awal atau berhenti terlalu dalam.

  3. Dalam keadaan yang tidak menentu, kerugian kecil berturut-turut boleh berlaku.

  4. Tidak mengambil kira kos pembiayaan dan pembiayaan, pendapatan dalam masa nyata akan berkurangan.

  5. Parameter strategi tidak dioptimumkan dengan baik, parameter perlu disesuaikan untuk pelbagai jenis.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan:

  1. Menambah mekanisme penangguhan kerugian untuk mengawal kerugian tunggal.

  2. Mengoptimumkan titik tolak untuk mengesan trend secara dinamik.

  3. Mengoptimumkan penilaian penembusan, meningkatkan ketepatan kemasukan.

  4. Tambah modul pengurusan kedudukan untuk mengoptimumkan kedudukan.

  5. Tambah modul pengoptimuman parameter varieti untuk mengoptimumkan parameter yang berbeza secara automatik.

  6. Menambah syarat penapisan untuk mengelakkan kerugian apabila pasaran terlalu bergolak.

  7. Pertimbangkan untuk menambah modul pengurusan kos purata kedudukan.

ringkaskan

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.

Kod sumber strategi
/*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")