# --- VWMA Cross Alerts ---
def vwma = VWMA(Source, movAvgLength); # Uses your existing VWMA definition
# Detect crossovers
def crossAboveVWMA = close crosses above vwma;
def crossBelowVWMA = close crosses below vwma;
# --- Plot Visual Markers ---
plot upArrow = if crossAboveVWMA then low - (TickSize() * 10) else Double.NaN;
plot downArrow = if crossBelowVWMA then high + (TickSize() * 10) else Double.NaN;
upArrow.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
upArrow.SetDefaultColor(Color.CYAN);
upArrow.SetLineWeight(2);
downArrow.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
downArrow.SetDefaultColor(Color.MAGENTA);
downArrow.SetLineWeight(2);
# --- Alerts ---
Alert(crossAboveVWMA, "Price crossed ABOVE VWMA", Alert.BAR, Sound.Ring);
Alert(crossBelowVWMA, "Price crossed BELOW VWMA", Alert.BAR, Sound.Bell);