0 beğenilme 0 beğenilmeme
358 kez görüntülendi

Merhaba, tradingview de kullandığım bu indikatörü Matriks versiyonuna uyarlamanız mümkün mü?

 

 

// A tool that automatically draws out trend lines by connecting the most recent fractals.

 

//@version=5

indicator("Trend [zaferhali]", format=format.price, precision=0, overlay=true, max_lines_count=500)

 

var int TYPE_UP = 1

var int TYPE_DOWN = -1

var string LINE_WIDTH1_STR = "Width 1"

var string LINE_WIDTH2_STR = "Width 2"

_get_width(string str_input) =>

switch str_input // {string:int}

LINE_WIDTH1_STR => 1

LINE_WIDTH2_STR => 2

 

// ----------------------------------------------------------------------------

// Settings:

// {

var string GROUP_FRACT = "Fractals"

var int n = input.int(10, title="Fractal Period", minval=2, group=GROUP_FRACT)

var color col_hl = input.color(color.blue, title="Plot:", inline="plot_low", group=GROUP_FRACT)

var bool show_hl = input.bool(true, title="HL", inline="plot_low", group=GROUP_FRACT)

var color col_ll = input.color(color.gray, title=", Plot:", inline="plot_low", group=GROUP_FRACT)

var bool show_ll = input.bool(false, title="LL", inline="plot_low", group=GROUP_FRACT)

var color col_lh = input.color(color.red, title="Plot:", inline="plot_high", group=GROUP_FRACT)

var bool show_lh = input.bool(true, title="LH", inline="plot_high", group=GROUP_FRACT)

var color col_hh = input.color(color.gray, title=", Plot:", inline="plot_high", group=GROUP_FRACT)

var bool show_hh = input.bool(false, title="HH", inline="plot_high", group=GROUP_FRACT)

 

var string GROUP_ATL = "Auto trendlines"

var string subgroup1 = "recent line"

var color ln_col_recent = input.color(color.new(color.purple, 0), title="Recent Line", group=GROUP_ATL, inline=subgroup1)

var int lnwidth_recent = _get_width(input.string(LINE_WIDTH1_STR, options=[LINE_WIDTH1_STR, LINE_WIDTH2_STR], title="", inline=subgroup1, group=GROUP_ATL))

var string subgroup2 = "historical line"

var color ln_col_prev = input.color(color.new(color.gray, 50), title="Historical Line", group=GROUP_ATL, inline=subgroup2)

var int lnwidth_prev = _get_width(input.string(LINE_WIDTH1_STR, options=[LINE_WIDTH1_STR, LINE_WIDTH2_STR], title="", inline=subgroup2, group=GROUP_ATL))

 

var int max_tl = input.int(1, title="Max pair of lines", maxval=250, minval=1, group=GROUP_ATL)*2

var string _str_extend = input.string("Right", options=["Right", "Both ways"], title="Which way to extend lines", group=GROUP_ATL)

var string str_extend = _str_extend == "Both ways" ? extend.both : extend.right

 

var bool show_crosses = input.bool(false, title="Show crosses", tooltip="Instances when closing price of a bar has crossed lower/upper trendlines", group=GROUP_ATL)

// }

 

// ----------------------------------------------------------------------------

// Fractal UDT and other relevant data structures:

// Handle fractals and trendlines associated with them

// {

type fractal

int up_or_down = na // either TYPE_UP or TYPE_DOWN

int xloc = na

float yloc = na

int xloc_parent = na

float yloc_parent = na

 

var fractal[] arr_fract = array.new<fractal>() // Can be used for multiple purposes such as:

// (a) connecting trendlines but added condition to skip X no. of fractals in between

// (b) create a zigzag, since knowing foo.parent's x and y

// ... possibilities are endless

 

var line[] arr_ln_up = array.new_line() // Array of lines, newest elements inserted to front

var line[] arr_ln_dn = array.new_line()

 

// @function init_fractal() returns instance of fractal that has been init'ed

init_fractal(int fract_type, int xloc, float yloc, int xparent, float yparent)=>

f = fractal.new()

f.up_or_down := fract_type

f.xloc := xloc

f.yloc := yloc

f.xloc_parent := xparent

f.yloc_parent := yparent

 

ln = line.new(xloc, yloc, xparent, yparent, xloc.bar_index, str_extend, color=ln_col_recent, style=line.style_dashed, width=lnwidth_recent)

if f.up_or_down == TYPE_UP

array.unshift(arr_ln_up, ln)

else if f.up_or_down == TYPE_DOWN

array.unshift(arr_ln_dn, ln)

array.unshift(arr_fract, f)

f // <- return

 

// @function drop_and_roll(new fractal) returns void

// Clean up: Drop oldest trendlines, change colors for previous trendline

drop_and_roll(fractal f) =>

