Untitled
unknown
plain_text
10 months ago
3.9 kB
6
Indexable
//@version=5
indicator("Trend Line Based on Price", overlay=true)
// Pivot Ayarları
pivotLeg = input.int(20, "Pivot Uzunluğu", maxval = 100)
type Pivot
float value
int loc
var allPH = array.new<Pivot>() // Yüksek pivotlar
var allPL = array.new<Pivot>() // Düşük pivotlar
// Pivot noktalarını belirleme
ph = ta.pivothigh(high, pivotLeg, pivotLeg)
pl = ta.pivotlow(low, pivotLeg, pivotLeg)
// Pivot noktalarını ekleme
if not na(ph)
array.push(allPH, Pivot.new(ph, bar_index[pivotLeg]))
if not na(pl)
array.push(allPL, Pivot.new(pl, bar_index[pivotLeg]))
// Maximum pivot noktası kontrolü
var MAX_PIVOTS = 100
if array.size(allPH) > MAX_PIVOTS
array.shift(allPH)
if array.size(allPL) > MAX_PIVOTS
array.shift(allPL)
type lineArgs
int x1
int x2
float y1
float y2
color color
type Signal
bool valid
lineArgs args
drawLine(lineArgs args) =>
line.new(args.x1, args.y1, args.x2, args.y2,color = args.color, extend = extend.right, width = 3)
// Yükselen ve alçalan trendleri kontrol etme metodları
method isup(array<Pivot> this) =>
if array.size(this) < 2
Signal.new(false, lineArgs.new(0, 0, 0.0, 0.0, #00dd00))
else
curr = array.get(this, array.size(this) - 1)
prev = array.get(this, array.size(this) - 2)
valid = curr.value > prev.value
Signal.new(valid, lineArgs.new(prev.loc, curr.loc, prev.value, curr.value, #00dd00))
method isdown(array<Pivot> this) =>
if array.size(this) < 2
Signal.new(false, lineArgs.new(0, 0, 0.0, 0.0, #dd0000))
else
curr = array.get(this, array.size(this) - 1)
prev = array.get(this, array.size(this) - 2)
valid = curr.value < prev.value
Signal.new(valid, lineArgs.new(prev.loc, curr.loc, prev.value, curr.value, #dd0000))
type lineItem
line line
float x1
bool active
var bullishline = array.new<lineItem>()
var bearishline = array.new<lineItem>()
// Yükselen trend çizgileri
if array.size(allPL) >= 2
bullish = isup(allPL)
if bullish.valid
if array.size(bullishline) == 0
array.push(bullishline, lineItem.new(drawLine(bullish.args), bullish.args.x1, true))
else
last = array.get(bullishline, array.size(bullishline) - 1)
if bullish.args.x1 > last.x1
array.push(bullishline, lineItem.new(drawLine(bullish.args), bullish.args.x1, true))
// Alçalan trend çizgileri
if array.size(allPH) >= 2
bearish = isdown(allPH)
if bearish.valid
if array.size(bearishline) == 0
array.push(bearishline, lineItem.new(drawLine(bearish.args), bearish.args.x1, true))
else
last = array.get(bearishline, array.size(bearishline) - 1)
if bearish.args.x1 > last.x1
array.push(bearishline, lineItem.new(drawLine(bearish.args), bearish.args.x1, true))
// Yükselen trend çizgilerini güncelleme
if array.size(bullishline) > 0
for i = 0 to array.size(bullishline) - 1
item = array.get(bullishline, i)
if item.active
price = line.get_price(item.line, bar_index)
if close < price
line.set_extend(item.line, extend.none)
line.set_x2(item.line, bar_index)
line.set_y2(item.line, price)
item.active := false
// Alçalan trend çizgilerini güncelleme
if array.size(bearishline) > 0
for i = 0 to array.size(bearishline) - 1
item = array.get(bearishline, i)
if item.active
price = line.get_price(item.line, bar_index)
if close > price
line.set_extend(item.line, extend.none)
line.set_x2(item.line, bar_index)
line.set_y2(item.line, price)
item.active := false
Editor is loading...
Leave a Comment