9 & 20 EMA Cross Alert 9 and 20 EMA will be put on chart. Bull and bear signal will appear when EMAs cross. Alert is available when EMAs cross.
指标和策略
NQ - 4MAvg + CompositeNDFD, NDFI, NDOH, NDTH - 4 Nasdaq Moving Average indicators + a combined composite
Engulfing StrategyThis indicator has the following key features:
- Detects bullish and bearish engulfing candlestick patterns using a well-established price and body comparison logic.
- Incorporates a customizable moving average filter with multiple smoothing options to confirm trend direction.
- Highlights both the current and previous candles involved in the engulfing pattern by coloring them distinctly, improving visual clarity for reversal signals.
- Offers an interchangeable mode allowing the user to switch between a fully automated trading strategy (entries and exits) and a simple indicator mode (signal and color visualization only).
- Supports pyramiding positions and accounts for commissions and initial capital for realistic strategy testing.
- Uses modern Pine Script v5 functions and syntax for reliable and efficient execution.
- Provides clear visual bar colors for bullish (orange) and bearish (yellow) engulfing signals.
- Allows configuration of MA type and period, adapting to various trading styles and assets.
These features make it a versatile tool for traders seeking both visual confirmation and automated trade execution based on engulfing candle patterns combined with trend filtering.
by @Tumiza999
Day of Week LetterLetters printed on the Daily candle corresponding the day of the trading week it is on. Used for weekly range logic
Set it to 'bring to front' to see it
ATR + High/Lows//@version=6
indicator('ATR + Values', overlay = true)
// ========================
// === User Inputs ===
// ========================
showATR = input.bool(true, 'Show ATR/Move Table')
showHLR = input.bool(true, 'Show HL/R Table')
atrLength = input.int(14, 'ATR Period')
textColor = input.color(color.rgb(247, 242, 242), 'Default Text Color')
backgroundCol = input.color(color.rgb(0, 0, 0), 'Background Color')
rowOffset = input.int(0, 'Vertical Offset (rows)', minval = 0, maxval = 10)
colOffset = input.int(0, 'Horizontal Offset (columns)', minval = 0, maxval = 100)
var string tz = 'America/New_York'
// ========================
// === ATR / Move Logic ===
// ========================
dailyATRseries = request.security(syminfo.tickerid, 'D', ta.atr(atrLength), lookahead = barmerge.lookahead_off)
dailyATRprev = dailyATRseries
newDayID = year(time, tz) * 10000 + month(time, tz) * 100 + dayofmonth(time, tz)
var int lastDayID = na
var float dayHigh = na
var float dayLow = na
var float fixedATR = na
isNewSession = na(lastDayID) or newDayID != lastDayID
after4am = hour(time, tz) >= 4
firstBarAfter4 = isNewSession and after4am and not(hour(time , tz) >= 4 and newDayID == year(time , tz) * 10000 + month(time , tz) * 100 + dayofmonth(time , tz))
if firstBarAfter4
dayHigh := high
dayLow := low
lastDayID := newDayID
fixedATR := dailyATRprev
else
dayHigh := math.max(dayHigh, high)
dayLow := math.min(dayLow, low)
intradayRange = dayHigh - dayLow
moveBg = intradayRange > fixedATR ? color.new(color.red, 77) : color.new(color.teal, 74)
// ========================
// === ATR + Move Table ===
// ========================
var table atrTable = table.new(position.top_right, 1, 2, border_width = 1, border_color = color.rgb(255, 255, 255))
if barstate.islast and showATR
table.clear(atrTable, 0, 0)
// Row 0: ATR Value
table.cell(atrTable, 0, 0, str.tostring(fixedATR, format.mintick),
bgcolor=color.rgb(0, 0, 0),
text_color=color.rgb(247, 242, 242),
text_halign=text.align_center)
// Row 1: Move Value (colored)
table.cell(atrTable, 0, 1, str.tostring(intradayRange, format.mintick),
bgcolor=moveBg,
text_color=color.rgb(247, 242, 242),
text_halign=text.align_center)
else
table.clear(atrTable, 0, 0)
// ========================
// === HL / Range Logic ===
// ========================
prevHigh = high
prevLow = low
currHigh = high
currLow = low
rangeHL = currHigh - currLow
rangeHL1 = prevHigh - prevLow
col1Text = str.tostring(rangeHL1, '0.00')
col2Text = str.tostring(prevHigh, '0.00') + ' ' + str.tostring(prevLow, '0.00')
col3Text = str.tostring(currHigh, '0.00') + ' ' + str.tostring(currLow, '0.00')
col4Text = str.tostring(rangeHL, '0.00')
prevColor = close > open ? color.rgb(64, 224, 208) : color.rgb(253, 143, 100)
currColor = close > open ? color.rgb(64, 224, 208) : color.rgb(253, 143, 100)
// ========================
// === HL / Range Table ===
// ========================
var table hlTable = table.new(position.top_center, 4 + colOffset, rowOffset + 1)
if barstate.islast and showHLR
for row = 0 to rowOffset by 1
for col = 0 to 3 + colOffset by 1
table.cell(hlTable, col, row, '', bgcolor = na)
row = rowOffset
colStart = colOffset
table.cell(hlTable, colStart + 0, row, col1Text, text_color = textColor, bgcolor = backgroundCol, text_halign = text.align_center, text_size = size.large)
table.cell(hlTable, colStart + 1, row, col2Text, text_color = prevColor, bgcolor = backgroundCol, text_halign = text.align_center, text_size = size.normal)
table.cell(hlTable, colStart + 2, row, col3Text, text_color = currColor, bgcolor = backgroundCol, text_halign = text.align_center, text_size = size.normal)
table.cell(hlTable, colStart + 3, row, col4Text, text_color = textColor, bgcolor = backgroundCol, text_halign = text.align_center, text_size = size.large)
else
table.clear(hlTable, 0, 0)
Fibonacci//@version=5
indicator("Fib", overlay = true)
// === INPUTS ===
lineLength = input.int(4, "Line Length (Bars)", minval = 1)
labelSize = input.string("large", "Label Size", options = )
// === Session Start (9:30 AM NY time) ===
sessionStart = timestamp("America/New_York", year(time), month(time), dayofmonth(time), 9, 30)
isNewDay = ta.change(time("D")) != 0
inSession = time >= sessionStart
// === Track High/Low from session start ===
var float dayHigh = na
var float dayLow = na
if isNewDay
dayHigh := na
dayLow := na
if inSession
dayHigh := na(dayHigh) ? high : math.max(dayHigh, high)
dayLow := na(dayLow) ? low : math.min(dayLow, low)
// === Fibonacci Levels ===
range1 = dayHigh - dayLow
fib_0 = dayHigh
fib_236 = dayHigh - 0.236 * range1
fib_382 = dayHigh - 0.382 * range1
fib_500 = dayHigh - 0.500 * range1
fib_618 = dayHigh - 0.618 * range1
fib_764 = dayHigh - 0.764 * range1
fib_100 = dayLow
// === Line and Label Handles ===
var line line_0 = na
var line line_236 = na
var line line_382 = na
var line line_500 = na
var line line_618 = na
var line line_764 = na
var line line_100 = na
var label label_0 = na
var label label_236 = na
var label label_382 = na
var label label_500 = na
var label label_618 = na
var label label_764 = na
var label label_100 = na
// === Redraw Conditions ===
justEnteredSession = inSession and na(dayHigh )
redrawInterval = 2 // ← Redraw every 2 candles
shouldDraw = inSession and not na(dayHigh) and not na(dayLow) and (justEnteredSession or bar_index % redrawInterval == 0)
if shouldDraw
// Delete old lines and labels
line.delete(line_0)
line.delete(line_236)
line.delete(line_382)
line.delete(line_500)
line.delete(line_618)
line.delete(line_764)
line.delete(line_100)
label.delete(label_0)
label.delete(label_236)
label.delete(label_382)
label.delete(label_500)
label.delete(label_618)
label.delete(label_764)
label.delete(label_100)
// Calculate midpoint of line
int midX = bar_index + lineLength / 1
// Label size
labelSizeEnum = labelSize == "large" ? size.large : labelSize == "normal" ? size.normal : size.small
// === Draw lines and % labels ===
// Uncomment the levels you want to show
// line_0 := line.new(bar_index, fib_0, bar_index + lineLength, fib_0, color = color.white, width = 1)
// label_0 := label.new(midX, fib_0, text = str.tostring(fib_0, format.mintick), xloc = xloc.bar_index, yloc = yloc.price, size = labelSizeEnum, style = label.style_label_left, textcolor = color.white, color = color.new(color.white, 85))
// line_236 := line.new(bar_index, fib_236, bar_index + lineLength, fib_236, color = color.green, width = 1)
// label_236 := label.new(midX, fib_236, text = str.tostring(fib_236, format.mintick), xloc = xloc.bar_index, yloc = yloc.price, size = labelSizeEnum, style = label.style_label_left, textcolor = color.green, color = color.new(color.green, 85))
// line_382 := line.new(bar_index, fib_382, bar_index + lineLength, fib_382, color = color.green, width = 1)
// label_382 := label.new(midX, fib_382, text = str.tostring(fib_382, format.mintick), xloc = xloc.bar_index, yloc = yloc.price, size = labelSizeEnum, style = label.style_label_left, textcolor = color.green, color = color.new(color.green, 85))
line_500 := line.new(bar_index, fib_500, bar_index + lineLength, fib_500, color = color.white, width = 1)
label_500 := label.new(midX, fib_500, text = str.tostring(fib_500, format.mintick), xloc = xloc.bar_index, yloc = yloc.price, size = labelSizeEnum, style = label.style_label_left, textcolor = color.white, color = color.new(color.white, 85))
// line_618 := line.new(bar_index, fib_618, bar_index + lineLength, fib_618, color = color.green, width = 1)
// label_618 := label.new(midX, fib_618, text = str.tostring(fib_618, format.mintick), xloc = xloc.bar_index, yloc = yloc.price, size = labelSizeEnum, style = label.style_label_left, textcolor = color.green, color = color.new(color.green, 85))
// line_764 := line.new(bar_index, fib_764, bar_index + lineLength, fib_764, color = color.green, width = 1)
// label_764 := label.new(midX, fib_764, text = str.tostring(fib_764, format.mintick), xloc = xloc.bar_index, yloc = yloc.price, size = labelSizeEnum, style = label.style_label_left, textcolor = color.green, color = color.new(color.green, 85))
// line_100 := line.new(bar_index, fib_100, bar_index + lineLength, fib_100, color = color.white, width = 1)
// label_100 := label.new(midX, fib_100, text = str.tostring(fib_100, format.mintick), xloc = xloc.bar_index, yloc = yloc.price, size = labelSizeEnum, style = label.style_label_left, textcolor = color.white, color = color.new(color.white, 85))
Nasdaq 100 Breadth Composite (sjmccormick)Small indicator combining NDFD, NDFI, NDOH, NFTH into a composite indicator with overbought and oversold areas
RSI - Ostinato TradingRSI indicator for Ostinato Trading scalping strategy. The classic RSI with special color fills for extremum detection.
Cloud and Table - Ostinato TradingMain indicator of Ostinato Trading, the moving averages cloud and table. You can superpose various moving averages, bollinger bands and their color fill. Additionaly the table is used to plot the distance from the price to moving averages, the ATR value, the stop loss ... You can also plot a bulls eyes of SL and TP in points to visualise it on the chart.
Inside Day FinderWhat is an Inside Day?
An inside day happens when:
Today’s high is lower than yesterday’s high, and
Today’s low is higher than yesterday’s low.
So, today’s candle is inside the previous day’s range — showing consolidation or indecision in the market.
2-Minute Breakout After 15-Minute Opening RangeBreakout must happen before 8 am PST. I used Chat GPT to create this for me so I could do some backtesting on 15 min ORBs.
Deyler IndicatorMerge indicators:
Nwog
ICT Killzones and Pivots
BTC Keylevels
9h30 First FVG
Round Number
MACD - Ostinato TradingMACD oscillator from Ostinato Trading, the classic momentum indicator. With this particular code you can superpose two different MACD and add a background to display cross of second indicator if you don't want to display it completely.
Pair Trade Beta Calculator (WORKING VERSION)wrote by chatgpt5, calucate the beta for pair trading
Asset A: The asset you would like to long
Assest B: The asset you would like to short
PSAR with ATR Trailing Stop + SMA Filter📈 Strategy Overview: PSAR + 6×ATR Trailing Stop with SMA Filter
This strategy is built around the principle of “Cut the losers, let the winners run” — a disciplined, trend-following approach that combines the Parabolic SAR indicator with dynamic risk management and a Simple Moving Average (SMA) trend filter.
🔍 Strategy Logic
Trend Filter Trades are only taken in the direction of the prevailing trend, defined by a user-selected SMA (default: 100).
✅ Long trades only when price is above the SMA
✅ Short trades only when price is below the SMA
Entry Signal: A trade is triggered when the Parabolic SAR flips to the opposite side of the price bars, signaling a potential trend reversal.
Stop Loss: The stop loss is dynamically set at 6×ATR from the entry price. This adapts to market volatility and is recalculated every bar — effectively acting as a trailing stop.
Exit Logic: There is no fixed take profit. The trade remains open until the trailing stop is hit — allowing winners to run and losers to be cut quickly.
Risk Management: Each trade risks 0.5% of total equity, ensuring consistent position sizing and capital preservation.
📊 Visual Elements
PSAR dots mark trend direction changes
SMA line shows the broader trend filter
Trailing stop crosses (with 50% opacity) indicate the current stop level without cluttering the chart
⚙️ Customizable Inputs
PSAR parameters: Start, Increment, Maximum
ATR length and multiplier
SMA length
Risk percentage per trade
This strategy is ideal for traders who want to stay aligned with the trend, automate disciplined exits, and avoid emotional decision-making. Clean, simple, and powerful.
Wishing you calm and successful trades!
VMMA Wave Edges [MTF]The VMMA Wave Edges is a multi-timeframe (MTF) overlay indicator that plots dynamic upper and lower edges formed by a band of Volume-Weighted Moving Averages (VWMAs) of varying lengths. It computes N VWMAs with lengths increasing arithmetically from start_len by incr, then plots:The maximum of all VWMAs → Upper Edge
The minimum of all VWMAs → Lower Edge
These edges are calculated on a higher timeframe (mtf_tf) and projected onto the current chart, creating a smooth, volume-sensitive envelope that adapts to volatility and trend strength.Use & InterpretationFeature
Purpose
Upper Edge
Dynamic resistance zone; price often reacts when approaching or breaking above.
Lower Edge
Dynamic support zone; price tends to bounce or consolidate near it.
Edge Contraction
Low volatility → potential breakout setup.
Edge Expansion
High volatility → trend continuation or exhaustion.
MTF Projection
Avoids repainting & noise by using cleaner higher-timeframe data.
Trading ApplicationsMean ReversionBuy near Lower Edge, sell near Upper Edge (especially in ranging markets).
Breakout ConfirmationPrice closing above Upper Edge on MTF → bullish breakout.
Below Lower Edge → bearish.
Trend FilterIn uptrend: price above Upper Edge → strong momentum.
In downtrend: price below Lower Edge → strong bearish control.
Support/Resistance FlipBroken Upper Edge → becomes future support (and vice versa).
Close Below MAClose Below MA (SMA or EMA)
This indicator helps traders quickly identify when a candle closes below a moving average — a classic signal of potential bearish momentum or a shift in trend.
You can choose between Simple Moving Average (SMA) or Exponential Moving Average (EMA) from a convenient dropdown menu, and customize the MA length to fit your strategy.
When a candle closes below the selected MA, a small black arrow appears above the bar, and an alert can be triggered for instant notifications.
Features:
Choose between SMA or EMA.
Adjustable MA length.
Visual signal (arrow) when the close is below the selected MA.
Built-in alert support
Usage Ideas:
Spot early signs of a bearish reversal.
Use alerts for automated trade monitoring.
Predicta Futures – Scalping Predictor with Confidence FilterPredicta Futures is an advanced short-term forecasting indicator that combines historical pattern similarity analysis with weighted technical signals to predict price movements 1–10 minutes ahead.
**Core Functionality**
The script scans up to 5,000 historical bars to identify structurally similar price patterns. It aggregates forward outcomes from matched patterns and integrates real-time signals from RSI, MACD, Bollinger Bands, volume momentum, and volatility. A composite confidence score filters signals, displaying only those meeting the user-defined threshold (default ≥68%).
**Key Outputs**
- Buy/sell triangles with text labels
- Dashed projection line to predicted price
- Dotted target and ATR-based stop lines
- Info panel showing forecast direction, confidence %, expected move %, pattern count, order book status, and data access details
**Customization & Performance**
- Execution modes: Fast, Balanced, Accurate
- Adaptive sampling with recency bias option
- Filters for volatility and market hours
- Adjustable weights, lookback period, and prediction horizon
**Use Cases**
Scalping, intraday trading, futures, cryptocurrencies, equities.
*Order book metrics are simulated (platform limitation). Technical analysis tool; not financial advice.*
🧠 Quantum Regime Shift Detector v2.1🧠 Quantum Regime Shift Detector v2.1
This tool identifies market phase transitions — when conditions shift between stable and volatile regimes.
It blends volatility, trend strength, momentum, and volume dynamics to compute a Quantum Shift Score that highlights regime changes in real time.
🟩 Green = Stable Regime (calm, trending markets)
🟥 Red = Transition Regime (volatility spikes or reversals)
🟨 Yellow = Uncertain Zone
The histogram tracks regime states, while alerts trigger automatically when the market enters a new phase.
Use it to anticipate major shifts before price confirms them.
(Tip: pair with your favorite trend or volume indicator for confirmation.)
Enhanced Roman Order Block v2Enhanced Roman Order Block Indicator v2
This indicator identifies and visualizes Order Blocks (OBs) on your chart, which are key price zones where institutional traders likely placed significant orders, often acting as support/resistance. It's an enhanced version inspired by standard OB detection scripts (like "Crystal Order Block"), but combines and improves upon them with practical features for better trading utility—avoiding a simple mashup by integrating complementary tools that work synergistically.
Originality and Enhancements:
Builds on basic candle-pattern OB detection but adds ATR-based minimum size filtering to ignore noise (e.g., small, insignificant blocks).
Includes optional Higher Timeframe (HTF) confirmation to validate OBs against larger trends, using confirmed data only (no lookahead bias—requests are offset for historical accuracy).
Customizable mitigation (wick or close-based) to detect when an OB is "touched" and potentially invalidated.
Adjustable lookback for pattern flexibility, box extensions, price lines, max displayed OBs (to declutter charts), and alerts for formation/mitigation.
These features merge to create a more reliable, user-configurable tool: e.g., HTF checks + ATR filters reduce false positives, while alerts + lines help in live trading without overwhelming the chart.
How It Works:
Detection Logic: Scans recent candles (default lookback=3) for bullish OBs (e.g., a low that's lower than prior but higher than subsequent swings, indicating accumulation) or bearish OBs (opposite for distribution). Formulas: Bullish = (B_low < A_low) AND (C_low > B_low) AND ((C_low > B_high) OR (D_low > B_high)); similar for bearish.
Filters: OBs must exceed ATR * minOBSizeATR (default 0.5) for validity. If HTF enabled, confirms the OB aligns with HTF lows/highs.
Mitigation: Tracks OBs and shortens boxes/lines when price wicks/closes into the mitigation level (top for bullish, bottom for bearish).
Display: Draws semi-transparent boxes (extendable), optional dashed lines, and labels. Limits to maxOBs, removing oldest.
Alerts: Triggers on new OBs or mitigations for timely notifications.
Underlying concept: OBs stem from Smart Money Concepts (SMC), where big players leave "footprints" in price structure— this script automates detection with risk-aware tweaks.
How to Use:
Add to chart (works on any timeframe/symbol, e.g., crypto like ETHUSD).
Inputs:
Order Block Settings: Toggle bullish/bearish/mitigated visibility; choose mitigation type; set min size/lookback.
Display: Adjust extensions, enable lines, limit max OBs.
Alerts: Enable for OB events.
Multi-Timeframe: Input a higher TF (e.g., "D" for daily) for confirmation—ensures OBs respect bigger-picture levels.
Trading ScorecardChecklist, note, scorecard, custom table. I originally created the table for currency strength analysis, but it can be used as a checklist. You can also create your own scoring system. The number of columns and rows can be changed. The color and size of the table are customizable.






















