hawk-sdk 0.0.1__py3-none-any.whl → 0.0.3__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.

Potentially problematic release.


This version of hawk-sdk might be problematic. Click here for more details.

hawk_sdk/futures/main.py CHANGED
@@ -34,3 +34,21 @@ class Futures:
34
34
  name="futures_ohlcvo",
35
35
  data=self.service.get_ohlcvo(start_date, end_date, interval, hawk_ids)
36
36
  )
37
+
38
+ def get_hgf_model_state(self, start_date: str, end_date: str, short_ema: int, long_ema: int) -> DataObject:
39
+ """Fetch Hawk Global Futures model state data for the given date range.
40
+
41
+ :param start_date: The start date for the data query (YYYY-MM-DD).
42
+ :param end_date: The end date for the data query (YYYY-MM-DD).
43
+ :param short_ema: The short exponential moving average period.
44
+ :param long_ema: The long exponential moving average period.
45
+ :return: A hawk DataObject containing the model state data.
46
+ :raises ValueError: If short EMA period is longer than long EMA period.
47
+ """
48
+ if short_ema > long_ema:
49
+ raise ValueError("Short EMA period cannot be longer than Long EMA period.")
50
+
51
+ return DataObject(
52
+ name="futures_hgf_model_state",
53
+ data=self.service.get_hgf_model_state(start_date, end_date, short_ema, long_ema)
54
+ )
@@ -24,7 +24,7 @@ class FuturesRepository:
24
24
  def fetch_ohlcvo(self, start_date: str, end_date: str, interval: str, hawk_ids: List[int]) -> Iterator[dict]:
25
25
  """Fetches raw data from BigQuery for the given date range and hawk_ids using query parameters."""
26
26
 
27
- query = """
27
+ query = f"""
28
28
  WITH records_data AS (
29
29
  SELECT
30
30
  r.record_timestamp AS date,
@@ -34,14 +34,14 @@ class FuturesRepository:
34
34
  MAX(CASE WHEN f.field_name = @low_field THEN r.double_value END) AS low,
35
35
  MAX(CASE WHEN f.field_name = @close_field THEN r.double_value END) AS close,
36
36
  MAX(CASE WHEN f.field_name = @volume_field THEN r.int_value END) AS volume,
37
- MAX(CASE WHEN f.field_name = @open_interest_field THEN r.double_value END) AS open_interest
37
+ MAX(CASE WHEN f.field_name = @open_interest_field THEN r.int_value END) AS open_interest
38
38
  FROM
39
- `wsb-hc-qasap-ae2e.@environment.records` AS r
39
+ `wsb-hc-qasap-ae2e.{self.environment}.records` AS r
40
40
  JOIN
41
- `wsb-hc-qasap-ae2e.@environment.fields` AS f
41
+ `wsb-hc-qasap-ae2e.{self.environment}.fields` AS f
42
42
  ON r.field_id = f.field_id
43
43
  JOIN
44
- `wsb-hc-qasap-ae2e.@environment.hawk_identifiers` AS hi
44
+ `wsb-hc-qasap-ae2e.{self.environment}.hawk_identifiers` AS hi
45
45
  ON r.hawk_id = hi.hawk_id
46
46
  WHERE
47
47
  r.hawk_id IN UNNEST(@hawk_ids)
@@ -75,7 +75,6 @@ class FuturesRepository:
75
75
  bigquery.ScalarQueryParameter("close_field", "STRING", f"close_{interval}"),
76
76
  bigquery.ScalarQueryParameter("volume_field", "STRING", f"volume_{interval}"),
77
77
  bigquery.ScalarQueryParameter("open_interest_field", "STRING", f"open_interest_{interval}"),
78
- bigquery.ScalarQueryParameter("environment", "string", self.environment),
79
78
  ]
80
79
 
81
80
  job_config = bigquery.QueryJobConfig(query_parameters=query_params)
@@ -2,11 +2,13 @@
2
2
  @description: Service layer for processing and normalizing Futures data.
3
3
  @author: Rithwik Babu
