Compare commits

..

4 Commits

Author SHA1 Message Date
Tyler Goodlet 0f3754ca56 max_pain-script: bit of multi-line fmting 2026-01-01 14:19:56 -05:00
Tyler Goodlet dc8bfcccd8 max_pain: add piker logging, tweak var names, notes and todos 2026-01-01 14:19:56 -05:00
Tyler Goodlet b18b5a7592 deribit: fill out docstr for `.api.get_values_from_cb_normalized_date()` 2026-01-01 14:13:55 -05:00
Tyler Goodlet 08488a9098 Drop unused `assets: dict` 2026-01-01 14:13:55 -05:00
2 changed files with 43 additions and 14 deletions

View File

@ -2,22 +2,29 @@
from decimal import (
Decimal,
)
from pathlib import Path
import numpy as np
import polars as pl
# import polars as pl
import trio
import tractor
from datetime import datetime
from pprint import pformat
# from pprint import pformat
from piker.brokers.deribit.api import (
get_client,
maybe_open_oi_feed,
)
from piker.storage import open_storage_client, StorageClient
from piker.log import get_logger
import sys
import pyqtgraph as pg
from PyQt6 import QtCore
from pyqtgraph import ScatterPlotItem, InfiniteLine
from PyQt6.QtWidgets import QApplication
from cryptofeed.symbols import Symbol
log = get_logger(__name__)
# XXX, use 2 newlines between top level LOC (even between these
# imports and the next function line ;)
@ -47,9 +54,13 @@ async def max_pain_daemon(
kind=kind
)
print(f'Available expiration dates for {currency}-{kind}:')
print(f'{expiry_dates}')
expiry_date = input('Please enter a valid expiration date: ').upper()
log.info(
f'Available expiries for {currency!r}-{kind}:\n'
f'{expiry_dates}\n'
)
expiry_date: str = input(
'Please enter a valid expiration date: '
).upper()
print('Starting little daemon...')
# maybe move this type annot down to the assignment line?
@ -192,10 +203,13 @@ async def max_pain_daemon(
),
], dtype=dtype)
path = await client.write_oi(
path: Path = await client.write_oi(
col_sym_key,
data,
)
# TODO, use std logging like this throughout for status
# emissions on console!
log.info(f'Wrote OI history to {path}')
def get_max_pain(
oi_by_strikes: dict[str, dict[str, Decimal]]
@ -258,7 +272,7 @@ async def max_pain_daemon(
# hardcoded to something, sorry.)
timestamp = msg[1]['timestamp']
max_pain = get_max_pain(oi_by_strikes)
intrinsic_values = get_total_intrinsic_values(oi_by_strikes)
# intrinsic_values = get_total_intrinsic_values(oi_by_strikes)
# graph here
plot_graph(oi_by_strikes, plot)
@ -298,14 +312,27 @@ async def max_pain_daemon(
async def main():
async with tractor.open_nursery() as n:
async with tractor.open_nursery(
debug_mode=True,
loglevel='info',
) as an:
from tractor import log
log.get_console_log(level='info')
p: tractor.Portal = await n.start_actor(
ptl: tractor.Portal = await an.start_actor(
'max_pain_daemon',
enable_modules=[__name__],
infect_asyncio=True,
# ^TODO, we can actually run this in the root-actor now
# if needed as per 2nd "section" in,
# https://pikers.dev/goodboy/tractor/pulls/2
#
# NOTE, will first require us porting to modern
# `tractor:main` though ofc!
)
await p.run(max_pain_daemon)
await ptl.run(max_pain_daemon)
if __name__ == '__main__':
trio.run(main)

View File

@ -1,5 +1,5 @@
# piker: trading gear for hackers
# Copyright (C) Guillermo Rodriguez (in stewardship for piker0)
# Copyright (C) Guillermo Rodriguez (in stewardship for pikers)
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@ -80,7 +80,6 @@ from piker.accounting import (
from piker.data import (
def_iohlcv_fields,
match_from_pairs,
# Struct,
)
from piker.data._web_bs import (
open_jsonrpc_session
@ -195,7 +194,11 @@ def cb_sym_to_deribit_inst(sym: Symbol) -> str:
def get_values_from_cb_normalized_date(expiry_date: str) -> str:
# deribit specific
'''
Convert the `cryptofeed` (expiry) datetime format to our own,
a simple 3 token `str: f'{day}{month}{year}'.
'''
cb_norm = [
'F', 'G', 'H', 'J',
'K', 'M', 'N', 'Q',
@ -328,7 +331,6 @@ class Client:
'''
Return the set of currencies for deribit.
'''
assets = {}
resp = await self._json_rpc_auth_wrapper(
'public/get_currencies',
params={}