Untitled
unknown
plain_text
a month ago
3.9 kB
43
Indexable
//@version=5 indicator("Oto trend", 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