uv migration and default.nix for qt6 #17
234
README.rst
234
README.rst
|
@ -1,162 +1,161 @@
|
||||||
piker
|
piker
|
||||||
-----
|
-----
|
||||||
trading gear for hackers.
|
trading gear for hackers
|
||||||
|
|
||||||
|gh_actions|
|
|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
|
.. |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
|
:target: https://actions-badge.atrox.dev/piker/pikers/goto
|
||||||
|
|
||||||
``piker`` is a broker agnostic, next-gen FOSS toolset for real-time
|
``piker`` is a broker agnostic, next-gen FOSS toolset and runtime for
|
||||||
computational trading targeted at `hardcore Linux users <comp_trader>`_ .
|
real-time computational trading targeted at `hardcore Linux users
|
||||||
|
<comp_trader>`_ .
|
||||||
|
|
||||||
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_
|
- latest python for glue_
|
||||||
- trio_ & tractor_ for our distributed, multi-core, real-time streaming
|
- uv_ for packaging and distribution
|
||||||
`structured concurrency`_ runtime B)
|
- trio_ & tractor_ for our distributed `structured concurrency`_ runtime
|
||||||
- Qt_ for pristine high performance UIs
|
- Qt_ for pristine low latency UIs
|
||||||
- pyqtgraph_ for real-time charting
|
- pyqtgraph_ (which we've extended) for real-time charting and graphics
|
||||||
- ``polars`` ``numpy`` and ``numba`` for `fast numerics`_
|
- ``polars`` ``numpy`` and ``numba`` for redic `fast numerics`_
|
||||||
- `apache arrow and parquet`_ for time series history management
|
- `apache arrow and parquet`_ for time-series storage
|
||||||
persistence and sharing
|
|
||||||
- (prototyped) techtonicdb_ for L2 book storage
|
|
||||||
|
|
||||||
.. |travis| image:: https://img.shields.io/travis/pikers/piker/master.svg
|
potential projects we might integrate with soon,
|
||||||
:target: https://travis-ci.org/pikers/piker
|
|
||||||
|
- (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
|
.. _trio: https://github.com/python-trio/trio
|
||||||
.. _tractor: https://github.com/goodboy/tractor
|
.. _tractor: https://github.com/goodboy/tractor
|
||||||
.. _structured concurrency: https://trio.discourse.group/
|
.. _structured concurrency: https://trio.discourse.group/
|
||||||
.. _marketstore: https://github.com/alpacahq/marketstore
|
|
||||||
.. _techtonicdb: https://github.com/0b01/tectonicdb
|
|
||||||
.. _Qt: https://www.qt.io/
|
.. _Qt: https://www.qt.io/
|
||||||
.. _pyqtgraph: https://github.com/pyqtgraph/pyqtgraph
|
.. _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/
|
.. _apache arrow and parquet: https://arrow.apache.org/faq/
|
||||||
.. _fast numerics: https://zerowithdot.com/python-numpy-and-pandas-performance/
|
.. _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:
|
focus and feats:
|
||||||
*******************
|
****************
|
||||||
- 100% federated: your code, your hardware, your data feeds, your broker fills.
|
fitting with these tenets, we're always open to new
|
||||||
- zero web: low latency, native software that doesn't try to re-invent the OS
|
framework/lib/service interop suggestions and ideas!
|
||||||
- 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.
|
|
||||||
|
|
||||||
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
|
- **zero web**:
|
||||||
platform is the dream; join the cause.
|
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 `poetry`
|
a sane install with `uv`
|
||||||
**************************
|
************************
|
||||||
TODO!
|
bc why install with `python` when you can faster with `rust` ::
|
||||||
|
|
||||||
|
uv lock
|
||||||
rigorous install on ``nixos`` using ``poetry2nix``
|
|
||||||
**************************************************
|
|
||||||
TODO!
|
|
||||||
|
|
||||||
|
|
||||||
hacky install on nixos
|
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::
|
a stringently defined development shell envoirment that can be loaded with::
|
||||||
|
|
||||||
nix-shell develop.nix
|
nix-shell default.nix
|
||||||
|
|
||||||
this will setup the required python environment to run piker, make sure to
|
|
||||||
run::
|
|
||||||
|
|
||||||
pip install -r requirements.txt -e .
|
|
||||||
|
|
||||||
once after loading the shell
|
|
||||||
|
|
||||||
|
|
||||||
install wild-west style via `pip`
|
start a chart
|
||||||
*********************************
|
*************
|
||||||
``piker`` is currently under heavy pre-alpha development and as such
|
run a realtime OHLCV chart stand-alone::
|
||||||
should be cloned from this repo and hacked on directly.
|
|
||||||
|
|
||||||
for a development install::
|
piker -l info chart btcusdt.spot.binance xmrusdt.spot.kraken
|
||||||
|
|
||||||
git clone git@github.com:pikers/piker.git
|
this runs a chart UI (with 1m sampled OHLCV) and shows 2 spot markets from 2 diff cexes
|
||||||
cd piker
|
overlayed on the same graph. Use of `piker` without first starting
|
||||||
virtualenv env
|
a daemon (`pikerd` - see below) means there is an implicit spawning of the
|
||||||
source ./env/bin/activate
|
multi-actor-runtime (implemented as a `tractor` app).
|
||||||
pip install -r requirements.txt -e .
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
check out our charts
|
spawn a daemon standalone
|
||||||
********************
|
*************************
|
||||||
bet you weren't expecting this from the foss::
|
we call the root actor-process the ``pikerd``. it can be (and is
|
||||||
|
recommended normally to be) started separately from the ``piker
|
||||||
piker -l info -b kraken -b binance chart btcusdt.binance --pdb
|
chart`` program::
|
||||||
|
|
||||||
|
|
||||||
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::
|
|
||||||
|
|
||||||
pikerd -l info --pdb
|
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
|
piker chart btcusdt.spot.binance
|
||||||
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
|
since ``pikerd`` was started separately you can now enjoy a persistent
|
||||||
kill ``pikerd``.
|
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
|
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?
|
how do i get involved?
|
||||||
|
@ -166,6 +165,15 @@ enter the matrix.
|
||||||
|
|
||||||
how come there ain't that many docs
|
how come there ain't that many docs
|
||||||
***********************************
|
***********************************
|
||||||
suck it up, learn the code; no one is trying to sell you on anything.
|
i mean we want/need them but building the core right has been higher
|
||||||
also, we need lotsa help so if you want to start somewhere and can't
|
prio then marketting (and likely will stay that way Bp).
|
||||||
necessarily write serious code, this might be the place for you!
|
|
||||||
|
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!
|
||||||
|
|
|
@ -0,0 +1,134 @@
|
||||||
|
with (import <nixpkgs> {});
|
||||||
|
let
|
||||||
|
glibStorePath = lib.getLib glib;
|
||||||
|
zlibStorePath = lib.getLib zlib;
|
||||||
|
zstdStorePath = lib.getLib zstd;
|
||||||
|
dbusStorePath = lib.getLib dbus;
|
||||||
|
libGLStorePath = lib.getLib libGL;
|
||||||
|
freetypeStorePath = lib.getLib freetype;
|
||||||
|
qt6baseStorePath = lib.getLib qt6.qtbase;
|
||||||
|
fontconfigStorePath = lib.getLib fontconfig;
|
||||||
|
libxkbcommonStorePath = lib.getLib libxkbcommon;
|
||||||
|
xcbutilcursorStorePath = lib.getLib xcb-util-cursor;
|
||||||
|
|
||||||
|
qtpyStorePath = lib.getLib python312Packages.qtpy;
|
||||||
|
pyqt6StorePath = lib.getLib python312Packages.pyqt6;
|
||||||
|
pyqt6SipStorePath = lib.getLib python312Packages.pyqt6-sip;
|
||||||
|
rapidfuzzStorePath = lib.getLib python312Packages.rapidfuzz;
|
||||||
|
qdarkstyleStorePath = lib.getLib python312Packages.qdarkstyle;
|
||||||
|
|
||||||
|
xorgLibX11StorePath = lib.getLib xorg.libX11;
|
||||||
|
xorgLibxcbStorePath = lib.getLib xorg.libxcb;
|
||||||
|
xorgxcbutilwmStorePath = lib.getLib xorg.xcbutilwm;
|
||||||
|
xorgxcbutilimageStorePath = lib.getLib xorg.xcbutilimage;
|
||||||
|
xorgxcbutilerrorsStorePath = lib.getLib xorg.xcbutilerrors;
|
||||||
|
xorgxcbutilkeysymsStorePath = lib.getLib xorg.xcbutilkeysyms;
|
||||||
|
xorgxcbutilrenderutilStorePath = lib.getLib xorg.xcbutilrenderutil;
|
||||||
|
in
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "piker-qt6-uv";
|
||||||
|
buildInputs = [
|
||||||
|
# System requirements.
|
||||||
|
glib
|
||||||
|
zlib
|
||||||
|
dbus
|
||||||
|
zstd
|
||||||
|
libGL
|
||||||
|
freetype
|
||||||
|
qt6.qtbase
|
||||||
|
libgcc.lib
|
||||||
|
fontconfig
|
||||||
|
libxkbcommon
|
||||||
|
|
||||||
|
# Xorg requirements
|
||||||
|
xcb-util-cursor
|
||||||
|
xorg.libxcb
|
||||||
|
xorg.libX11
|
||||||
|
xorg.xcbutilwm
|
||||||
|
xorg.xcbutilimage
|
||||||
|
xorg.xcbutilerrors
|
||||||
|
xorg.xcbutilkeysyms
|
||||||
|
xorg.xcbutilrenderutil
|
||||||
|
|
||||||
|
# Python requirements.
|
||||||
|
python312Full
|
||||||
|
python312Packages.uv
|
||||||
|
python312Packages.qdarkstyle
|
||||||
|
python312Packages.rapidfuzz
|
||||||
|
python312Packages.pyqt6
|
||||||
|
python312Packages.qtpy
|
||||||
|
];
|
||||||
|
src = null;
|
||||||
|
shellHook = ''
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Set the Qt plugin path
|
||||||
|
# export QT_DEBUG_PLUGINS=1
|
||||||
|
|
||||||
|
QTBASE_PATH="${qt6baseStorePath}/lib"
|
||||||
|
QT_PLUGIN_PATH="$QTBASE_PATH/qt-6/plugins"
|
||||||
|
QT_QPA_PLATFORM_PLUGIN_PATH="$QT_PLUGIN_PATH/platforms"
|
||||||
|
|
||||||
|
LIB_GCC_PATH="${libgcc.lib}/lib"
|
||||||
|
GLIB_PATH="${glibStorePath}/lib"
|
||||||
|
ZSTD_PATH="${zstdStorePath}/lib"
|
||||||
|
ZLIB_PATH="${zlibStorePath}/lib"
|
||||||
|
DBUS_PATH="${dbusStorePath}/lib"
|
||||||
|
LIBGL_PATH="${libGLStorePath}/lib"
|
||||||
|
FREETYPE_PATH="${freetypeStorePath}/lib"
|
||||||
|
FONTCONFIG_PATH="${fontconfigStorePath}/lib"
|
||||||
|
LIB_XKB_COMMON_PATH="${libxkbcommonStorePath}/lib"
|
||||||
|
|
||||||
|
XCB_UTIL_CURSOR_PATH="${xcbutilcursorStorePath}/lib"
|
||||||
|
XORG_LIB_X11_PATH="${xorgLibX11StorePath}/lib"
|
||||||
|
XORG_LIB_XCB_PATH="${xorgLibxcbStorePath}/lib"
|
||||||
|
XORG_XCB_UTIL_IMAGE_PATH="${xorgxcbutilimageStorePath}/lib"
|
||||||
|
XORG_XCB_UTIL_WM_PATH="${xorgxcbutilwmStorePath}/lib"
|
||||||
|
XORG_XCB_UTIL_RENDER_UTIL_PATH="${xorgxcbutilrenderutilStorePath}/lib"
|
||||||
|
XORG_XCB_UTIL_KEYSYMS_PATH="${xorgxcbutilkeysymsStorePath}/lib"
|
||||||
|
XORG_XCB_UTIL_ERRORS_PATH="${xorgxcbutilerrorsStorePath}/lib"
|
||||||
|
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$QTBASE_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$QT_PLUGIN_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$QT_QPA_PLATFORM_PLUGIN_PATH"
|
||||||
|
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$LIB_GCC_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DBUS_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$GLIB_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$ZLIB_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$ZSTD_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$LIBGL_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$FONTCONFIG_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$FREETYPE_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$LIB_XKB_COMMON_PATH"
|
||||||
|
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$XCB_UTIL_CURSOR_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$XORG_LIB_X11_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$XORG_LIB_XCB_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$XORG_XCB_UTIL_IMAGE_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$XORG_XCB_UTIL_WM_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$XORG_XCB_UTIL_RENDER_UTIL_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$XORG_XCB_UTIL_KEYSYMS_PATH"
|
||||||
|
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$XORG_XCB_UTIL_ERRORS_PATH"
|
||||||
|
|
||||||
|
export LD_LIBRARY_PATH
|
||||||
|
|
||||||
|
RPDFUZZ_PATH="${rapidfuzzStorePath}/lib/python3.12/site-packages"
|
||||||
|
QDRKSTYLE_PATH="${qdarkstyleStorePath}/lib/python3.12/site-packages"
|
||||||
|
QTPY_PATH="${qtpyStorePath}/lib/python3.12/site-packages"
|
||||||
|
PYQT6_PATH="${pyqt6StorePath}/lib/python3.12/site-packages"
|
||||||
|
PYQT6_SIP_PATH="${pyqt6SipStorePath}/lib/python3.12/site-packages"
|
||||||
|
|
||||||
|
PATCH="$PATCH:$RPDFUZZ_PATH"
|
||||||
|
PATCH="$PATCH:$QDRKSTYLE_PATH"
|
||||||
|
PATCH="$PATCH:$QTPY_PATH"
|
||||||
|
PATCH="$PATCH:$PYQT6_PATH"
|
||||||
|
PATCH="$PATCH:$PYQT6_SIP_PATH"
|
||||||
|
|
||||||
|
export PATCH
|
||||||
|
|
||||||
|
# Install deps
|
||||||
|
uv lock
|
||||||
|
|
||||||
|
'';
|
||||||
|
}
|
|
@ -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!
|
227
pyproject.toml
227
pyproject.toml
|
@ -15,8 +15,8 @@
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
[build-system]
|
[build-system]
|
||||||
requires = ["poetry-core"]
|
requires = ["hatchling"]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "hatchling.build"
|
||||||
|
|
||||||
# ------ - ------
|
# ------ - ------
|
||||||
|
|
||||||
|
@ -34,121 +34,114 @@ ignore = []
|
||||||
|
|
||||||
# ------ - ------
|
# ------ - ------
|
||||||
|
|
||||||
[tool.poetry]
|
|
||||||
name = "piker"
|
|
||||||
version = "0.1.0.alpha0.dev0"
|
|
||||||
description = "trading gear for hackers"
|
|
||||||
authors = ["Tyler Goodlet <goodboy_foss@protonmail.com>"]
|
|
||||||
license = "AGPLv3"
|
|
||||||
readme = "README.rst"
|
|
||||||
|
|
||||||
# ------ - ------
|
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
|
||||||
async-generator = "^1.10"
|
|
||||||
attrs = "^23.1.0"
|
|
||||||
bidict = "^0.22.1"
|
|
||||||
colorama = "^0.4.6"
|
|
||||||
colorlog = "^6.7.0"
|
|
||||||
cython = "^3.0.0"
|
|
||||||
greenback = "^1.1.1"
|
|
||||||
ib-insync = "^0.9.86"
|
|
||||||
msgspec = "^0.18.0"
|
|
||||||
numba = "^0.59.0"
|
|
||||||
numpy = "^1.25"
|
|
||||||
polars = "^0.18.13"
|
|
||||||
pygments = "^2.16.1"
|
|
||||||
python = ">=3.11, <3.13"
|
|
||||||
rich = "^13.5.2"
|
|
||||||
# setuptools = "^68.0.0"
|
|
||||||
tomli = "^2.0.1"
|
|
||||||
tomli-w = "^1.0.0"
|
|
||||||
trio-util = "^0.7.0"
|
|
||||||
trio-websocket = "^0.10.3"
|
|
||||||
typer = "^0.9.0"
|
|
||||||
rapidfuzz = "^3.5.2"
|
|
||||||
pdbp = "^1.5.0"
|
|
||||||
trio = "^0.24"
|
|
||||||
pendulum = "^3.0.0"
|
|
||||||
httpx = "^0.27.0"
|
|
||||||
|
|
||||||
[tool.poetry.dependencies.tractor]
|
|
||||||
develop = true
|
|
||||||
git = 'https://github.com/goodboy/tractor.git'
|
|
||||||
branch = 'asyncio_debugger_support'
|
|
||||||
# path = "../tractor"
|
|
||||||
|
|
||||||
[tool.poetry.dependencies.asyncvnc]
|
|
||||||
git = 'https://github.com/pikers/asyncvnc.git'
|
|
||||||
branch = 'main'
|
|
||||||
|
|
||||||
[tool.poetry.dependencies.tomlkit]
|
|
||||||
develop = true
|
|
||||||
git = 'https://github.com/pikers/tomlkit.git'
|
|
||||||
branch = 'piker_pin'
|
|
||||||
# path = "../tomlkit/"
|
|
||||||
|
|
||||||
[tool.poetry.group.uis]
|
|
||||||
optional = true
|
|
||||||
[tool.poetry.group.uis.dependencies]
|
|
||||||
# https://python-poetry.org/docs/managing-dependencies/#dependency-groups
|
|
||||||
# TODO: make sure the levenshtein shit compiles on nix..
|
|
||||||
# rapidfuzz = {extras = ["speedup"], version = "^0.18.0"}
|
|
||||||
rapidfuzz = "^3.2.0"
|
|
||||||
qdarkstyle = ">=3.0.2"
|
|
||||||
pyqtgraph = { git = 'https://github.com/pikers/pyqtgraph.git' }
|
|
||||||
|
|
||||||
# ------ - ------
|
|
||||||
pyqt6 = "^6.7.0"
|
|
||||||
|
|
||||||
[tool.poetry.group.dev]
|
|
||||||
optional = true
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
|
||||||
# testing / CI
|
|
||||||
pytest = "^6.0.0"
|
|
||||||
elasticsearch = "^8.9.0"
|
|
||||||
xonsh = "^0.14.2"
|
|
||||||
prompt-toolkit = "3.0.40"
|
|
||||||
|
|
||||||
# console ehancements and eventually remote debugging
|
|
||||||
# extras/helpers.
|
|
||||||
# TODO: add a toolset that makes debugging a `pikerd` service
|
|
||||||
# (tree) easy to hack on directly using more or less the local env:
|
|
||||||
# - xonsh + xxh
|
|
||||||
# - rsyscall + pdbp
|
|
||||||
# - actor runtime control console like BEAM/OTP
|
|
||||||
|
|
||||||
# ------ - ------
|
|
||||||
|
|
||||||
# TODO: add an `--only daemon` group for running non-ui / pikerd
|
|
||||||
# service tree in distributed mode B)
|
|
||||||
# https://python-poetry.org/docs/managing-dependencies/#installing-group-dependencies
|
|
||||||
# [tool.poetry.group.daemon.dependencies]
|
|
||||||
|
|
||||||
[tool.poetry.scripts]
|
|
||||||
piker = 'piker.cli:cli'
|
|
||||||
pikerd = 'piker.cli:pikerd'
|
|
||||||
ledger = 'piker.accounting.cli:ledger'
|
|
||||||
|
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
keywords=[
|
name = "piker"
|
||||||
"async",
|
version = "0.1.0a0dev0"
|
||||||
"trading",
|
description = "trading gear for hackers"
|
||||||
"finance",
|
authors = [{ name = "Tyler Goodlet", email = "goodboy_foss@protonmail.com" }]
|
||||||
"quant",
|
requires-python = ">=3.12, <3.13"
|
||||||
"charting",
|
license = "AGPL-3.0-or-later"
|
||||||
|
readme = "README.rst"
|
||||||
|
keywords = [
|
||||||
|
"async",
|
||||||
|
"trading",
|
||||||
|
"finance",
|
||||||
|
"quant",
|
||||||
|
"charting",
|
||||||
]
|
]
|
||||||
classifiers=[
|
classifiers = [
|
||||||
'Development Status :: 3 - Alpha',
|
"Development Status :: 3 - Alpha",
|
||||||
"License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
|
"License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
|
||||||
'Operating System :: POSIX :: Linux',
|
"Operating System :: POSIX :: Linux",
|
||||||
"Programming Language :: Python :: Implementation :: CPython",
|
"Programming Language :: Python :: Implementation :: CPython",
|
||||||
"Programming Language :: Python :: 3 :: Only",
|
"Programming Language :: Python :: 3 :: Only",
|
||||||
"Programming Language :: Python :: 3.11",
|
"Programming Language :: Python :: 3.11",
|
||||||
"Programming Language :: Python :: 3.12",
|
"Programming Language :: Python :: 3.12",
|
||||||
'Intended Audience :: Financial and Insurance Industry',
|
"Intended Audience :: Financial and Insurance Industry",
|
||||||
'Intended Audience :: Science/Research',
|
"Intended Audience :: Science/Research",
|
||||||
'Intended Audience :: Developers',
|
"Intended Audience :: Developers",
|
||||||
'Intended Audience :: Education',
|
"Intended Audience :: Education",
|
||||||
]
|
]
|
||||||
|
dependencies = [
|
||||||
|
"async-generator >=1.10, <2.0.0",
|
||||||
|
"attrs >=23.1.0, <24.0.0",
|
||||||
|
"bidict >=0.22.1, <0.23.0",
|
||||||
|
"colorama >=0.4.6, <0.5.0",
|
||||||
|
"colorlog >=6.7.0, <7.0.0",
|
||||||
|
"ib-insync >=0.9.86, <0.10.0",
|
||||||
|
"numba >=0.59.0, <0.60.0",
|
||||||
|
"numpy >=1.25, <2.0",
|
||||||
|
"polars >=0.18.13, <0.19.0",
|
||||||
|
"pygments >=2.16.1, <3.0.0",
|
||||||
|
"rich >=13.5.2, <14.0.0",
|
||||||
|
"tomli >=2.0.1, <3.0.0",
|
||||||
|
"tomli-w >=1.0.0, <2.0.0",
|
||||||
|
"trio-util >=0.7.0, <0.8.0",
|
||||||
|
"trio-websocket >=0.10.3, <0.11.0",
|
||||||
|
"typer >=0.9.0, <1.0.0",
|
||||||
|
"rapidfuzz >=3.5.2, <4.0.0",
|
||||||
|
"pdbp >=1.5.0, <2.0.0",
|
||||||
|
"trio >=0.24, <0.25",
|
||||||
|
"pendulum >=3.0.0, <4.0.0",
|
||||||
|
"httpx >=0.27.0, <0.28.0",
|
||||||
|
"cryptofeed >=2.4.0, <3.0.0",
|
||||||
|
"pyarrow >=17.0.0, <18.0.0",
|
||||||
|
"websockets ==12.0",
|
||||||
|
"msgspec",
|
||||||
|
"tractor",
|
||||||
|
"asyncvnc",
|
||||||
|
"tomlkit",
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.optional-dependencies]
|
||||||
|
uis = [
|
||||||
|
# https://docs.astral.sh/uv/concepts/projects/dependencies/#optional-dependencies
|
||||||
|
# TODO: make sure the levenshtein shit compiles on nix..
|
||||||
|
# rapidfuzz = {extras = ["speedup"], version = "^0.18.0"}
|
||||||
|
"rapidfuzz >=3.2.0, <4.0.0",
|
||||||
|
"qdarkstyle >=3.0.2, <4.0.0",
|
||||||
|
"pyqt6 >=6.7.0, <7.0.0",
|
||||||
|
"pyqtgraph",
|
||||||
|
|
||||||
|
# ------ - ------
|
||||||
|
|
||||||
|
# TODO: add an `--only daemon` group for running non-ui / pikerd
|
||||||
|
# service tree in distributed mode B)
|
||||||
|
# https://docs.astral.sh/uv/concepts/projects/dependencies/#optional-dependencies
|
||||||
|
# [project.optional-dependencies]
|
||||||
|
]
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
|
dev = [
|
||||||
|
"pytest >=6.0.0, <7.0.0",
|
||||||
|
"elasticsearch >=8.9.0, <9.0.0",
|
||||||
|
"xonsh >=0.14.2, <0.15.0",
|
||||||
|
"prompt-toolkit ==3.0.40",
|
||||||
|
"cython >=3.0.0, <4.0.0",
|
||||||
|
"greenback >=1.1.1, <2.0.0",
|
||||||
|
# console ehancements and eventually remote debugging
|
||||||
|
# extras/helpers.
|
||||||
|
# TODO: add a toolset that makes debugging a `pikerd` service
|
||||||
|
# (tree) easy to hack on directly using more or less the local env:
|
||||||
|
# - xonsh + xxh
|
||||||
|
# - rsyscall + pdbp
|
||||||
|
# - actor runtime control console like BEAM/OTP
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.scripts]
|
||||||
|
piker = "piker.cli:cli"
|
||||||
|
pikerd = "piker.cli:pikerd"
|
||||||
|
ledger = "piker.accounting.cli:ledger"
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.sdist]
|
||||||
|
include = ["piker"]
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.wheel]
|
||||||
|
include = ["piker"]
|
||||||
|
|
||||||
|
[tool.uv.sources]
|
||||||
|
pyqtgraph = { git = "https://github.com/pikers/pyqtgraph.git" }
|
||||||
|
asyncvnc = { git = "https://github.com/pikers/asyncvnc.git", branch = "main" }
|
||||||
|
tomlkit = { git = "https://github.com/pikers/tomlkit.git", branch ="piker_pin" }
|
||||||
|
msgspec = { git = "https://github.com/jcrist/msgspec.git" }
|
||||||
|
tractor = { path = "../tractor" }
|
||||||
|
|
Loading…
Reference in New Issue