Compare commits
4 Commits
17aebf44a9
...
0f3754ca56
| Author | SHA1 | Date |
|---|---|---|
|
|
0f3754ca56 | |
|
|
dc8bfcccd8 | |
|
|
b18b5a7592 | |
|
|
08488a9098 |
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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={}
|
||||
|
|
|
|||
Loading…
Reference in New Issue