Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.darvas.app/llms.txt

Use this file to discover all available pages before exploring further.

What this builds

  • Automatic swing high and swing low detection
  • Each pivot gets a Line entity with style: "arrow.right" that projects forward
  • Price label on each line

Full script

// overlay = true
const leftBars  = input.int("Left bars",  5, { min: 1, max: 50 });
const rightBars = input.int("Right bars", 5, { min: 1, max: 50 });
const lineLen   = input.int("Line length (bars)", 50, { min: 5 });
const maxLines  = input.int("Max lines", 20, { min: 1, max: 50 });

const resistColor = input.color("Resistance color", "#ef4444CC");
const supportColor = input.color("Support color",   "#22c55eCC");

onBar(() => {
  const ph = ta.pivothigh(ctx.high, leftBars, rightBars);
  const pl = ta.pivotlow(ctx.low,   leftBars, rightBars);

  const pivotBar = ctx.i() - rightBars;

  if (!na(ph)) {
    Line(`sr_high_${pivotBar}`, {
      x1: pivotBar,
      y1: ph,
      x2: pivotBar + lineLen,
      y2: ph,
      color: resistColor,
      width: 1,
      style: "arrow.right",
      label: str.format("{}", math.round(ph, 1)),
    });
  }

  if (!na(pl)) {
    Line(`sr_low_${pivotBar}`, {
      x1: pivotBar,
      y1: pl,
      x2: pivotBar + lineLen,
      y2: pl,
      color: supportColor,
      width: 1,
      style: "arrow.right",
      label: str.format("{}", math.round(pl, 1)),
    });
  }
});

Dynamic keys

Each pivot gets its own unique key (sr_high_${pivotBar}) so old lines persist on the chart while new ones are added. This means the chart can accumulate many lines over time - use maxLines logic (not shown above) or a fixed-size key pool if you want to cap line count.

Capping old lines

To limit lines to the most recent maxLines pivots, maintain a counter and delete old ones:
let highCount = 0;

onBar(() => {
  const ph = ta.pivothigh(ctx.high, 5, 5);
  if (!na(ph)) {
    const pivotBar = ctx.i() - 5;
    const key = `ph_${pivotBar}`;

    Line(key, {
      x1: pivotBar, y1: ph,
      x2: pivotBar + 50, y2: ph,
      color: "#ef4444CC",
      style: "arrow.right",
    });

    highCount++;

    // Delete the line from 50 pivots ago
    const oldBar = pivotBar - 50 * 5; // approximate
    Line(`ph_${oldBar}`, { x1: 0, y1: 0, x2: 0, y2: 0, color: "#00000000" });
  }
});

Pivots

ta.pivothigh/pivotlow - the lag explained.

Line entity

Full Line options including arrow.right style.

str.*

str.format for price labels.