Rotasi Momentum Melalui Kerangka Waktu Tren Mengikuti Strategi

Penulis:ChaoZhang, Tanggal: 2023-11-17 17:32:11
Tag:

img

Pengamatan

Strategi ini menggunakan kombinasi rata-rata bergerak dari kerangka waktu yang berbeda untuk mengidentifikasi pergantian tren pada grafik jam-jam besar dan menengah, dan untuk melakukan pelacakan tren yang berisiko rendah. Strategi ini memiliki keuntungan konfigurasi yang fleksibel, sederhana, dan efisiensi dana yang tinggi, yang cocok untuk pedagang yang memegang posisi jangka panjang dan menengah untuk mengikuti tren.

Pengertian Awal

Strategi ini menggunakan tiga garis rata-rata bergerak 5, 20, dan 40 hari untuk menentukan kombinasi urutan tren dalam kerangka waktu yang berbeda.

Secara khusus, melewati garis cepat 5 hari dengan garis tengah 20 hari dianggap sebagai sinyal kenaikan garis pendek, dan melewati garis lambat 20 hari dengan garis tengah 40 hari dianggap sebagai sinyal kenaikan garis tengah. Ketika garis 3 cepat > 20 hari > 40 hari, dianggap sebagai siklus multi-head; ketika garis 3 cepat > 20 hari > 40 hari, dianggap sebagai siklus kosong.

Dengan demikian, berdasarkan arah tren siklus besar, kemudian dikombinasikan dengan kekuatan siklus kecil untuk mendeteksi entri tertentu. Artinya, hanya dengan tren besar yang seragam dan siklus kecil yang kuat, posisi dapat dibuka, yang dapat secara efektif menyaring terbalik palsu terobosan, untuk mencapai operasi win-rate tinggi.

Selain itu, strategi ini juga menggunakan ATR stop loss untuk mengendalikan risiko investasi tunggal dan meningkatkan tingkat keuntungan lebih lanjut.

Analisis Keunggulan

  • Konfigurasi fleksibel, pengguna dapat menyesuaikan parameter rata-rata bergerak sendiri untuk menyesuaikan dengan varietas dan preferensi perdagangan yang berbeda

  • Perangkat lunak ini sangat mudah untuk digunakan oleh pengguna baru.

  • Dengan menggunakan dana yang efisien, Anda dapat memanfaatkan pengaruh dana secara maksimal.

  • Pengendalian risiko, mekanisme stop loss yang efektif untuk mencegah kerugian besar

  • Kemampuan untuk mengikuti tren yang kuat, dan keuntungan yang berkelanjutan setelah siklus besar menentukan arah

  • Tingkat kemenangan yang lebih tinggi, kualitas sinyal yang lebih baik, dan kesalahan-kesalahan yang lebih sedikit

Risiko dan Perbaikan

  • Pengertian siklus besar tergantung pada susunan garis rata-rata pergeseran, ada risiko kesalahan pengertian yang tertunda

  • Deteksi intensitas siklus kecil hanya dengan satu garis K, mungkin dipicu lebih awal, dapat rileks dengan tepat

  • Stop loss yang tetap dan dapat dioptimalkan untuk stop loss dinamis

  • Anda dapat mempertimbangkan untuk menambahkan filter tambahan, seperti energi volume transaksi, dll.

  • Anda dapat mencoba kombinasi parameter rata-rata bergerak yang berbeda untuk mengoptimalkan strategi

Pengamatan

Strategi ini mengintegrasikan analisis multi-frame waktu dan manajemen stop loss untuk mencapai perdagangan trend tracking yang berisiko rendah. Dengan menyesuaikan parameter, strategi ini dapat diterapkan pada berbagai varietas untuk memenuhi kebutuhan para pengikut tren. Strategi ini memberikan keputusan perdagangan yang lebih kuat dan sinyal yang lebih efisien dibandingkan dengan sistem frame waktu tunggal tradisional. Secara keseluruhan, strategi ini memiliki kemampuan adaptasi pasar dan prospek pertumbuhan yang baik.

Gambaran umum

Strategi ini menggunakan kombinasi rata-rata bergerak di seluruh kerangka waktu untuk mengidentifikasi rotasi tren pada grafik per jam, harian dan mingguan. Ini memungkinkan tren berisiko rendah setelah perdagangan. Strategi ini fleksibel, mudah diterapkan, efisien modal dan cocok untuk pedagang tren jangka menengah dan panjang.

Logika Perdagangan

Strategi ini menggunakan rata-rata bergerak 5, 20 dan 40 hari untuk menentukan keselarasan tren di berbagai kerangka waktu. Berdasarkan konsistensi antara kerangka waktu yang lebih besar dan lebih kecil, ia mengidentifikasi siklus bullish dan bearish.

