LIVE · LONDON, UK · SOFTWARE ENGINEER

Piotr Markowski

Trading Systems & Native Apple Apps — Python · Swift/SwiftUI · iOS & macOS
ICT/SMC Algorithmic Trading · Crypto, Metals & Equities

I ship native iOS/macOS apps — a movie-maker, a media player, a live-translation app — and design and run an autonomous trading system live on a VPS, each with an AI engineer sitting next to me, not instead of me.

pmquant · trade_journal.csv · tail -f
Jul 15 10:51:58 UTC XAG-USDT SELL @ 58.02 [COMM v2] Srebro SL 58.54 · TP1 56.46 · R:R 2.0 Jul 16 11:01:54 UTC ✅ TAKE_PROFIT_1 @ 56.45 net +$1.12
A real trade, closed at the exact SL/TP1 a bug fix restored the day before — the story is in Method, below.
METHOD

Built with an AI pair-programmer. On purpose — here's exactly how.

Claude is my tool. I am the engineer. I write the specification, make every call that matters, and verify each result against real data before I trust it — Claude writes and edits the code, on a live production server, under my direction. The division of labour is deliberate; the accountability doesn't move. If something's wrong, that's on me, not the tool.
Shipped same day

LIQ ZONE WATCH went from an idea in conversation to a filled live trade in one session — the log above is its first fill, hours old.

Caught my own model lying

My ML filter started blocking entries with 26% predicted win probability — the real outcome was 97%. I traced it, then permanently redesigned the model's role so it can never happen again.

Rebuilt the measuring stick

My own backtesting logic was quietly optimistic — it never checked whether a stop-loss would've been hit along the way. I rebuilt it path-aware before trusting its numbers again.

Asked why the prediction was lying

Blocked signals were scoring 73–94% hypothetical win rate against a real 48.8% live rate. Root cause: the simulator never modelled the real bot moving its stop to breakeven after TP1. Fixed the simulation to match the actual position lifecycle.

Chased a stale number for three days

The bot kept favouring SHORT setups on BTC through a real uptrend. Root cause: a 200-day moving average still anchored to price the market had left behind weeks earlier. Added a bounce-check that treats a stale trend reading as neutral, not a bias.

Fixed it, then let production prove it

A position-recovery path was silently reusing generic stop/target math instead of each symbol's real parameters. I traced the exact numbers through the logs, corrected a live position, and confirmed the fix days later — the trade above closed at exactly the take-profit price it restored.

The tool changed. The responsibility for being right didn't.

ENGINEERING PRACTICES

Root cause first, every time.

The same discipline shows up in both codebases: don't patch the symptom, trace it back to the actual mechanism, then verify the fix against real data — not a re-run that just happens to look better.

Performance · PMemories

20 minutes → under 10 seconds. A single travel-video export could run long enough to get the app killed by iOS under memory pressure. Rebuilt the export pipeline around it; the same route now finishes in under 10 seconds, verified on-device.

Reliability · PMQuant

–$54.63 → +$0.14. A stop-loss order could silently fail to place, leaving live positions unprotected. Added a market-close fallback after 3 failed attempts; hour-by-hour P&L on that exact failure mode flipped from a loss to breakeven-positive.

FLAGSHIP PROJECT · 2026 — PRESENT

PMemories

A native movie-maker for iOS and macOS — turn a photo/video library and a song into an edited, exportable film, built as two separate native apps rather than one compromise codebase.

18
days, empty Xcode project to a TestFlight build with real testers
27
languages localized, including full Arabic & Hebrew RTL
2
fully native codebases — iOS & macOS, zero shared UI
Live Photos as real clips
A Live Photo's paired video is extracted via the Photos framework and treated as a genuine ~3-second motion clip in the timeline, not flattened to a still — a distinction most consumer editors (CapCut, InShot) don't make.
Timeline auto-fit to the song
Photos and clips are redistributed to fill the exact length of the chosen track, with the math compensating for crossfade-transition overlap so the final export matches the song to the second.
No-crop compositing
Every photo is shown in full via aspect-fit; empty letterbox space is filled with a blurred, scaled copy of the same photo instead of cutting anything out of frame.
Cinematic Travel Map
An animated 3D-globe route between real cities — MapKit, real road/flight routes, directional vehicle icons, a live distance counter — exportable as its own standalone video.
Auto-ducking soundtrack
Background music dips under video and Live Photo segments that carry their own audio, then recovers, instead of playing at one flat volume throughout.
Two native builds, one vision
iOS and macOS are deliberately separate Xcode projects — SwiftUI, AVFoundation, Photos, MapKit, SwiftData — so each platform gets an idiomatic UI instead of a shared lowest common denominator.
Travel achievements & live ranking
An Explorer Score computed from real trip data (countries, cities, distance, elevation gained) — Sign in with Apple plus a CloudKit public database lets testers compare scores on one shared leaderboard, not just against themselves.
User-chosen app skins
A seasonal background that changes with the actual date, plus themed alternatives (beach, mountains, city, night sky...) — picked by the user, never auto-applied, with contrast handled automatically so every screen stays readable regardless of the photo underneath.
World Globe
An interactive 3D globe plotting every visited place at once — not one trip at a time — with tap-to-jump straight into the finished video for that location.
Trip Planning
The other half of the loop: plan a trip before it happens — cities, dates, accommodation, places to visit — then one tap converts it into a ready-to-build Travel Map route once you're back.
Read honestly: in TestFlight with a small group of real testers, not on the App Store yet — the actual next milestone is watching it survive contact with someone else's phone, habits and photo library, not another feature. (Export used to be the real weak point — see Engineering Practices, above.)
LIVE PRODUCTION SYSTEM · 2026 — PRESENT