arr_ln = f.up_or_down == TYPE_UP ? arr_ln_up : f.up_or_down == TYPE_DOWN ? arr_ln_dn : na

if array.size(arr_ln) > 1

line.set_color(array.get(arr_ln, 1), ln_col_prev)

line.set_width(array.get(arr_ln, 1), lnwidth_prev)

while array.size(arr_ln) > math.floor(max_tl/2)

line.delete(array.pop(arr_ln))

 

// @function draw_trendline() returns void

draw_trendline(fract_type, x2, y2, x1, y1) =>

f = init_fractal(fract_type, x2, y2, x1, y1)

drop_and_roll(f)

 

// } end of handle for fractals

 

// ----------------------------------------------------------------------------

// Fractals, implemented using ta.pivot high && low

// ----------------------------------------------------------------------------

 

// A Fractal is always a Pivot H/L (but a Pivot H/L is not always a Fractal):

float ph = ta.pivothigh(n, n)[1], bool upfract = not na(ph)

float pl = ta.pivotlow(n, n)[1], bool downfract = not na(pl)

 

alertcondition(not na(ph) or not na(pl), title="New trendline formed", message="New trendline formed")

 

// Pointers -> Recent fractals

// {

var float recent_dn1 = na, var int i_recent_dn1 = na

var float recent_up1 = na, var int i_recent_up1 = na

var float recent_dn2 = na, var int i_recent_dn2 = na

var float recent_up2 = na, var int i_recent_up2 = na

 

if downfract

recent_dn2:=recent_dn1, i_recent_dn2 := i_recent_dn1

recent_dn1:=low[n+1], i_recent_dn1 := bar_index-n-1

draw_trendline(TYPE_DOWN, i_recent_dn2, recent_dn2, i_recent_dn1, recent_dn1)

 

if upfract

recent_up2:=recent_up1, i_recent_up2 := i_recent_up1

recent_up1:=high[n+1], i_recent_up1 := bar_index-n-1

draw_trendline(TYPE_UP, i_recent_up2, recent_up2, i_recent_up1, recent_up1)

 

// }

 

// Plotting fractals

bool hh = upfract and recent_up1 > recent_up2 ? high[n+1] : na

bool lh = upfract and recent_up1 < recent_up2 ? high[n+1] : na

bool hl = downfract and recent_dn1 > recent_dn2 ? low[n+1] : na

bool ll = downfract and recent_dn1 < recent_dn2 ? low[n+1] : na

 

plotshape(show_hh and hh, style=shape.circle, size=size.tiny, offset=-n-1, title="HH", text="HH", location=location.abovebar, textcolor=col_hh, color=na, editable=false)

plotshape(show_lh and lh, style=shape.circle, size=size.tiny, offset=-n-1, title="LH", text="LH", location=location.abovebar, textcolor=col_lh, color=na, editable=false)

plotshape(show_ll and ll, style=shape.circle, size=size.tiny, offset=-n-1, title="LL", text="LL", location=location.belowbar, textcolor=col_ll, color=na, editable=false)

plotshape(show_hl and hl, style=shape.circle, size=size.tiny, offset=-n-1, title="HL", text="HL", location=location.belowbar, textcolor=col_hl, color=na, editable=false)

 

// ----------------------------------------------------------------------------

// Finding crosses between closing price & pair of most recent trendlines

// ----------------------------------------------------------------------------

 

// @function get_slope()

get_slope(xA, yA, xB, yB) =>

(yB - yA) / (xB - xA)

 

// Solving for price at current x (bar_index), given two pairs of fractals with x values < bar_index.

float m_dn = get_slope(i_recent_dn1, recent_dn1, i_recent_dn2, recent_dn2)

float y_dn = (m_dn * bar_index) + recent_dn1 - (m_dn * i_recent_dn1)

float m_up = get_slope(i_recent_up1, recent_up1, i_recent_up2, recent_up2)

float y_up = (m_up * bar_index) + recent_up1 - (m_up * i_recent_up1)

 

// Plotting crosses

bool cross_upper = ta.cross(close, y_up)

bool cross_lower = ta.cross(close, y_dn)

plotshape(show_crosses and cross_upper, title = "Crossed upper trendline", style = shape.xcross,

location = location.belowbar, color = color.new(color = color.blue, transp = 50), size = size.small)

plotshape(show_crosses and cross_lower, title = "Crossed lower trendline", style = shape.xcross,

location = location.abovebar, color = color.new(color = color.red, transp = 50), size = size.small)

 

alertcondition(cross_upper or cross_lower, title="Upper/lower trendline crossed", message="Upper/lower trendline crossed")

 

Indikator Builder kategorisinde (25 puan) tarafından | 358 kez görüntülendi

Bu soruya cevap vermek için lütfen giriş yapınız veya kayıt olunuz.

Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.



7,647 soru
7,642 cevap
4,448 yorum
11,120 kullanıcı