onetick-py 1.171.0__py3-none-any.whl → 1.173.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- onetick/py/_version.py +1 -1
- onetick/py/compatibility.py +15 -10
- onetick/py/configuration.py +3 -2
- onetick/py/core/_source/source_methods/writes.py +48 -33
- onetick/py/core/_source/symbol.py +5 -2
- onetick/py/core/column_operations/_methods/methods.py +1 -4
- onetick/py/core/column_operations/accessors/_accessor.py +4 -6
- onetick/py/core/column_operations/accessors/decimal_accessor.py +20 -8
- onetick/py/core/column_operations/accessors/dt_accessor.py +137 -68
- onetick/py/core/column_operations/accessors/float_accessor.py +35 -15
- onetick/py/core/column_operations/accessors/str_accessor.py +0 -7
- onetick/py/core/column_operations/base.py +72 -12
- onetick/py/core/multi_output_source.py +41 -2
- onetick/py/db/db.py +2 -2
- onetick/py/functions.py +7 -1
- onetick/py/math.py +137 -28
- onetick/py/run.py +3 -1
- onetick/py/types.py +12 -19
- onetick/py/utils/tz.py +8 -6
- {onetick_py-1.171.0.dist-info → onetick_py-1.173.0.dist-info}/METADATA +15 -27
- {onetick_py-1.171.0.dist-info → onetick_py-1.173.0.dist-info}/RECORD +25 -25
- {onetick_py-1.171.0.dist-info → onetick_py-1.173.0.dist-info}/WHEEL +0 -0
- {onetick_py-1.171.0.dist-info → onetick_py-1.173.0.dist-info}/entry_points.txt +0 -0
- {onetick_py-1.171.0.dist-info → onetick_py-1.173.0.dist-info}/licenses/LICENSE +0 -0
- {onetick_py-1.171.0.dist-info → onetick_py-1.173.0.dist-info}/top_level.txt +0 -0
onetick/py/math.py
CHANGED
|
@@ -760,7 +760,12 @@ def gcd(value1, value2):
|
|
|
760
760
|
|
|
761
761
|
def floor(value):
|
|
762
762
|
"""
|
|
763
|
-
Returns a
|
|
763
|
+
Returns a float value representing the largest number that is less than or equal to the ``value``.
|
|
764
|
+
|
|
765
|
+
Note
|
|
766
|
+
----
|
|
767
|
+
Rounding :class:`otp.nan <onetick.py.nan>` returns NaN
|
|
768
|
+
and rounding :class:`otp.inf <onetick.py.inf>` returns Infinity.
|
|
764
769
|
|
|
765
770
|
Parameters
|
|
766
771
|
----------
|
|
@@ -772,29 +777,41 @@ def floor(value):
|
|
|
772
777
|
|
|
773
778
|
Examples
|
|
774
779
|
--------
|
|
775
|
-
>>> data = otp.Ticks(A=[-1.7, -1.5, -1.2, -1, 0 , 1, 1.2, 1.5, 1.7])
|
|
780
|
+
>>> data = otp.Ticks(A=[-1.7, -1.5, -1.2, -1, 0 , 1, 1.2, 1.5, 1.7, -otp.inf, otp.inf, otp.nan])
|
|
776
781
|
>>> data['FLOOR'] = otp.math.floor(data['A'])
|
|
777
782
|
>>> otp.run(data)
|
|
778
|
-
|
|
779
|
-
0
|
|
780
|
-
1
|
|
781
|
-
2
|
|
782
|
-
3
|
|
783
|
-
4
|
|
784
|
-
5
|
|
785
|
-
6
|
|
786
|
-
7
|
|
787
|
-
8
|
|
788
|
-
|
|
783
|
+
Time A FLOOR
|
|
784
|
+
0 2003-12-01 00:00:00.000 -1.7 -2.0
|
|
785
|
+
1 2003-12-01 00:00:00.001 -1.5 -2.0
|
|
786
|
+
2 2003-12-01 00:00:00.002 -1.2 -2.0
|
|
787
|
+
3 2003-12-01 00:00:00.003 -1.0 -1.0
|
|
788
|
+
4 2003-12-01 00:00:00.004 0.0 0.0
|
|
789
|
+
5 2003-12-01 00:00:00.005 1.0 1.0
|
|
790
|
+
6 2003-12-01 00:00:00.006 1.2 1.0
|
|
791
|
+
7 2003-12-01 00:00:00.007 1.5 1.0
|
|
792
|
+
8 2003-12-01 00:00:00.008 1.7 1.0
|
|
793
|
+
9 2003-12-01 00:00:00.009 -inf -inf
|
|
794
|
+
10 2003-12-01 00:00:00.010 inf inf
|
|
795
|
+
11 2003-12-01 00:00:00.011 NaN NaN
|
|
796
|
+
"""
|
|
797
|
+
def fun(v):
|
|
798
|
+
v = value2str(v)
|
|
799
|
+
return f'CASE({v}, NAN(), NAN(), INFINITY(), INFINITY(), -INFINITY(), -INFINITY(), FLOOR({v}) * 1.0)', float
|
|
800
|
+
|
|
789
801
|
return _Operation(
|
|
790
|
-
op_func=
|
|
802
|
+
op_func=fun,
|
|
791
803
|
op_params=[value],
|
|
792
804
|
)
|
|
793
805
|
|
|
794
806
|
|
|
795
807
|
def ceil(value):
|
|
796
808
|
"""
|
|
797
|
-
Returns a
|
|
809
|
+
Returns a float value representing the smallest number that is greater than or equal to the ``value``.
|
|
810
|
+
|
|
811
|
+
Note
|
|
812
|
+
----
|
|
813
|
+
Rounding :class:`otp.nan <onetick.py.nan>` returns NaN
|
|
814
|
+
and rounding :class:`otp.inf <onetick.py.inf>` returns Infinity.
|
|
798
815
|
|
|
799
816
|
Parameters
|
|
800
817
|
----------
|
|
@@ -806,21 +823,113 @@ def ceil(value):
|
|
|
806
823
|
|
|
807
824
|
Examples
|
|
808
825
|
--------
|
|
809
|
-
>>> data = otp.Ticks(A=[-1.7, -1.5, -1.2, -1, 0 , 1, 1.2, 1.5, 1.7])
|
|
826
|
+
>>> data = otp.Ticks(A=[-1.7, -1.5, -1.2, -1, 0 , 1, 1.2, 1.5, 1.7, -otp.inf, otp.inf, otp.nan])
|
|
810
827
|
>>> data['CEIL'] = otp.math.ceil(data['A'])
|
|
811
828
|
>>> otp.run(data)
|
|
812
|
-
|
|
813
|
-
0
|
|
814
|
-
1
|
|
815
|
-
2
|
|
816
|
-
3
|
|
817
|
-
4
|
|
818
|
-
5
|
|
819
|
-
6
|
|
820
|
-
7
|
|
821
|
-
8
|
|
822
|
-
|
|
829
|
+
Time A CEIL
|
|
830
|
+
0 2003-12-01 00:00:00.000 -1.7 -1.0
|
|
831
|
+
1 2003-12-01 00:00:00.001 -1.5 -1.0
|
|
832
|
+
2 2003-12-01 00:00:00.002 -1.2 -1.0
|
|
833
|
+
3 2003-12-01 00:00:00.003 -1.0 -1.0
|
|
834
|
+
4 2003-12-01 00:00:00.004 0.0 0.0
|
|
835
|
+
5 2003-12-01 00:00:00.005 1.0 1.0
|
|
836
|
+
6 2003-12-01 00:00:00.006 1.2 2.0
|
|
837
|
+
7 2003-12-01 00:00:00.007 1.5 2.0
|
|
838
|
+
8 2003-12-01 00:00:00.008 1.7 2.0
|
|
839
|
+
9 2003-12-01 00:00:00.009 -inf -inf
|
|
840
|
+
10 2003-12-01 00:00:00.010 inf inf
|
|
841
|
+
11 2003-12-01 00:00:00.011 NaN NaN
|
|
842
|
+
"""
|
|
843
|
+
def fun(v):
|
|
844
|
+
v = value2str(v)
|
|
845
|
+
return f'CASE({v}, NAN(), NAN(), INFINITY(), INFINITY(), -INFINITY(), -INFINITY(), CEIL({v}) * 1.0)', float
|
|
846
|
+
|
|
823
847
|
return _Operation(
|
|
824
|
-
op_func=
|
|
848
|
+
op_func=fun,
|
|
825
849
|
op_params=[value],
|
|
826
850
|
)
|
|
851
|
+
|
|
852
|
+
|
|
853
|
+
def round(value, precision=0, rounding_method='upward'):
|
|
854
|
+
"""
|
|
855
|
+
Rounds value with specified ``precision`` and ``rounding_method``.
|
|
856
|
+
|
|
857
|
+
Rounding :class:`otp.nan <onetick.py.nan>` returns NaN
|
|
858
|
+
and rounding :class:`otp.inf <onetick.py.inf>` returns Infinity.
|
|
859
|
+
|
|
860
|
+
Parameters
|
|
861
|
+
----------
|
|
862
|
+
precision: int
|
|
863
|
+
Number from -12 to 12.
|
|
864
|
+
Positive precision is precision after the floating point.
|
|
865
|
+
Negative precision is precision before the floating point (and the fraction part is dropped in this case).
|
|
866
|
+
rounding_method: str
|
|
867
|
+
Used for values that are exactly half-way between two integers (when the fraction part of value is exactly 0.5).
|
|
868
|
+
Available values are **upward**, **downward**, **towards_zero**, **away_from_zero**.
|
|
869
|
+
Default is **upward**.
|
|
870
|
+
|
|
871
|
+
Examples
|
|
872
|
+
--------
|
|
873
|
+
|
|
874
|
+
Different rounding methods produce different results for values that are exactly half-way between two integers:
|
|
875
|
+
|
|
876
|
+
>>> t = otp.Ticks(A=[-123.45, 123.45, -123.4, 123.6])
|
|
877
|
+
>>> t['UPWARD'] = otp.math.round(t['A'], precision=1, rounding_method='upward')
|
|
878
|
+
>>> t['DOWNWARD'] = otp.math.round(t['A'], precision=1, rounding_method='downward')
|
|
879
|
+
>>> t['TOWARDS_ZERO'] = otp.math.round(t['A'], precision=1, rounding_method='towards_zero')
|
|
880
|
+
>>> t['AWAY_FROM_ZERO'] = otp.math.round(t['A'], precision=1, rounding_method='away_from_zero')
|
|
881
|
+
>>> otp.run(t).head(2)
|
|
882
|
+
Time A UPWARD DOWNWARD TOWARDS_ZERO AWAY_FROM_ZERO
|
|
883
|
+
0 2003-12-01 00:00:00.000 -123.45 -123.4 -123.5 -123.4 -123.5
|
|
884
|
+
1 2003-12-01 00:00:00.001 123.45 123.5 123.4 123.4 123.5
|
|
885
|
+
|
|
886
|
+
Note that for other cases all methods produce the same results:
|
|
887
|
+
|
|
888
|
+
>>> otp.run(t).tail(2)
|
|
889
|
+
Time A UPWARD DOWNWARD TOWARDS_ZERO AWAY_FROM_ZERO
|
|
890
|
+
2 2003-12-01 00:00:00.002 -123.4 -123.4 -123.4 -123.4 -123.4
|
|
891
|
+
3 2003-12-01 00:00:00.003 123.6 123.6 123.6 123.6 123.6
|
|
892
|
+
|
|
893
|
+
Positive precision truncates to the number of digits *after* floating point:
|
|
894
|
+
|
|
895
|
+
>>> t = otp.Ticks(A=[-123.45, 123.45])
|
|
896
|
+
>>> t['ROUND1'] = otp.math.round(t['A'], 1)
|
|
897
|
+
>>> t['ROUND2'] = otp.math.round(t['A'], 2)
|
|
898
|
+
>>> otp.run(t)
|
|
899
|
+
Time A ROUND1 ROUND2
|
|
900
|
+
0 2003-12-01 00:00:00.000 -123.45 -123.4 -123.45
|
|
901
|
+
1 2003-12-01 00:00:00.001 123.45 123.5 123.45
|
|
902
|
+
|
|
903
|
+
Negative precision truncates to the number of digits *before* floating point
|
|
904
|
+
(and the fraction part is dropped in this case):
|
|
905
|
+
|
|
906
|
+
>>> t = otp.Ticks(A=[-123.45, 123.45])
|
|
907
|
+
>>> t['ROUND_M1'] = otp.math.round(t['A'], -1)
|
|
908
|
+
>>> t['ROUND_M2'] = otp.math.round(t['A'], -2)
|
|
909
|
+
>>> otp.run(t)
|
|
910
|
+
Time A ROUND_M1 ROUND_M2
|
|
911
|
+
0 2003-12-01 00:00:00.000 -123.45 -120.0 -100.0
|
|
912
|
+
1 2003-12-01 00:00:00.001 123.45 120.0 100.0
|
|
913
|
+
|
|
914
|
+
Rounding :class:`otp.nan <onetick.py.nan>` returns NaN
|
|
915
|
+
and rounding :class:`otp.inf <onetick.py.inf>` returns Infinity in all cases:
|
|
916
|
+
|
|
917
|
+
>>> t = otp.Ticks(A=[otp.inf, -otp.inf, otp.nan])
|
|
918
|
+
>>> t['ROUND_0'] = otp.math.round(t['A'])
|
|
919
|
+
>>> t['ROUND_P2'] = otp.math.round(t['A'], 2)
|
|
920
|
+
>>> t['ROUND_M2'] = otp.math.round(t['A'], -2)
|
|
921
|
+
>>> otp.run(t)
|
|
922
|
+
Time A ROUND_0 ROUND_P2 ROUND_M2
|
|
923
|
+
0 2003-12-01 00:00:00.000 inf inf inf inf
|
|
924
|
+
1 2003-12-01 00:00:00.001 -inf -inf -inf -inf
|
|
925
|
+
2 2003-12-01 00:00:00.002 NaN NaN NaN NaN
|
|
926
|
+
"""
|
|
927
|
+
if not -12 <= precision <= 12:
|
|
928
|
+
raise ValueError("Parameter 'precision' must be an integer in range [-12, 12]")
|
|
929
|
+
supported_rounding_methods = {'upward', 'downward', 'towards_zero', 'away_from_zero'}
|
|
930
|
+
if rounding_method not in supported_rounding_methods:
|
|
931
|
+
raise ValueError(f"Parameter 'rounding_method' must be one of {supported_rounding_methods}")
|
|
932
|
+
return _Operation(
|
|
933
|
+
op_func=lambda v, p, r: (f'ROUND_DOUBLE({value2str(v)},{value2str(p)},{value2str(r)})', float),
|
|
934
|
+
op_params=[value, precision, rounding_method],
|
|
935
|
+
)
|
onetick/py/run.py
CHANGED
|
@@ -557,8 +557,10 @@ def run(query: Union[Callable, Dict, otp.Source, otp.MultiOutputSource, # NOSON
|
|
|
557
557
|
kwargs['password'] = password
|
|
558
558
|
|
|
559
559
|
max_expected_ticks_per_symbol = max_expected_ticks_per_symbol or otp.config.max_expected_ticks_per_symbol
|
|
560
|
-
if has_max_expected_ticks_per_symbol(throw_warning=True):
|
|
560
|
+
if max_expected_ticks_per_symbol is not None and has_max_expected_ticks_per_symbol(throw_warning=True):
|
|
561
561
|
kwargs['max_expected_ticks_per_symbol'] = max_expected_ticks_per_symbol
|
|
562
|
+
elif max_expected_ticks_per_symbol is None and has_max_expected_ticks_per_symbol(throw_warning=False):
|
|
563
|
+
kwargs['max_expected_ticks_per_symbol'] = 2000
|
|
562
564
|
|
|
563
565
|
if encoding is not None and has_query_encoding_parameter(throw_warning=True):
|
|
564
566
|
kwargs['encoding'] = encoding
|
onetick/py/types.py
CHANGED
|
@@ -3,14 +3,14 @@ import functools
|
|
|
3
3
|
import inspect
|
|
4
4
|
import warnings
|
|
5
5
|
from typing import Optional, Type, Union
|
|
6
|
-
from packaging.version import parse as parse_version
|
|
7
|
-
|
|
8
|
-
import pandas as pd
|
|
9
|
-
import numpy as np
|
|
10
6
|
from datetime import date as _date
|
|
11
7
|
from datetime import datetime as _datetime
|
|
8
|
+
from datetime import timedelta as _timedelta
|
|
12
9
|
|
|
10
|
+
import pandas as pd
|
|
11
|
+
import numpy as np
|
|
13
12
|
from pandas.tseries import offsets
|
|
13
|
+
from packaging.version import parse as parse_version
|
|
14
14
|
|
|
15
15
|
import onetick.py as otp
|
|
16
16
|
from onetick.py.otq import otq, pyomd
|
|
@@ -1095,7 +1095,9 @@ class datetime(AbstractTime):
|
|
|
1095
1095
|
def _process_timezones_args(self, tz, tzinfo):
|
|
1096
1096
|
if tz is not None:
|
|
1097
1097
|
if tzinfo is None:
|
|
1098
|
-
|
|
1098
|
+
# parameter tz in pandas.Timestamp is broken https://github.com/pandas-dev/pandas/issues/31929
|
|
1099
|
+
# it is fixed in pandas>=2.0.0, but we need to support older versions
|
|
1100
|
+
tzinfo = get_tzfile_by_name(tz)
|
|
1099
1101
|
tz = None
|
|
1100
1102
|
else:
|
|
1101
1103
|
raise ValueError(
|
|
@@ -1936,21 +1938,12 @@ def is_time_type(time):
|
|
|
1936
1938
|
|
|
1937
1939
|
def next_day(dt_obj: Union[_date, _datetime, date, datetime, pd.Timestamp]) -> _datetime:
|
|
1938
1940
|
"""
|
|
1939
|
-
Return next day of ``dt_obj`` as datetime.datetime
|
|
1940
|
-
"""
|
|
1941
|
-
updated_dt = dt_obj + Day(1)
|
|
1942
|
-
|
|
1943
|
-
# If we switch ts on timezone transition time, ts changes its timezone offset
|
|
1944
|
-
if hasattr(dt_obj, "tzinfo") and updated_dt.tzinfo != dt_obj.tzinfo:
|
|
1945
|
-
dt_offset = dt_obj.tzinfo.utcoffset(dt_obj)
|
|
1946
|
-
updated_dt_offset = updated_dt.tzinfo.utcoffset(updated_dt)
|
|
1941
|
+
Return the start of the next day of ``dt_obj`` as timezone-naive :py:class:`datetime.datetime`.
|
|
1947
1942
|
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
return _datetime(updated_date.year, updated_date.month, updated_date.day)
|
|
1943
|
+
Next day in this case means simply incrementing day/month/year number,
|
|
1944
|
+
not adding 24 hours (which may return the same date on DST days).
|
|
1945
|
+
"""
|
|
1946
|
+
return _datetime(dt_obj.year, dt_obj.month, dt_obj.day) + _timedelta(days=1)
|
|
1954
1947
|
|
|
1955
1948
|
|
|
1956
1949
|
def default_by_type(dtype):
|
onetick/py/utils/tz.py
CHANGED
|
@@ -3,8 +3,8 @@ import sys
|
|
|
3
3
|
import warnings
|
|
4
4
|
|
|
5
5
|
from typing import Optional
|
|
6
|
+
from contextlib import suppress
|
|
6
7
|
|
|
7
|
-
import pytz
|
|
8
8
|
import dateutil.tz
|
|
9
9
|
import tzlocal
|
|
10
10
|
|
|
@@ -15,8 +15,8 @@ from onetick.py.backports import zoneinfo
|
|
|
15
15
|
def get_tzfile_by_name(timezone):
|
|
16
16
|
if isinstance(timezone, str):
|
|
17
17
|
try:
|
|
18
|
-
timezone =
|
|
19
|
-
except
|
|
18
|
+
timezone = zoneinfo.ZoneInfo(timezone)
|
|
19
|
+
except zoneinfo.ZoneInfoNotFoundError:
|
|
20
20
|
timezone = dateutil.tz.gettz(timezone)
|
|
21
21
|
return timezone
|
|
22
22
|
|
|
@@ -35,8 +35,10 @@ def get_timezone_from_datetime(dt) -> Optional[str]:
|
|
|
35
35
|
return None
|
|
36
36
|
if tzinfo is datetime.timezone.utc:
|
|
37
37
|
return 'UTC'
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
with suppress(ModuleNotFoundError):
|
|
39
|
+
import pytz
|
|
40
|
+
if isinstance(tzinfo, pytz.BaseTzInfo):
|
|
41
|
+
return tzinfo.zone
|
|
40
42
|
if isinstance(tzinfo, zoneinfo.ZoneInfo):
|
|
41
43
|
return tzinfo.key
|
|
42
44
|
if isinstance(tzinfo, dateutil.tz.tzlocal):
|
|
@@ -48,7 +50,7 @@ def get_timezone_from_datetime(dt) -> Optional[str]:
|
|
|
48
50
|
warnings.warn(
|
|
49
51
|
"It's not recommended to use dateutil.tz timezones on Windows platform. "
|
|
50
52
|
"Function 'get_timezone_from_datetime' can't guarantee correct results in this case. "
|
|
51
|
-
"Please, use
|
|
53
|
+
"Please, use zoneinfo timezones instead."
|
|
52
54
|
)
|
|
53
55
|
if hasattr(tzinfo, '_filename'):
|
|
54
56
|
if tzinfo._filename == '/etc/localtime':
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: onetick-py
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.173.0
|
|
4
4
|
Summary: Python package that allows you to work with OneTick
|
|
5
5
|
Author-email: solutions <solutions@onetick.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -19,40 +19,26 @@ Classifier: Environment :: Console
|
|
|
19
19
|
Requires-Python: >=3.9
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
License-File: LICENSE
|
|
22
|
-
Requires-Dist: pandas
|
|
23
|
-
Requires-Dist:
|
|
24
|
-
Requires-Dist: pandas<2.1.0,>=1.3.4; python_version == "3.8"
|
|
25
|
-
Requires-Dist: pandas<2.3.0,>=1.3.4; python_version == "3.9"
|
|
26
|
-
Requires-Dist: pandas<2.3.0,>=1.5.1; python_version == "3.10"
|
|
27
|
-
Requires-Dist: pandas<2.3.0,>=1.5.3; python_version == "3.11"
|
|
28
|
-
Requires-Dist: pandas<2.3.0,>=2.2.0; python_version >= "3.12"
|
|
29
|
-
Requires-Dist: pyarrow; python_version >= "3.12"
|
|
30
|
-
Requires-Dist: numpy==1.19.5; python_version <= "3.7"
|
|
31
|
-
Requires-Dist: numpy==1.21.6; python_version == "3.8"
|
|
32
|
-
Requires-Dist: numpy<2.3.0,>=1.20.3; python_version >= "3.9"
|
|
22
|
+
Requires-Dist: pandas>=1.5.2
|
|
23
|
+
Requires-Dist: numpy
|
|
33
24
|
Requires-Dist: coolname
|
|
34
25
|
Requires-Dist: python-dateutil
|
|
35
26
|
Requires-Dist: python-dotenv
|
|
36
27
|
Requires-Dist: tzlocal
|
|
37
28
|
Requires-Dist: tzdata
|
|
38
|
-
Requires-Dist: backports.zoneinfo==0.2.1; python_version < "3.9"
|
|
39
|
-
Requires-Dist: typing_extensions==4.7.1; python_version < "3.8"
|
|
40
|
-
Requires-Dist: singledispatchmethod==1.0; python_version < "3.8"
|
|
41
|
-
Requires-Dist: backports.cached-property==1.0.2; python_version <= "3.8"
|
|
42
|
-
Requires-Dist: backports.functools-lru-cache==1.6.6; python_version <= "3.8"
|
|
43
|
-
Requires-Dist: astunparse==1.6.3; python_version <= "3.8"
|
|
44
29
|
Requires-Dist: graphviz==0.20.1; python_version > "3.6"
|
|
45
30
|
Requires-Dist: packaging>=21.0
|
|
46
31
|
Provides-Extra: strict
|
|
47
|
-
Requires-Dist: numpy==1.
|
|
48
|
-
Requires-Dist: numpy==1.
|
|
49
|
-
Requires-Dist: numpy==1.
|
|
50
|
-
Requires-Dist: numpy==1.26.4;
|
|
51
|
-
Requires-Dist: pandas==1.
|
|
52
|
-
Requires-Dist: pandas==1.3
|
|
53
|
-
Requires-Dist: pandas==1.5.1; python_version == "3.10" and extra == "strict"
|
|
32
|
+
Requires-Dist: numpy==1.23.0; python_version == "3.9" and extra == "strict"
|
|
33
|
+
Requires-Dist: numpy==1.23.0; python_version == "3.10" and extra == "strict"
|
|
34
|
+
Requires-Dist: numpy==1.26.4; python_version == "3.11" and extra == "strict"
|
|
35
|
+
Requires-Dist: numpy==1.26.4; python_version == "3.12" and extra == "strict"
|
|
36
|
+
Requires-Dist: pandas==1.5.2; python_version == "3.9" and extra == "strict"
|
|
37
|
+
Requires-Dist: pandas==1.5.3; python_version == "3.10" and extra == "strict"
|
|
54
38
|
Requires-Dist: pandas==1.5.3; python_version == "3.11" and extra == "strict"
|
|
55
|
-
Requires-Dist: pandas==2.2.0; python_version
|
|
39
|
+
Requires-Dist: pandas==2.2.0; python_version == "3.12" and extra == "strict"
|
|
40
|
+
Requires-Dist: pandas==2.3.0; python_version == "3.13" and extra == "strict"
|
|
41
|
+
Requires-Dist: pandas==2.3.3; python_version == "3.14" and extra == "strict"
|
|
56
42
|
Provides-Extra: webapi
|
|
57
43
|
Requires-Dist: onetick.query_webapi; extra == "webapi"
|
|
58
44
|
Provides-Extra: polars
|
|
@@ -85,7 +71,7 @@ The latest version of ``onetick-py`` is available on PyPI: <https://pypi.org/pro
|
|
|
85
71
|
|
|
86
72
|
pip install onetick-py[webapi]
|
|
87
73
|
|
|
88
|
-
Use ``webapi`` extra to easily use it with remote OneTick Cloud
|
|
74
|
+
Use ``webapi`` extra to easily use it with remote OneTick REST Servers, such as [OneTick Cloud](https://www.onetick.com/cloud-services).
|
|
89
75
|
|
|
90
76
|
See [Getting Started](https://docs.pip.distribution.sol.onetick.com/static/getting_started/root.html)
|
|
91
77
|
section in the documentation to see how quickly set up ``onetick-py`` configuration
|
|
@@ -112,6 +98,8 @@ section in the documentation.
|
|
|
112
98
|
- **Data Visualization**: Compatible with OneTick's visualization tool, OneTick Dashboard.
|
|
113
99
|
- **Machine Learning**: Integrates with the OneTick ML library [onetick-ml](https://dsframework.pip.distribution.sol.onetick.com/intro.html).
|
|
114
100
|
- **Industry Applications**: Industry leading OneTick's Trade Surveillance and BestEx/TCA solutions are written in ``onetick.py``.
|
|
101
|
+
- **Back Testing**: Retrieve historic market data and metrics.
|
|
102
|
+
- **Market Microstructure**: Consolidated Book Depth analysis.
|
|
115
103
|
|
|
116
104
|
## Advantages Over Competitors
|
|
117
105
|
|
|
@@ -13,24 +13,24 @@ onetick/lib/__init__.py,sha256=Rp7CIDoA4E6LIm1f2mNvl_5b_n-0U3suA3FmBXbmKoU,114
|
|
|
13
13
|
onetick/lib/instance.py,sha256=3FJB8PWs2ap-EGb6DzsnLRL2meTMUViTdy343m6tHvM,4825
|
|
14
14
|
onetick/py/__init__.py,sha256=Ge1Ekl6OHRjm5KrXojq3AzLCaUGvLNWuaIK0C9DdwWU,11164
|
|
15
15
|
onetick/py/_stack_info.py,sha256=PHZOkW_fK7Fbl4YEj5CaYK9L6vh4j-bUU7_cSYOWZ30,2546
|
|
16
|
-
onetick/py/_version.py,sha256=
|
|
16
|
+
onetick/py/_version.py,sha256=xgAl00OwXSmPbqAEjJJgqhprH9I04svQhlQygpZzYfQ,76
|
|
17
17
|
onetick/py/backports.py,sha256=mR00mxe7E7UgBljf-Wa93Mo6lpi-C4Op561uhPUoEt8,815
|
|
18
18
|
onetick/py/cache.py,sha256=BBZg8n0AGjZzZapg4752LkSZdX5C6DGf7vU9sAStv6A,12798
|
|
19
|
-
onetick/py/compatibility.py,sha256=
|
|
20
|
-
onetick/py/configuration.py,sha256=
|
|
21
|
-
onetick/py/functions.py,sha256=
|
|
19
|
+
onetick/py/compatibility.py,sha256=PyQVs4h8vs_9qKocb117jyu1sNmUvqHj9o9r9NqI-9E,31036
|
|
20
|
+
onetick/py/configuration.py,sha256=KCX44v_nEOZDvo-rItIrNVKKvqyM73QUwIivez2VHvY,28448
|
|
21
|
+
onetick/py/functions.py,sha256=yJKL4thjNh_u-DKY08rCDMGJO_IMAeN2Odu70Q9U3Ew,97937
|
|
22
22
|
onetick/py/license.py,sha256=50dsFrE-NKsPOdkAoyxHr44bH8DzFCr_6TabX0JH6tQ,6140
|
|
23
23
|
onetick/py/log.py,sha256=Els2drZcVjJrD6kvbwgFGEpg6jAacoUEtyN6rCaauuk,2723
|
|
24
|
-
onetick/py/math.py,sha256=
|
|
24
|
+
onetick/py/math.py,sha256=MZvlyUjxOWGJvmxK8pfMkCr4THM52AE6NyGEidgDMyE,26311
|
|
25
25
|
onetick/py/misc.py,sha256=mD-EJslLGjQ0ROEez76HvOY0tsX8_1bC1QOkyHY9FZ8,13934
|
|
26
26
|
onetick/py/otq.py,sha256=VSdCrp3zTzNQHv9gM_xE4Al4ujBsio7uWk3SqU4eC4Y,8271
|
|
27
27
|
onetick/py/pyomd_mock.py,sha256=A7IIUraN9yCsPhvnHXQUZrmwFjlh7vofSnYm4G7bdsc,2006
|
|
28
|
-
onetick/py/run.py,sha256=
|
|
28
|
+
onetick/py/run.py,sha256=r0d7FHnMRabxS47W8ilH5diT1XdK3n5Udu7lsQ8u3eA,40627
|
|
29
29
|
onetick/py/servers.py,sha256=h6l0X55kcnpI25bZcYaBpPAAGBZjqk9mt1SQe4xZrh0,6840
|
|
30
30
|
onetick/py/session.py,sha256=AqoS7BFN_Sz3JU2CAaZm0Bro8CmUy6VjmoDjwOU1wYM,49591
|
|
31
31
|
onetick/py/sql.py,sha256=kJ0732bZ0OGF8x3VzcOUs38zEGsxcd1nZOSN75VKXhA,2993
|
|
32
32
|
onetick/py/state.py,sha256=giQpUUXWwuz_CL_VvxNQDaM71LAMPqeRgHfoGhS1gTk,10330
|
|
33
|
-
onetick/py/types.py,sha256=
|
|
33
|
+
onetick/py/types.py,sha256=U4FSaMN_y1OUrcN6reVidbew-X2jIWj6S_lS6GvYsUo,64599
|
|
34
34
|
onetick/py/aggregations/__init__.py,sha256=02WnTc9ocTp34OkGyXRHY2QAZi_QjDMHClE5tvx6Gtk,736
|
|
35
35
|
onetick/py/aggregations/_base.py,sha256=YQWlFYlq_QvGwTIaNGuyoU8rQsYfx-Yd-lNNq4R_o6o,25702
|
|
36
36
|
onetick/py/aggregations/_docs.py,sha256=7pz6XIhRuP_1vuOYO9UfTlzl6zGD2_jwbPMfJPOX-M8,34798
|
|
@@ -51,7 +51,7 @@ onetick/py/core/cut_builder.py,sha256=rj5aPJ25Dr5fsd9Dw1SO8k9kPGy0hV06anxFqBppFW
|
|
|
51
51
|
onetick/py/core/db_constants.py,sha256=OqBbBKLECf8Bw8ylw30jc72xgCJ0gRIC-K-QkkbQ4LI,437
|
|
52
52
|
onetick/py/core/eval_query.py,sha256=mcsOVlQ2vNSfZ-tRUB2z1gdiMJw4MpU2fK2hW-ua3e4,11528
|
|
53
53
|
onetick/py/core/lambda_object.py,sha256=ayob_2c2XYSG7vFsqp-2b9FSPD-3TFReLbx3de3tkqE,16812
|
|
54
|
-
onetick/py/core/multi_output_source.py,sha256=
|
|
54
|
+
onetick/py/core/multi_output_source.py,sha256=f3dXr9kwmED77oWDFVr9cn44aYiJxC81loq2pX4u50Q,8766
|
|
55
55
|
onetick/py/core/per_tick_script.py,sha256=I3pfidriS1TrFPc3DAABt91GKMgby9P_8KBatiFQx6U,83322
|
|
56
56
|
onetick/py/core/query_inspector.py,sha256=Jwnw7qUVvjvaT63mQ5PkUSy8x36knoxWrNll3aXuLZw,16440
|
|
57
57
|
onetick/py/core/source.py,sha256=AX4DUK1frV_FUCG5sywsn42xYX7Y2sYC7vMCOq6TeRg,63998
|
|
@@ -68,7 +68,7 @@ onetick/py/core/_internal/_per_tick_scripts/tick_list_sort_template.script,sha25
|
|
|
68
68
|
onetick/py/core/_source/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
69
|
onetick/py/core/_source/_symbol_param.py,sha256=odFDK85lIa_mqQW-yA4ozz9DFPqWA0qWMjY0UDkniDQ,3233
|
|
70
70
|
onetick/py/core/_source/schema.py,sha256=WWaa2HtSNNp1G4Z4Hx85fnUJpTvpBnX7xmDq3Jct9XM,2619
|
|
71
|
-
onetick/py/core/_source/symbol.py,sha256=
|
|
71
|
+
onetick/py/core/_source/symbol.py,sha256=H274Xd-f_0IqF6jMKmxIvQj1lGD-3F54E27y8A-lSYA,8269
|
|
72
72
|
onetick/py/core/_source/tmp_otq.py,sha256=I4FZdmo-_uIX0QIEMup9v2IgDB2aPEKsRu3y8z8YK3Y,9010
|
|
73
73
|
onetick/py/core/_source/source_methods/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
74
74
|
onetick/py/core/_source/source_methods/aggregations.py,sha256=EBdHV8IFwdptPDxQncHjtXkNr6lOCvp06OmjBzFs4AU,27526
|
|
@@ -88,23 +88,23 @@ onetick/py/core/_source/source_methods/sorts.py,sha256=tDFt3rObNHP-S_HOtDd6SLpgk
|
|
|
88
88
|
onetick/py/core/_source/source_methods/switches.py,sha256=pcnfT45QWn87qq1pWkvZbqeEoM7lrq8qNPxM8g9raxs,3846
|
|
89
89
|
onetick/py/core/_source/source_methods/symbols.py,sha256=MG0dgVVVJ6fD_-GJkkXEgTeAsfS79ymJWmuKSL-0QSs,3968
|
|
90
90
|
onetick/py/core/_source/source_methods/times.py,sha256=2kbLHG-3RQM6uWmw8pBGDiAz4R83KK46Tp1smTY6SR8,27665
|
|
91
|
-
onetick/py/core/_source/source_methods/writes.py,sha256=
|
|
91
|
+
onetick/py/core/_source/source_methods/writes.py,sha256=fPUbiqlm30Kb4QzXZLtWCsQiTFBDxK5oOWuVyfVXbYM,42717
|
|
92
92
|
onetick/py/core/column_operations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
|
-
onetick/py/core/column_operations/base.py,sha256=
|
|
93
|
+
onetick/py/core/column_operations/base.py,sha256=Kcwfd4PErCGLSbkqtFKY6SZL1-pksWHB-Pc-5A8I3WM,36135
|
|
94
94
|
onetick/py/core/column_operations/_methods/__init__.py,sha256=_C5hpQG51MingtWW2N8vYzSVFpR314xIrtukBfEfPMk,207
|
|
95
95
|
onetick/py/core/column_operations/_methods/_internal.py,sha256=M04DbbD9DjA3NrrbibuQPje8ylkaYnVB5Nmlwx1RvaE,878
|
|
96
96
|
onetick/py/core/column_operations/_methods/conversions.py,sha256=QB8ZKJi5qlV8ydPn43nRHa3HMkaXCDV2Fkrq2gnVQ6U,7001
|
|
97
|
-
onetick/py/core/column_operations/_methods/methods.py,sha256
|
|
97
|
+
onetick/py/core/column_operations/_methods/methods.py,sha256=OaXiDcdPYXnPlWhwD-BCac5UAecZFnEKCkxBpQOVB5E,11054
|
|
98
98
|
onetick/py/core/column_operations/_methods/op_types.py,sha256=rUMrtIPCp7TYYJIK4f836KxZIcvW60MYv3cYTGMpfRA,5004
|
|
99
99
|
onetick/py/core/column_operations/accessors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
100
|
-
onetick/py/core/column_operations/accessors/_accessor.py,sha256=
|
|
101
|
-
onetick/py/core/column_operations/accessors/decimal_accessor.py,sha256=
|
|
102
|
-
onetick/py/core/column_operations/accessors/dt_accessor.py,sha256=
|
|
103
|
-
onetick/py/core/column_operations/accessors/float_accessor.py,sha256=
|
|
104
|
-
onetick/py/core/column_operations/accessors/str_accessor.py,sha256=
|
|
100
|
+
onetick/py/core/column_operations/accessors/_accessor.py,sha256=b5K4OQmnO4NeFK1QsKjgZ1WfEyBjxKWMkb12RBbnGXQ,983
|
|
101
|
+
onetick/py/core/column_operations/accessors/decimal_accessor.py,sha256=DwgJ-as0p_gex6UGxhxhsn9chSpne5YV-t1ntvr-saw,3345
|
|
102
|
+
onetick/py/core/column_operations/accessors/dt_accessor.py,sha256=UeY7UNUiaLdrX0S68SuEk7gXASGCjJoRdTq0pm30ktQ,18616
|
|
103
|
+
onetick/py/core/column_operations/accessors/float_accessor.py,sha256=IjZNrUzdT_u1szJFOI5ivExbvzC5KwiHwz6CFMMZRo0,5994
|
|
104
|
+
onetick/py/core/column_operations/accessors/str_accessor.py,sha256=kpCQQQJd02yWsTVwkAMYBfJMTePSffzDiT-6utRqNB4,55248
|
|
105
105
|
onetick/py/db/__init__.py,sha256=-TKRO0suXTR-mLAppYt-Vegu9HQn7LU_JcObXpS3N9M,61
|
|
106
106
|
onetick/py/db/_inspection.py,sha256=oBd5XAk2RGHad7KpS62Ftwlmqx96EUxIFYCbZ-Qyt94,48288
|
|
107
|
-
onetick/py/db/db.py,sha256=
|
|
107
|
+
onetick/py/db/db.py,sha256=3K1X9RQ2ObXGxyxSi-jSSl6b7p0OuGZJJkx9SGzkBsc,55930
|
|
108
108
|
onetick/py/db/utils.py,sha256=gt-KmbGgcp1tH81LH-cLO08n2Hx8GaBPbvfEN22mgLg,2309
|
|
109
109
|
onetick/py/docs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
110
110
|
onetick/py/docs/docstring_parser.py,sha256=j38L1jO1JFAzYqR1F5hilIzcIjOWILqNQSB25Fd2hhM,3695
|
|
@@ -143,10 +143,10 @@ onetick/py/utils/render.py,sha256=9SBKfKsHCrdF-FOZFGon7TalzXydCdPHINouRUwHMKM,38
|
|
|
143
143
|
onetick/py/utils/script.py,sha256=Y8NujEo2_5QaP6KDnLKJiKQ7SmMjw8_dv8sYL9rHDCE,11184
|
|
144
144
|
onetick/py/utils/temp.py,sha256=j-BC155dE46k0zfKTTs26KTF0CK6WA1hO2GD54iunyM,17380
|
|
145
145
|
onetick/py/utils/types.py,sha256=_tYf66r9JVgjtiCJfxIxrg_BQEjHkjlnck_i86dBYEY,3606
|
|
146
|
-
onetick/py/utils/tz.py,sha256=
|
|
147
|
-
onetick_py-1.
|
|
148
|
-
onetick_py-1.
|
|
149
|
-
onetick_py-1.
|
|
150
|
-
onetick_py-1.
|
|
151
|
-
onetick_py-1.
|
|
152
|
-
onetick_py-1.
|
|
146
|
+
onetick/py/utils/tz.py,sha256=sYUKigaORonp7Xa6x806xVYJ69lYJHd6NrLxQHB5AZo,2878
|
|
147
|
+
onetick_py-1.173.0.dist-info/licenses/LICENSE,sha256=Yhu7lKNFS0fsaN-jSattEMRtCOPueP58Eu5BPH8ZGjM,1075
|
|
148
|
+
onetick_py-1.173.0.dist-info/METADATA,sha256=LDGWo1_fYz7O3MZnNC_hPpHaMy0QtQ5J_1LY__KmG4o,7218
|
|
149
|
+
onetick_py-1.173.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
150
|
+
onetick_py-1.173.0.dist-info/entry_points.txt,sha256=QmK_tFswIN-SQRmtnTSBEi8GvT0TVq-66IzXXZIsV3U,81
|
|
151
|
+
onetick_py-1.173.0.dist-info/top_level.txt,sha256=Na1jSJmVMyYGOndaswt554QKIUwQjcYh6th2ATsmw0U,23
|
|
152
|
+
onetick_py-1.173.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|