Secara khusus, penyeberangan MA cepat 5 hari di atas MA menengah 20 hari menunjukkan tren naik dalam jangka pendek. Penyeberangan MA menengah 20 hari di atas MA lambat 40 hari menandakan tren naik dalam jangka menengah. Ketika MA cepat, menengah dan lambat selaras positif (5 hari > 20 hari > 40 hari), itu adalah siklus bull. Ketika mereka selaras negatif (5 hari < 20 hari < 40 hari), itu adalah siklus bear.

Dengan menentukan arah dari siklus yang lebih besar dan mengkonfirmasi kekuatan pada siklus yang lebih kecil, strategi ini membuka posisi hanya ketika tren utama dan momentum kecil sejajar.

Strategi ini juga memanfaatkan ATR trailing stops untuk mengendalikan risiko perdagangan tunggal dan meningkatkan profitabilitas.

Keuntungan

  • Konfigurasi yang fleksibel sesuai dengan instrumen dan gaya perdagangan yang berbeda

  • Sederhana untuk diterapkan bahkan untuk pedagang pemula

  • Efisiensi modal yang tinggi untuk memaksimalkan leverage

  • Kontrol risiko yang efektif untuk menghindari kerugian yang signifikan

  • Tren kuat menyusul kemampuan untuk keuntungan berkelanjutan

  • Tingkat kemenangan tinggi karena sinyal yang kuat dan lebih sedikit whipsaws

Risiko dan Peningkatan

  • MA crossovers mungkin terlambat dan menyebabkan terlambat trend deteksi

  • Deteksi kekuatan lilin tunggal bisa memicu awal masuk, kondisi rileks

  • Pembuatan ATR stop loss, dioptimalkan ke dynamic stop

  • Pertimbangkan untuk menambahkan filter tambahan seperti volume

  • Jelajahi parameter MA yang berbeda untuk optimasi

Kesimpulan

Strategi ini mengintegrasikan beberapa analisis jangka waktu dan manajemen risiko untuk tren berisiko rendah setelah perdagangan. Dengan menyesuaikan parameter, dapat disesuaikan dengan instrumen yang berbeda agar sesuai dengan pedagang tren. Dibandingkan dengan sistem jangka waktu tunggal, ia membuat keputusan perdagangan yang lebih kuat dan menghasilkan sinyal efisiensi yang lebih tinggi. Kesimpulannya, strategi ini memiliki kemampuan adaptasi pasar dan potensi pengembangan yang baik.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © kgynofomo

//@version=5
strategy(title="[Salavi] | Andy Advance Pro Strategy [BTC|M15]",overlay = true, pyramiding = 1,initial_capital = 10000, default_qty_type = strategy.cash,default_qty_value = 10000)

ema_short = ta.ema(close,5)
ema_middle = ta.ema(close,20)
ema_long = ta.ema(close,40)

cycle_1 = ema_short>ema_middle and ema_middle>ema_long
cycle_2 = ema_middle>ema_short and ema_short>ema_long
cycle_3 = ema_middle>ema_long and ema_long>ema_short
cycle_4 = ema_long>ema_middle and ema_middle>ema_short
cycle_5 = ema_long>ema_short and ema_short>ema_middle
cycle_6 = ema_short>ema_long and ema_long>ema_middle

bull_cycle = cycle_1 or cycle_2 or cycle_3
bear_cycle = cycle_4 or cycle_5 or cycle_6
// label.new("cycle_1")
// bgcolor(color=cycle_1?color.rgb(82, 255, 148, 60):na)
// bgcolor(color=cycle_2?color.rgb(82, 255, 148, 70):na)
// bgcolor(color=cycle_3?color.rgb(82, 255, 148, 80):na)
// bgcolor(color=cycle_4?color.rgb(255, 82, 82, 80):na)
// bgcolor(color=cycle_5?color.rgb(255, 82, 82, 70):na)
// bgcolor(color=cycle_6?color.rgb(255, 82, 82, 60):na)

// Inputs
a = input(2, title='Key Vaule. \'This changes the sensitivity\'')
c = input(7, title='ATR Period')
h = false

xATR = ta.atr(c)
nLoss = a * xATR

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)

buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below

barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop




atr = ta.atr(14)
atr_length = input.int(25)
atr_rsi = ta.rsi(atr,atr_length)
atr_valid = atr_rsi>50

long_condition =  buy and bull_cycle and atr_valid
short_condition =  sell and bear_cycle and atr_valid

Exit_long_condition = short_condition
Exit_short_condition = long_condition

if long_condition
    strategy.entry("Andy Buy",strategy.long, limit=close,comment="Andy Buy Here")

if Exit_long_condition
    strategy.close("Andy Buy",comment="Andy Buy Out")
    // strategy.entry("Andy fandan Short",strategy.short, limit=close,comment="Andy 翻單 short Here")
    // strategy.close("Andy fandan Buy",comment="Andy short Out")


