Skip to main content

pnf-chart-system

PyPI version Python versions License

Production-ready Python bindings for the PnF (Point and Figure) engine.

Package name is pnf-chart-system; import name is pypnf.

Why This Package

pypnf is built for real analysis workflows, not only chart construction:

Area What you get
Chart Engine Point-and-Figure charting with Close and HighLow construction
Trend Context Bullish support / bearish resistance context checks
Indicators SMA, Bollinger Bands, RSI, OBV, Bullish Percent
Structural Signals Buy/sell signals and full PnF pattern detection
Market Structure Support/resistance levels, price objectives, congestion zones
Quant Workflows Batch scanner, ML feature matrices, pattern quality, data adapters, walk-forward optimization
Visualization Localhost dashboard plus SVG, PNG, HTML, Plotly, and matplotlib exports

What Is New In 0.2.0

  • Multi-symbol scanner: scan, rank_by_bullish_percent, latest_patterns, fresh_breakouts, near_support, near_resistance.
  • ML features: FeatureVector, FeatureMatrix, to_numpy, to_pandas, to_polars, to_pyarrow.
  • Data adapters: CSV, MetaTrader, TradingView, dataframe conversion, parquet, and optional Yahoo Finance.
  • Pattern quality scoring, explicit event stream events, walk-forward optimization, and publication-quality plot exports.
  • Release banner: version sync, docs coverage, Python tests, and market-data smoke validation are part of the release checklist.

Installation

pip install pnf-chart-system

Quick Start

import pypnf

cfg = pypnf.ChartConfig()
cfg.method = pypnf.ConstructionMethod.HighLow
cfg.box_size_method = pypnf.BoxSizeMethod.Traditional
cfg.box_size = 0.0
cfg.reversal = 3

chart = pypnf.Chart(cfg)

# high, low, close, timestamp
chart.add_data(5000.0, 4950.0, 4985.0, 1700000000)
chart.add_data(5040.0, 4980.0, 5030.0, 1700003600)
chart.add_data(5065.0, 5010.0, 5055.0, 1700007200)

indicators = pypnf.Indicators(pypnf.IndicatorConfig())
indicators.calculate(chart)

print(chart.to_ascii())
print(indicators.summary())

Trendline and Bias Workflow

last_price = 5055.0

print("Bullish bias:", chart.has_bullish_bias())
print("Bearish bias:", chart.has_bearish_bias())
print("Above bullish support:", chart.is_above_bullish_support(last_price))
print("Below bearish resistance:", chart.is_below_bearish_resistance(last_price))

These checks are the normal first gate before acting on breakout or breakdown patterns.

Indicators and Momentum

indicators.calculate(chart)

sma_short = indicators.sma_short()
bands = indicators.bollinger()
rsi = indicators.rsi()
obv = indicators.obv()

col = chart.column_count() - 1
if col >= 0:
    print("SMA short:", sma_short.value(col))
    print("Bollinger upper:", bands.upper(col))
    print("RSI:", rsi.value(col))
    print("OBV:", obv.value(col))

Signals and Pattern Detection

signals = indicators.signals()
patterns = indicators.patterns()

print("Current signal:", signals.current_signal())
print("Buy count:", signals.buy_count())
print("Sell count:", signals.sell_count())

print("Pattern count:", patterns.pattern_count())
print("Bullish patterns:", len(patterns.bullish_patterns()))
print("Bearish patterns:", len(patterns.bearish_patterns()))

Support, Resistance, Objectives, Congestion

sr = indicators.support_resistance()
obj = indicators.objectives()
cong = indicators.congestion()

print("Support levels:", sr.support_levels())
print("Resistance levels:", sr.resistance_levels())
print("Significant levels (>=3 touches):", sr.significant_levels(3))

print("Bullish targets:", obj.bullish_targets())
print("Bearish targets:", obj.bearish_targets())

print("Congestion zones:", cong.zones())

Real-Time Dashboard

from pypnf_dashboard import DashboardServer

server = DashboardServer(chart, indicators)
server.start("127.0.0.1", 8761)
server.publish()
print(server.url())

You can call server.publish() after each new bar/tick batch to keep the browser in sync.

End-To-End Quant Workflow

bars = pypnf.DataAdapters.load_csv("tests/fixtures/GBPUSD_PERIOD_M1.csv")

chart = pypnf.Chart(cfg)
for bar in bars:
    chart.add_ohlc(bar)

indicators.calculate(chart)

features = pypnf.extract_features(chart, indicators)
scores = pypnf.score_patterns(chart, indicators)
matrix = pypnf.feature_matrix([chart], pypnf.IndicatorConfig()).to_pandas()

series = pypnf.SymbolSeries()
series.symbol = "GBPUSD"
series.data = bars
scan_result = pypnf.scan([series], pypnf.ScanConfig())
leaders = pypnf.rank_by_bullish_percent(scan_result)

html = pypnf.PlotExporter.to_html(chart, indicators, pypnf.PlotExportConfig())

Use local fixtures or your own market exports for CI-stable validation. Optional dataframe and Yahoo helpers import their provider packages lazily.

API Map

Core:

  • Chart, ChartConfig, Box, Column

Indicators:

  • Indicators, IndicatorConfig
  • MovingAverage, BollingerBands, RSI, OnBalanceVolume, BullishPercent
  • SignalDetector, PatternRecognizer, SupportResistance, PriceObjectiveCalculator, CongestionDetector

Data:

  • OHLC, Signal, Pattern, SupportResistanceLevel, PriceObjective, CongestionZone

Quant:

  • DataAdapters, FeatureVector, FeatureMatrix, PatternQualityScore
  • scan, scanner filters, WalkForwardConfig, walk_forward_optimize
  • PlotExporter.to_svg, to_png, to_html, to_plotly_json, to_matplotlib

Enums:

  • BoxType, ColumnType, ConstructionMethod, BoxSizeMethod, SignalType, PatternType

Versioning and Compatibility

  • Python package version tracks the same release as the core engine.
  • Keep all bindings on the same version when mixing languages in one system.
  • See CHANGELOG.md for version-by-version behavior changes.

Troubleshooting

  • ImportError / native load issues: rebuild and ensure the native library is discoverable.
  • Empty indicator values: verify you have enough columns for the configured lookback periods.
  • Unexpected chart shape: ensure HighLow mode receives real high/low values, not close-only values.

Documentation and Links

Metadata

Release files for pnf-chart-system 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pnf-chart-system 0.2.0
File Size Uploaded
pnf_chart_system-0.2.0.tar.gz 96.3 kB Details

Release files / pnf_chart_system-0.2.0.tar.gz

Download URL pnf_chart_system-0.2.0.tar.gz
Size 96.3 kB
Tags Source
SHA-256 checksum
How to use checksums
42266db29cbf71020282a1fa2d2e589a6ffaa7998b28c61f20ffaf2a356d20f5
BLAKE2b-256 checksum
How to use checksums
ea8f65453ea4318fd79751aaac15cb098bf55f88fee8f97cc773913cfcd6605f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

0.2.0 This release

1 release file

0.1.2

1 release file

0.1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page