RedK Momentum Bars

Penulis:ChaoZhang, Tanggal: 2022-05-18 11:28:24
Tag:SMAEMAWMAHMA

Momentum Bars (Mo_Bars) menawarkan cara yang berbeda untuk memvisualisasikan momentum (relatif) - dan menggunakan beberapa konsep TA sederhana untuk memberikan perspektif yang berbeda tentang bagaimana kita membaca perubahan momentum dan menggabungkannya dalam perdagangan kita.

Ide di sini (dan naskah itu sendiri) benar-benar sangat sederhana, dan (sangat longgar) terinspirasi oleh Elder's Impulse System (EIS) - kemudian berevolusi untuk memanfaatkan beberapa konsep lain, dan menjadi kurang berantakan dan lebih mudah dibaca.

Pembangunan Mo_Bars

Konsep dasar menggunakan 3 garis rata-rata bergerak: baris pertama adalah MA yang relatif cepat dengan panjang pendek - bertindak sebagai garis pelacakan harga utama

baris kedua sedikit lebih lambat dari garis utama - 2 sampai 3 bar panjang - dan secara default akan menggunakan nilai terbuka sebagai sumber - ini bekerja lebih baik untuk mengidentifikasi ketika harga penutupan mulai bergerak lebih cepat daripada terbuka (seperti, bar lebih sering menutup lebih tinggi daripada mereka membuka) - garis ini bertindak sebagai garis sinyal - ada pengaturan tambahan untuk penundaan tambahan yang memanfaatkan rata WMA reguler - penundaan bertindak untuk memperbesar pergeseran relatif antara 2 MA

Untuk kedua MA ini, saya memilih untuk menggunakan RSS MA (Lazy Line) - jenis MA lainnya dapat digunakan, tetapi alasan saya menggunakan jenis MA itu secara khusus adalah bahwa ia bergerak gracefully - dan 2 Lazy Lines bergerak bersama meminimalkan whipsaws dari perubahan harga kecil - saya diuji dengan jenis MA lainnya dan menemukan bahwa RSS memiliki keuntungan di sana.

Garis ketiga adalah MA yang jauh lebih lambat (panjang 5 sampai 6 x garis cepat) - dan bertindak sebagai filter atau garis dasar. Ketika kita berada di atas garis itu, kita harus menyukai posisi panjang - kita berada di wilayah bull. Ketika kita berada di bawah garis itu kita menyukai posisi pendek, dan kita berada di wilayah bear. Sesuaikan garis ini sesuai dengan gaya perdagangan dan kerangka waktu Anda. (Saya memilih untuk menggunakan WMA sebagai jenis MA untuk garis filter... dan ada alasan yang baik untuk itu - yang saya akan melewatkan untuk saat ini - tetapi dalam versi masa depan, kita dapat menambahkan jenis MA yang dapat dipilih lainnya.)

Menggunakan Mo_Bars

pada tingkat yang sangat luas, kita dapat menggunakan Mo_Bars mirip dengan cara kita menggunakan MACD - keduanya berpusat dan osilator tak terbatas - perhatikan perbedaan bahwa Mo_Bars didasarkan pada 3 MAs bukan 2.

panjang bar Mo_Bar mencerminkan jarak antara MA utama dan sinyal MA - digambarkan relatif terhadap garis dasar (garis filter) - yang berarti bahwa panjang bar mewakili momentum relatif antara 2 MAs - The Mo_Bars kemudian berwarna dengan cara yang mencerminkan peningkatan atau penurunan nilai momentum itu (visual di sini mungkin terinspirasi oleh indikator lain yang baru-baru ini diterbitkan oleh salah satu penyihir kami terhormat - itu bekerja dengan sempurna - jadi kredit yang layak di sini:)

dalam istilah sederhana, jika MA utama berada di bawah sinyal MA, bilah merah - dan ketika MA utama berada di atas sinyal MA, bilah hijau - bilah putih biasanya muncul ketika ada perubahan yang terdeteksi dari arah momentum relatif (perhatikan bahwa ini tidak sama dengan arah tren - dan itulah yang membantu menunjukkan dan mengeksploitasi konvergensi dan divergensi - mirip dengan MACD)

  • dalam grafik di atas, saya mencatat beberapa contoh bagaimana memvisualisasikan momentum relatif dengan cara ini mengekspos daerah chop (Mo_Bars di atas nol tetapi berada di merah atau bergerak ke bawah, atau ketika Mo_Bars berada di bawah nol dan hijau atau bergerak ke atas) - konvergensi / divergensi dengan harga - dan bagaimana ini dapat bertindak untuk mengekspos kemungkinan perubahan potensial dalam tindakan harga atau tren.

  • ada banyak lagi yang bisa dimainkan dengan pengaturan ini - dan mungkin jika ada cukup minat mungkin ada posting khusus di masa depan tentang cara menggunakannya atau bahkan untuk mengembangkannya lebih lanjut - ada banyak potensi di sini, untuk menambahkan lebih banyak filter (mungkin berdasarkan volume), peringatan, sinyal... dll - jadi mari kita lihat minat :)

Berikut adalah pengaturan rinci (grafik atas) yang didasarkan pada Mo_Bars Pengaturan untuk MA pada grafik harga telah dicocokkan / disinkronkan dengan pengaturan Mo_Bars pada panel bawah untuk menunjukkan bagaimana skrip bekerja dan bagaimana menerjemahkan tindakan MA pada grafik harga ke apa yang kita lihat di bawah ini.

backtest

img