4
4
  """
5
-
6
- from hawk_sdk.futures.repository import FuturesRepository
5
+ from datetime import datetime, timedelta
7
6
  from typing import List, Iterator
7
+
8
8
  import pandas as pd
9
9
 
10
+ from hawk_sdk.futures.repository import FuturesRepository
11
+
10
12
 
11
13
  class FuturesService:
12
14
  """Service class for Futures business logic."""
@@ -30,6 +32,37 @@ class FuturesService:
30
32
  raw_data = self.repository.fetch_ohlcvo(start_date, end_date, interval, hawk_ids)
31
33
  return self._normalize_data(raw_data)
32
34
 
35
+ def get_hgf_model_state(
36
+ self, start_date: str, end_date: str, short_ema: int, long_ema: int
37
+ ) -> pd.DataFrame:
38
+ """Fetches and normalizes data into a pandas DataFrame.
39
+
40
+ :param start_date: The start date for the data query.
41
+ :param end_date: The end date for the data query.
42
+ :param short_ema: The short exponential moving average period.
43
+ :param long_ema: The long exponential moving average period.
44
+ :return: A pandas DataFrame containing the model state data.
45
+ """
46
+ adjusted_start_date = (
47
+ datetime.strptime(start_date, "%Y-%m-%d") - timedelta(days=long_ema)
48
+ ).strftime("%Y-%m-%d")
49
+
50
+ raw_data = self.repository.fetch_ohlcvo(
51
+ start_date=adjusted_start_date,
52
+ end_date=end_date,
53
+ interval="1d",
54
+ hawk_ids=list(range(20000, 20023))
55
+ )
56
+
57
+ raw_df = self._normalize_data(raw_data)
58
+
59
+ raw_df[f'EMA_{short_ema}'] = raw_df['close'].ewm(span=short_ema, adjust=False).mean()
60
+ raw_df[f'EMA_{long_ema}'] = raw_df['close'].ewm(span=long_ema, adjust=False).mean()
61
+
62
+ raw_df = raw_df[raw_df['date'] >= start_date]
63
+
64
+ return raw_df
65
+
33
66
  @staticmethod
34
67
  def _normalize_data(data: Iterator[dict]) -> pd.DataFrame:
35
68
  """Converts raw data into a normalized pandas DataFrame.
hawk_sdk/system/main.py CHANGED
@@ -1,5 +1,5 @@
1
1
  """
2
- @description: Datasource API for Hawk Global System data access and export functions.
2
+ @description: Datasource API for Hawk System data access and export functions.
3
3
  @author: Rithwik Babu
4
4
  """
5
5
  from typing import List
@@ -27,12 +27,12 @@ class SystemRepository:
27
27
  :param tickers: A list of ticker strings to filter by.
28
28
  :return: An iterator over raw data rows.
