From cb1ba8a05f1f4c4ea46c889d8b407ca0120632b5 Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Wed, 12 Feb 2025 14:41:37 -0500 Subject: [PATCH] Further root readme bump, factor `.clearing` content In line with our move to `uv` and recent `nix` support update a bunch of the summary content and factor out the order-control section to a new `.piker.clearing` readme file with embedded todos therein. --- README.rst | 207 ++++++++++++++++++++++---------------- piker/clearing/README.rst | 49 +++++++++ 2 files changed, 169 insertions(+), 87 deletions(-) create mode 100644 piker/clearing/README.rst diff --git a/README.rst b/README.rst index a4c55040..ae2a4b78 100644 --- a/README.rst +++ b/README.rst @@ -1,137 +1,161 @@ piker ----- -trading gear for hackers. +trading gear for hackers |gh_actions| .. |gh_actions| image:: https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fpikers%2Fpiker%2Fbadge&style=popout-square :target: https://actions-badge.atrox.dev/piker/pikers/goto -``piker`` is a broker agnostic, next-gen FOSS toolset for real-time -computational trading targeted at `hardcore Linux users `_ . +``piker`` is a broker agnostic, next-gen FOSS toolset and runtime for +real-time computational trading targeted at `hardcore Linux users +`_ . -we use as much bleeding edge tech as possible including (but not limited to): +we use much bleeding edge tech including (but not limited to): - latest python for glue_ -- trio_ & tractor_ for our distributed, multi-core, real-time streaming - `structured concurrency`_ runtime B) -- Qt_ for pristine high performance UIs -- pyqtgraph_ for real-time charting -- ``polars`` ``numpy`` and ``numba`` for `fast numerics`_ -- `apache arrow and parquet`_ for time series history management - persistence and sharing -- (prototyped) techtonicdb_ for L2 book storage +- uv_ for packaging and distribution +- trio_ & tractor_ for our distributed `structured concurrency`_ runtime +- Qt_ for pristine low latency UIs +- pyqtgraph_ (which we've extended) for real-time charting and graphics +- ``polars`` ``numpy`` and ``numba`` for redic `fast numerics`_ +- `apache arrow and parquet`_ for time-series storage -.. |travis| image:: https://img.shields.io/travis/pikers/piker/master.svg - :target: https://travis-ci.org/pikers/piker +potential projects we might integrate with soon, + +- (already prototyped in ) techtonicdb_ for L2 book storage + +.. _comp_trader: https://jfaleiro.wordpress.com/2019/10/09/computational-trader/ +.. _glue: https://numpy.org/doc/stable/user/c-info.python-as-glue.html#using-python-as-glue +.. _uv: https://docs.astral.sh/uv/ .. _trio: https://github.com/python-trio/trio .. _tractor: https://github.com/goodboy/tractor .. _structured concurrency: https://trio.discourse.group/ -.. _marketstore: https://github.com/alpacahq/marketstore -.. _techtonicdb: https://github.com/0b01/tectonicdb .. _Qt: https://www.qt.io/ .. _pyqtgraph: https://github.com/pyqtgraph/pyqtgraph -.. _glue: https://numpy.org/doc/stable/user/c-info.python-as-glue.html#using-python-as-glue .. _apache arrow and parquet: https://arrow.apache.org/faq/ .. _fast numerics: https://zerowithdot.com/python-numpy-and-pandas-performance/ -.. _comp_trader: https://jfaleiro.wordpress.com/2019/10/09/computational-trader/ +.. _techtonicdb: https://github.com/0b01/tectonicdb -focus and features: -******************* -- 100% federated: your code, your hardware, your data feeds, your broker fills. -- zero web: low latency, native software that doesn't try to re-invent the OS -- maximal **privacy**: prevent brokers and mms from knowing your - planz; smack their spreads with dark volume. -- zero clutter: modal, context oriented UIs that echew minimalism, reduce - thought noise and encourage un-emotion. -- first class parallelism: built from the ground up on next-gen structured concurrency - primitives. -- traders first: broker/exchange/asset-class agnostic -- systems grounded: real-time financial signal processing that will - make any queuing or DSP eng juice their shorts. -- non-tina UX: sleek, powerful keyboard driven interaction with expected use in tiling wms -- data collaboration: every process and protocol is multi-host scalable. -- fight club ready: zero interest in adoption by suits; no corporate friendly license, ever. +focus and feats: +**************** +fitting with these tenets, we're always open to new +framework/lib/service interop suggestions and ideas! -fitting with these tenets, we're always open to new framework suggestions and ideas. +- **100% federated**: + your code, your hardware, your data feeds, your broker fills. -building the best looking, most reliable, keyboard friendly trading -platform is the dream; join the cause. +- **zero web**: + low latency as a prime objective, native UIs and modern IPC + protocols without trying to re-invent the "OS-as-an-app".. + +- **maximal privacy**: + prevent brokers and mms from knowing your planz; smack their + spreads with dark volume from a VPN tunnel. + +- **zero clutter**: + modal, context oriented UIs that echew minimalism, reduce thought + noise and encourage un-emotion. + +- **first class parallelism**: + built from the ground up on a next-gen structured concurrency + supervision sys. + +- **traders first**: + broker/exchange/venue/asset-class/money-sys agnostic + +- **systems grounded**: + real-time financial signal processing (fsp) that will make any + queuing or DSP eng juice their shorts. + +- **non-tina UX**: + sleek, powerful keyboard driven interaction with expected use in + tiling wms (or maybe even a DDE). + +- **data collab at scale**: + every actor-process and protocol is multi-host aware. + +- **fight club ready**: + zero interest in adoption by suits; no corporate friendly license, + ever. + +building the hottest looking, fastest, most reliable, keyboard +friendly FOSS trading platform is the dream; join the cause. -sane install with `uv` -************************** +a sane install with `uv` +************************ +bc why install with `python` when you can faster with `rust` :: uv lock hacky install on nixos ********************** -`NixOS` is our core devs' distro of choice for which we offer +``NixOS`` is our core devs' distro of choice for which we offer a stringently defined development shell envoirment that can be loaded with:: nix-shell default.nix -check out our charts -******************** -bet you weren't expecting this from the foss:: +start a chart +************* +run a realtime OHLCV chart stand-alone:: - piker -l info -b kraken -b binance chart btcusdt.binance --pdb + piker -l info chart btcusdt.spot.binance xmrusdt.spot.kraken + +this runs a chart UI (with 1m sampled OHLCV) and shows 2 spot markets from 2 diff cexes +overlayed on the same graph. Use of `piker` without first starting +a daemon (`pikerd` - see below) means there is an implicit spawning of the +multi-actor-runtime (implemented as a `tractor` app). + +For additional subsystem feats available through our chart UI see the +various sub-readmes: + +- order control using a mouse-n-keyboard UX B) +- cross venue market-pair (what most call "symbol") search, select, overlay Bo +- financial-signal-processing (`piker.fsp`) write-n-reload to sub-chart BO +- src-asset derivatives scan for anal, like the infamous "max pain" XO -this runs the main chart (currently with 1m sampled OHLC) in in debug -mode and you can practice paper trading using the following -micro-manual: - -``order_mode`` ( - edge triggered activation by any of the following keys, - ``mouse-click`` on y-level to submit at that price - ): - - - ``f``/ ``ctl-f`` to stage buy - - ``d``/ ``ctl-d`` to stage sell - - ``a`` to stage alert - - -``search_mode`` ( - ``ctl-l`` or ``ctl-space`` to open, - ``ctl-c`` or ``ctl-space`` to close - ) : - - - begin typing to have symbol search automatically lookup - symbols from all loaded backend (broker) providers - - arrow keys and mouse click to navigate selection - - vi-like ``ctl-[hjkl]`` for navigation - - -you can also configure your position allocation limits from the -sidepane. - - -run in distributed mode -*********************** -start the service manager and data feed daemon in the background and -connect to it:: +spawn a daemon standalone +************************* +we call the root actor-process the ``pikerd``. it can be (and is +recommended normally to be) started separately from the ``piker +chart`` program:: pikerd -l info --pdb +the daemon does nothing until a ``piker``-client (like ``piker +chart``) connects and requests some particular sub-system. for +a connecting chart ``pikerd`` will spawn and manage at least, -connect your chart:: +- a data-feed daemon: ``datad`` which does all the work of comms with + the backend provider (in this case the ``binance`` cex). +- a paper-trading engine instance, ``paperboi.binance``, (if no live + account has been configured) which allows for auto/manual order + control against the live quote stream. - piker -l info -b kraken -b binance chart xmrusdt.binance --pdb +*using* an actor-service (aka micro-daemon) manager which dynamically +supervises various sub-subsystems-as-services throughout the ``piker`` +runtime-stack. +now you can (implicitly) connect your chart:: -enjoy persistent real-time data feeds tied to daemon lifetime. the next -time you spawn a chart it will load much faster since the data feed has -been cached and is now always running live in the background until you -kill ``pikerd``. + piker chart btcusdt.spot.binance + +since ``pikerd`` was started separately you can now enjoy a persistent +real-time data stream tied to the daemon-tree's lifetime. i.e. the next +time you spawn a chart it will obviously not only load much faster +(since the underlying ``datad.binance`` is left running with its +in-memory IPC data structures) but also the data-feed and any order +mgmt states should be persistent until you finally cancel ``pikerd``. if anyone asks you what this project is about ********************************************* -you don't talk about it. +you don't talk about it; just use it. how do i get involved? @@ -141,6 +165,15 @@ enter the matrix. how come there ain't that many docs *********************************** -suck it up, learn the code; no one is trying to sell you on anything. -also, we need lotsa help so if you want to start somewhere and can't -necessarily write serious code, this might be the place for you! +i mean we want/need them but building the core right has been higher +prio then marketting (and likely will stay that way Bp). + +soo, suck it up bc, + +- no one is trying to sell you on anything +- learning the code base is prolly way more valuable +- the UI/UXs are intended to be "intuitive" for any hacker.. + +we obviously need tonz help so if you want to start somewhere and +can't necessarily write "advanced" concurrent python/rust code, this +helping document literally anything might be the place for you! diff --git a/piker/clearing/README.rst b/piker/clearing/README.rst new file mode 100644 index 00000000..bf572188 --- /dev/null +++ b/piker/clearing/README.rst @@ -0,0 +1,49 @@ +piker.clearing +______________ +trade execution-n-control subsys for both live and paper trading as +well as algo-trading manual override/interaction across any backend +broker and data provider. + +avail UIs +********* + +order ctl +--------- +the `piker.clearing` subsys is exposed mainly though +the `piker chart` GUI as a "chart trader" style UX and +is automatically enabled whenever a chart is opened. + +.. ^TODO, more prose here! + +the "manual" order control features are exposed via the +`piker.ui.order_mode` API and can pretty much always be +used (at least) in simulated-trading mode, aka "paper"-mode, and +the micro-manual is as follows: + +``order_mode`` ( + edge triggered activation by any of the following keys, + ``mouse-click`` on y-level to submit at that price + ): + + - ``f``/ ``ctl-f`` to stage buy + - ``d``/ ``ctl-d`` to stage sell + - ``a`` to stage alert + + +``search_mode`` ( + ``ctl-l`` or ``ctl-space`` to open, + ``ctl-c`` or ``ctl-space`` to close + ) : + + - begin typing to have symbol search automatically lookup + symbols from all loaded backend (broker) providers + - arrow keys and mouse click to navigate selection + - vi-like ``ctl-[hjkl]`` for navigation + + +position (pp) mgmt +------------------ +you can also configure your position allocation limits from the +sidepane. + +.. ^TODO, explain and provide tut once more refined!