/*backtest
start: 2022-05-10 00:00:00
end: 2022-05-16 23:59:00
period: 3m
basePeriod: 1m
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/
// © RedKTrader

//@version=5
indicator('[dev]RedK Momentum Bars', shorttitle='RedK MoBars v3.0', explicit_plot_zorder = true, timeframe='', timeframe_gaps=false)

// A trading system composed of 2 short Lazy Lines (preferably one open and one close - 2-3 bars apart) and a WMA long filter 
// loosely inspired by Edler Impulse
// v2.0 cleaned up code and added MA options to be able to mix and match, and experiment with various setups 
// default values (my personal preference) remain the same as in v1.0 
// for example, some traders will consider "bear territory" only below SMA50, others will use EMA30 .. and so on.
// ---------------------------------------------------------------------------------------------------------------
// MoBars v3.0: 
// updated defaults to match the most common 3x MA cross-over set-up of SMA (10, 20, 50)
// updated visuals to push the 0 line to the background of the plot (using the explcit_plot_zorder param)
// and added alerts for crossing up, down and swing around the 0 line (the Bullish/Bearish Filter MA)

//==============================================================================
f_LazyLine(_data, _length) =>
    w1 = 0,     w2 = 0,     w3 = 0
    L1 = 0.0,   L2 = 0.0,   L3 = 0.0
    w = _length / 3

    if _length > 2
        w2 := math.round(w)
        w1 := math.round((_length - w2) / 2)
        w3 := int((_length - w2) / 2)

        L1 := ta.wma(_data, w1)
        L2 := ta.wma(L1, w2)
        L3 := ta.wma(L2, w3)
        
    else
        L3 := _data
        
    L3
//==============================================================================

// =============================================================================    
f_getMA(source, length, type) =>
    type == "SMA" ? ta.sma(source, length) : 
      type == "EMA" ? ta.ema(source, length) :
      type == "WMA" ? ta.wma(source, length) :
      type == "HMA" ? ta.hma(source, length) :
      f_LazyLine(source, length)
// =============================================================================    

// ------------------------------------------------------------------------------------------------
// Inputs
// Note, in v3.0, changed default lengths to 10, 20 and 50  -- and all MA types to SMA. 
// ------------------------------------------------------------------------------------------------

Fast_Src    = input.source(close,   title='Fast MA Source',          inline = 'Fast')
Fast_Length = input.int(10,          title = 'Length',   minval = 1, inline = 'Fast')
Fast_Type   = input.string('SMA', title = 'Type',                    inline = 'Fast',
  options = ['RSS_WMA', 'WMA', 'EMA', 'SMA', 'HMA'])

Slow_Src    = input.source(close,    title='Slow MA Source',         inline = 'Slow')
Slow_Length = input.int(20,          title='Length',     minval = 1, inline = 'Slow')
Slow_Type   = input.string('SMA', title = 'Type',                    inline = 'Slow',
  options = ['RSS_WMA', 'WMA', 'EMA', 'SMA', 'HMA'])

Slow_Delay  = input.int(3,          title='Delay (1 = None)',       minval = 1)

Fil_Length  = input.int(50,       title='Filter MA Length', minval = 1, inline = 'Filter')
Fil_Type    = input.string('SMA', title = 'Type',                   inline = 'Filter',
  options = ['RSS_WMA', 'WMA', 'EMA', 'SMA', 'HMA'])


// ------------------------------------------------------------------------------------------------
// Calculation
// ------------------------------------------------------------------------------------------------

Fast    = f_getMA(Fast_Src, Fast_Length, Fast_Type)
Slow    = f_getMA(Slow_Src, Slow_Length, Slow_Type)

Filter  = f_getMA(close, Fil_Length, Fil_Type)

Fast_M  = Fast - Filter
Slow_M  = Slow - Filter

Rel_M   = ta.wma(Slow_M, Slow_Delay)

// prep the Momentum bars
o = Rel_M
c = Fast_M
h = math.max(o, c)
l = math.min(o, c)

rising      = ta.change(c) > 0


// ------------------------------------------------------------------------------------------------
// Colors & Plots
// ------------------------------------------------------------------------------------------------

hline(0, title = 'Zero Line', color = color.blue, linestyle = hline.style_solid)

c_barup     = #11ff20ff
c_bardn     = #ff1111ff
c_bardj     = #ffffffff

c_barupb    = #1b5e20ff
c_bardnb    = #981919ff
c_bardjb    = #9598a1ff

barcolor    = c > o and rising ? c_barup : c < o and not rising ? c_bardn : c_bardj
borcolor    = c > o and rising ? c_barupb : c < o and not rising ? c_bardnb : c_bardjb
//plotcandle(o, h, l, c, 'MoBars', barcolor, barcolor, bordercolor = borcolor)


// ===========================================================================================================
//      v3.0 adding alerts 
// these alerts will trigger as soon as the Momentum Bar touches above the filter line 
// this approach can lead to "false signals" but also has an advantage (of alerting to a possible mood/mode change)
// another option - maybe in an updated version - could be to trigger alerts *only* when the full Momentum Bar completely clears the filter line (above or below)
// and it's easy to make that a user choice in the study inputs
// ===========================================================================================================

Alert_up    = ta.crossover(h,0)
Alert_dn    = ta.crossunder(l,0)
Alert_swing = Alert_up or Alert_dn

// "." in alert title for the alerts to show in the right order up/down/swing 
alertcondition(Alert_up,    ".   MoBars Crossing 0 Up",         "MoBars Up - Bullish Mode Detected!")
alertcondition(Alert_dn,    "..  MoBars Crossing 0 Down",       "MoBars Down - Bearish Mode Detected!")
alertcondition(Alert_swing, "... MoBars Crossing 0",            "Mobars Swing - Possible Reversal Detected!")



if Alert_up
    strategy.entry("Enter Long", strategy.long)
else if Alert_dn
    strategy.entry("Enter Short", strategy.short)

Berkaitan

Lebih banyak