PMQuant

An autonomous multi-asset trading system — crypto perpetuals, metals, and US equities — live on a VPS, twenty-four hours a day, since May 2026.

72
days live, uninterrupted
506
closed positions logged
48.8%
live win rate
13+11
core crypto pairs (+ dynamic Top-50 scan) & commodities/equities
Read honestly: this page is an engineering portfolio, not a returns pitch. Net of two deposits and one withdrawal, $232.15 has gone into the live account; it currently holds $151.19 — down 34.9%. Almost all of it traces to one failure mode, fixed and verified — see Engineering Practices, above.
Signal generation
ScenarioEngine
Confluence-scored LONG/SHORT setups (structure, order flow, volume, Fibonacci) across 13 core pairs plus a dynamic Top-50 scan, adapted for metals and 8 US equities/ETFs via a session-aware variant
Regime Detector
Classifies each symbol into 5 volatility/trend regimes and adjusts thresholds accordingly
Market intelligence
Liquidation & pattern detection
Real-time liquidation-cluster feed plus a seven-factor reversal scorer and 20 chart-pattern recognisers, confirmed on candle rejection before entry
AI Filter
GradientBoostingClassifier, observation-only by permanent design — advises, never blocks (see Engineering Practices, above)
Risk, execution & validation
RiskManager
Dynamic position sizing, leverage tiers, break-even/trailing-stop logic, daily circuit breaker
Backtester
Full SL/TP/BE path simulation over historical candles, not just entry-to-exit price
TelegramCommander
Live position monitoring, manual overrides, and an interactive pre-entry analysis command from anywhere
ALSO BUILDING · 2026 — PRESENT

MacAmp

A native macOS & iOS media player, SwiftUI-first, built in the spirit of the classic Winamp — the same build-with-AI process as PMQuant, tested outside of Python and outside of trading. Public preview and mailing list at macamp.duckdns.org.

Dual playback engine
AVAudioEngine with a real 10-band EQ for standard formats, VLCKit for everything AVFoundation won't touch — MKV, AVI, WMV, RMVB and eleven other formats
Real spectrum analysis
32-bar FFT via Accelerate (vDSP), reading live audio taps — replaced an earlier version that was, honestly, just a randomised animation
True fullscreen & floating video
Custom borderless NSWindow with its own keyboard shortcuts, plus a separate floating video window that auto-positions itself beside the player and reveals controls on hover
Full subtitle pipeline
SRT, WebVTT, MicroDVD and MPL2 parsing, with automatic encoding detection across UTF-8, Windows-1250, ISO-8859-2 and Latin-1
Internet radio
Live search against the radio-browser.info directory by station name or genre tag, instant click-to-play, with curated genre shortcuts (deep house, lofi, techno...)
Theming engine
Three built-in skins — Modern Blue, a calendar-aware Seasons theme that switches its real photography with the actual date, and an animated "Liquid Glass" material with a live water-flow shader
Read honestly: the FFT spectrum view above is built and sitting in the project — it just isn't wired into any screen yet. Same policy as PMQuant: if it's not live, I say so.
ALSO BUILDING · 2026 — PRESENT

PMBridge

A native iOS live-translation app — speak in one language, the other side reads or hears the other. Built on Apple's on-device Translation and Speech frameworks: no API keys, no per-request billing, no data leaving the phone.

One-way by design
Translation flows in a single direction per session — you speak, they receive. You don't have to sit through your own words played back to you, which is what makes it usable in an actual conversation rather than a demo.
Two modes
Quick translate for single phrases, live conversation mode for continuous speech recognition with rolling translation as you talk.
Apple-native stack
Speech framework for recognition, Translation framework for the conversion — both on-device. The trade-off is honest: Google's translation quality is better, but this runs free, offline, and without sending audio to a third party.
Language pairs
Five languages selectable in any direction — Polish, English (UK), Spanish, Italian and Brazilian Portuguese — with Polish ↔ English (UK) as the primary, most-tested pair.
Read honestly: it works, but it needs supervision — recognition drops words in noisy environments and some phrasings need a manual correction before sending. It's a tool I use, not a product I'd sell yet.
STACK

Tools of the trade

Core
Pythonpandasnumpy asyncioaiohttpGit Linux / VPS
ML & data
scikit-learnGradientBoosting BacktestingData Analysis
Trading domain
ICT / SMC AnalysisAlgorithmic Trading Risk ManagementCCXT Crypto Exchange APIsOAuth 1.0a
Integration & delivery
REST API IntegrationTelegram Bot API JSON / CSV pipelinespython-docxreportlab
Native macOS
SwiftSwiftUIAppKit AVFoundationVLCKitAccelerate / DSP
NOW

What I'm looking for

Contract & full-time roles

Quant developer, trading-systems engineer, fintech backend, or iOS/Swift engineering roles — London or remote. Open to a first conversation even if you're just exploring whether this direction fits.

Freelance builds

Custom trading bots, strategy automation and backtesting, exchange API integration, or native iOS/macOS apps — available for project-based work.