if short_condition
    strategy.entry("Andy Short",strategy.short, limit=close,comment="Andy short Here")


// strategy.exit("STR","Long",stop=longstoploss)
if Exit_short_condition
    strategy.close("Andy Short",comment="Andy short Out")
    // strategy.entry("Andy fandan Buy",strategy.long, limit=close,comment="Andy 翻單 Buy Here")
    // strategy.close("Andy fandan Short",comment="Andy Buy Out")




inLongTrade = strategy.position_size > 0
inLongTradecolor = #58D68D
notInTrade = strategy.position_size == 0
inShortTrade = strategy.position_size < 0

// bgcolor(color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)
plotshape(close!=0,location = location.bottom,color = inLongTrade?color.rgb(76, 175, 79, 70):inShortTrade?color.rgb(255, 82, 82, 70):na)


plotshape(long_condition, title='Buy', text='Andy Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(short_condition, title='Sell', text='Andy Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)


//atr > close *0.01* parameter

// MONTHLY TABLE PERFORMANCE - Developed by @QuantNomad
// *************************************************************************************************************************************************************************************************************************************************************************
show_performance = input.bool(true, 'Show Monthly Performance ?', group='Performance - credits: @QuantNomad')
prec = input(2, 'Return Precision', group='Performance - credits: @QuantNomad')

if show_performance
    new_month = month(time) != month(time[1])
    new_year  = year(time)  != year(time[1])
    
    eq = strategy.equity
    
    bar_pnl = eq / eq[1] - 1
    
    cur_month_pnl = 0.0
    cur_year_pnl  = 0.0
    
    // Current Monthly P&L
    cur_month_pnl := new_month ? 0.0 : 
                     (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 
    
    // Current Yearly P&L
    cur_year_pnl := new_year ? 0.0 : 
                     (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1  
    
    // Arrays to store Yearly and Monthly P&Ls
    var month_pnl  = array.new_float(0)
    var month_time = array.new_int(0)
    
    var year_pnl  = array.new_float(0)
    var year_time = array.new_int(0)
    
    last_computed = false
    
    if (not na(cur_month_pnl[1]) and (new_month or barstate.islastconfirmedhistory))
        if (last_computed[1])
            array.pop(month_pnl)
            array.pop(month_time)
            
        array.push(month_pnl , cur_month_pnl[1])
        array.push(month_time, time[1])
    
    if (not na(cur_year_pnl[1]) and (new_year or barstate.islastconfirmedhistory))
        if (last_computed[1])
            array.pop(year_pnl)
            array.pop(year_time)
            
        array.push(year_pnl , cur_year_pnl[1])
        array.push(year_time, time[1])
    
    last_computed := barstate.islastconfirmedhistory ? true : nz(last_computed[1])
    
    // Monthly P&L Table    
    var monthly_table = table(na)
    
    if (barstate.islastconfirmedhistory)
        monthly_table := table.new(position.bottom_center, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1)
    
        table.cell(monthly_table, 0,  0, "",     bgcolor = #cccccc)
        table.cell(monthly_table, 1,  0, "Jan",  bgcolor = #cccccc)
        table.cell(monthly_table, 2,  0, "Feb",  bgcolor = #cccccc)
        table.cell(monthly_table, 3,  0, "Mar",  bgcolor = #cccccc)
        table.cell(monthly_table, 4,  0, "Apr",  bgcolor = #cccccc)
        table.cell(monthly_table, 5,  0, "May",  bgcolor = #cccccc)
        table.cell(monthly_table, 6,  0, "Jun",  bgcolor = #cccccc)
        table.cell(monthly_table, 7,  0, "Jul",  bgcolor = #cccccc)
        table.cell(monthly_table, 8,  0, "Aug",  bgcolor = #cccccc)
        table.cell(monthly_table, 9,  0, "Sep",  bgcolor = #cccccc)
        table.cell(monthly_table, 10, 0, "Oct",  bgcolor = #cccccc)
        table.cell(monthly_table, 11, 0, "Nov",  bgcolor = #cccccc)
        table.cell(monthly_table, 12, 0, "Dec",  bgcolor = #cccccc)
        table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999)
    
    
        for yi = 0 to array.size(year_pnl) - 1
            table.cell(monthly_table, 0,  yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
            
            y_color = array.get(year_pnl, yi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40)
            table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100, prec)), bgcolor = y_color, text_color=color.new(color.white, 0))
            
        for mi = 0 to array.size(month_time) - 1
            m_row   = year(array.get(month_time, mi))  - year(array.get(year_time, 0)) + 1
            m_col   = month(array.get(month_time, mi)) 
            m_color = array.get(month_pnl, mi) > 0 ? color.new(color.teal, transp = 40) : color.new(color.gray, transp = 40)
            
            table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100, prec)), bgcolor = m_color, text_color=color.new(color.white, 0))



Lebih banyak