29
29
  """
30
- query = """
30
+ query = f"""
31
31
  SELECT
32
32
  value AS ticker,
33
33
  hawk_id
34
34
  FROM
35
- `wsb-hc-qasap-ae2e.@environment.hawk_identifiers`
35
+ `wsb-hc-qasap-ae2e.{self.environment}.hawk_identifiers`
36
36
  WHERE
37
37
  id_type = 'TICKER'
38
38
  AND value IN UNNEST(@ticker_list)
@@ -40,7 +40,6 @@ class SystemRepository:
40
40
 
41
41
  query_params = [
42
42
  bigquery.ArrayQueryParameter("ticker_list", "STRING", tickers),
43
- bigquery.ScalarQueryParameter("environment", "string", self.environment),
44
43
  ]
45
44
 
46
45
  job_config = bigquery.QueryJobConfig(query_parameters=query_params)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hawk-sdk
3
- Version: 0.0.1
3
+ Version: 0.0.3
4
4
  Requires-Dist: google-cloud-bigquery
5
5
  Requires-Dist: pandas
6
6
 
@@ -0,0 +1,16 @@
1
+ hawk_sdk/__init__.py,sha256=prH_sfjYeRZpBvyYYe5xV8lyn8auj1whvyftpBEHz_Y,37
2
+ hawk_sdk/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ hawk_sdk/common/constants.py,sha256=KmsNfRVCwGeXEBHfo3TzSaDYJDMtnL-YEQKsO1DnWV8,33
4
+ hawk_sdk/common/data_object.py,sha256=qXsnDf__ePw4DbeF9Pe82B2DY05xsID9uU8vyfCUIe0,977
5
+ hawk_sdk/futures/__init__.py,sha256=g0TubD9lrU2xoF1YvHSkNDjn3XehRT6zrIiSdX8C4no,42
6
+ hawk_sdk/futures/main.py,sha256=AtK4uFKsXnpfnd3vEWWnmLj6xodUpGhuPVC3Nnr3cNM,2471
7
+ hawk_sdk/futures/repository.py,sha256=g8jSZCauCKwQYdjpZ3Oqe9NL8GjarDuSXDKpFl0J3vw,3588
8
+ hawk_sdk/futures/service.py,sha256=7Leuj6FyS6ulFf3kPuA9BO0wmA3bD_eYbl_mM7X4aoI,2811
9
+ hawk_sdk/system/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ hawk_sdk/system/main.py,sha256=C_PxjpEbTunW1U3pCaxGN8tYSMOCxEOC73My092wBoA,1173
11
+ hawk_sdk/system/repository.py,sha256=3CfFjNVC0X09TKLh9sfwd5HxeLcb49MRCbvb3Su2Wnk,1642
12
+ hawk_sdk/system/service.py,sha256=1QxvONep7E5-oN1Tiq8xoS-gyt4FVJQUed2ZTw_O0TM,1258
13
+ hawk_sdk-0.0.3.dist-info/METADATA,sha256=7r9JRxT17LsAvXs4Fk_SDajl3JxQIX48l3KuTwv946Y,112
14
+ hawk_sdk-0.0.3.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
15
+ hawk_sdk-0.0.3.dist-info/top_level.txt,sha256=aSjbudHcWSYsKXH9Wg0L1ltJfDOHXzjYFPO3v3cP-SE,9
16
+ hawk_sdk-0.0.3.dist-info/RECORD,,
@@ -1,16 +0,0 @@
1
- hawk_sdk/__init__.py,sha256=prH_sfjYeRZpBvyYYe5xV8lyn8auj1whvyftpBEHz_Y,37
2
- hawk_sdk/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- hawk_sdk/common/constants.py,sha256=KmsNfRVCwGeXEBHfo3TzSaDYJDMtnL-YEQKsO1DnWV8,33
4
- hawk_sdk/common/data_object.py,sha256=qXsnDf__ePw4DbeF9Pe82B2DY05xsID9uU8vyfCUIe0,977
5
- hawk_sdk/futures/__init__.py,sha256=g0TubD9lrU2xoF1YvHSkNDjn3XehRT6zrIiSdX8C4no,42
6
- hawk_sdk/futures/main.py,sha256=d12PdblMz79iBexaBfcdUHN5xdMmVZYqHDJHioT-XBk,1535
7
- hawk_sdk/futures/repository.py,sha256=LRB2SGGrObjce4UbPNn5FHXAmeoY-ZlOWxpNzg6RlBY,3658
8
- hawk_sdk/futures/service.py,sha256=LaLbNWJMw6kJEjl2SC3eKSCWSGwpKK2JBTnPCHHlL3k,1559
9
- hawk_sdk/system/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- hawk_sdk/system/main.py,sha256=wXycZyIUMNlbQXD8b57edq642gqinD3sdKabsFyzlu4,1180
11
- hawk_sdk/system/repository.py,sha256=7SEuZgjhaweO7jFdfv1KybLWCHbJsgbPwdn7n74Pcj8,1721
12
- hawk_sdk/system/service.py,sha256=1QxvONep7E5-oN1Tiq8xoS-gyt4FVJQUed2ZTw_O0TM,1258
13
- hawk_sdk-0.0.1.dist-info/METADATA,sha256=a-t1OpVDr10ezom4mb4wDx4wvPfmtXIELsHUDelWEHs,112
14
- hawk_sdk-0.0.1.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
15
- hawk_sdk-0.0.1.dist-info/top_level.txt,sha256=aSjbudHcWSYsKXH9Wg0L1ltJfDOHXzjYFPO3v3cP-SE,9
16
- hawk_sdk-0.0.1.dist-info/RECORD,,