This commit is contained in:
Oleg Sheynin 2025-08-02 01:49:09 +00:00
parent 73f36ddcea
commit 7ab09669b4
6 changed files with 49 additions and 10 deletions

View File

@ -108,4 +108,5 @@
// Enable Python-specific code actions // Enable Python-specific code actions
"python.analysis.completeFunctionParens": true, "python.analysis.completeFunctionParens": true,
"python.analysis.addImport.exactMatchOnly": false, "python.analysis.addImport.exactMatchOnly": false,
"workbench.tree.indent": 24,
} }

View File

@ -89,10 +89,10 @@ def main() -> None:
print(f"{message_type=} {subscr_id=} {instrument_id}") print(f"{message_type=} {subscr_id=} {instrument_id}")
if message_type == "md_aggregate": if message_type == "md_aggregate":
aggr = message.get("md_aggregate", []) aggr = message.get("md_aggregate", [])
print(f"[{aggr['tstmp'][:19]}] *** RLTM *** {message}") print(f"[{aggr['tstamp'][:19]}] *** RLTM *** {message}")
elif message_type == "historical_md_aggregate": elif message_type == "historical_md_aggregate":
for aggr in message.get("historical_data", []): for aggr in message.get("historical_data", []):
print(f"[{aggr['tstmp'][:19]}] *** HIST *** {aggr}") print(f"[{aggr['tstamp'][:19]}] *** HIST *** {aggr}")
else: else:
print(f"Unknown message type: {message_type}") print(f"Unknown message type: {message_type}")

View File

@ -34,10 +34,10 @@ class PairTradingRunner(NamedObject):
# print(f"{message_type=} {subscr_id=} {instrument_id}") # print(f"{message_type=} {subscr_id=} {instrument_id}")
# if message_type == "md_aggregate": # if message_type == "md_aggregate":
# aggr = message.get("md_aggregate", []) # aggr = message.get("md_aggregate", [])
# print(f"[{aggr['tstmp'][:19]}] *** RLTM *** {message}") # print(f"[{aggr['tstamp'][:19]}] *** RLTM *** {message}")
# elif message_type == "historical_md_aggregate": # elif message_type == "historical_md_aggregate":
# for aggr in message.get("historical_data", []): # for aggr in message.get("historical_data", []):
# print(f"[{aggr['tstmp'][:19]}] *** HIST *** {aggr}") # print(f"[{aggr['tstamp'][:19]}] *** HIST *** {aggr}")
# else: # else:
# print(f"Unknown message type: {message_type}") # print(f"Unknown message type: {message_type}")

View File

@ -156,10 +156,10 @@ async def main() -> None:
print(f"{message_type=} {subscr_id=} {instrument_id}") print(f"{message_type=} {subscr_id=} {instrument_id}")
if message_type == "md_aggregate": if message_type == "md_aggregate":
aggr = message.get("md_aggregate", []) aggr = message.get("md_aggregate", [])
print(f"[{aggr['tstmp'][:19]}] *** RLTM *** {message}") print(f"[{aggr['tstamp'][:19]}] *** RLTM *** {message}")
elif message_type == "historical_md_aggregate": elif message_type == "historical_md_aggregate":
for aggr in message.get("historical_data", []): for aggr in message.get("historical_data", []):
print(f"[{aggr['tstmp'][:19]}] *** HIST *** {aggr}") print(f"[{aggr['tstamp'][:19]}] *** HIST *** {aggr}")
else: else:
print(f"Unknown message type: {message_type}") print(f"Unknown message type: {message_type}")

View File

@ -52,11 +52,11 @@ class PtMktDataClient(NamedObject):
if message_type == "md_aggregate": if message_type == "md_aggregate":
aggr = message.get("md_aggregate", {}) aggr = message.get("md_aggregate", {})
await self.live_strategy_.on_mkt_data_update(aggr) await self.live_strategy_.on_mkt_data_update(aggr)
# print(f"[{aggr['tstmp'][:19]}] *** RLTM *** {message}") # print(f"[{aggr['tstamp'][:19]}] *** RLTM *** {message}")
elif message_type == "historical_md_aggregate": elif message_type == "historical_md_aggregate":
aggr = message.get("historical_data", {}) aggr = message.get("historical_data", {})
await self.live_strategy_.on_mkt_data_hist_snapshot(aggr) await self.live_strategy_.on_mkt_data_hist_snapshot(aggr)
# print(f"[{aggr['tstmp'][:19]}] *** HIST *** {aggr}") # print(f"[{aggr['tstamp'][:19]}] *** HIST *** {aggr}")
else: else:
Log.info(f"Unknown message type: {message_type}") Log.info(f"Unknown message type: {message_type}")

View File

@ -1,6 +1,6 @@
from __future__ import annotations from __future__ import annotations
from typing import Any, Dict, List, Type from typing import Any, Dict, List, Optional
import pandas as pd import pandas as pd
from cvttpy_base.settings.cvtt_types import JsonDictT from cvttpy_base.settings.cvtt_types import JsonDictT
@ -176,7 +176,28 @@ class RealTimeMarketData(PtMarketData):
async def on_mkt_data_hist_snapshot(self, snapshot: JsonDictT) -> None: async def on_mkt_data_hist_snapshot(self, snapshot: JsonDictT) -> None:
# URGENT # URGENT
# create origin_mkt_data_df_ from snapshot # create origin_mkt_data_df_ from snapshot
# verify that the data for both instruments are present
# transform it to market_data_df_ tstamp, close_symbolA, close_symbolB # transform it to market_data_df_ tstamp, close_symbolA, close_symbolB
'''
# from cvttpy/exchanges/binance/spot/mkt_data.py
values = {
"time_ns": time_ns,
"tstamp": format_nanos_utc(time_ns),
"exchange_id": exch_inst.exchange_id_,
"instrument_id": exch_inst.instrument_id(),
"interval_ns": interval_sec * 1_000_000_000,
"open": float(kline[1]),
"high": float(kline[2]),
"low": float(kline[3]),
"close": float(kline[4]),
"volume": float(kline[5]),
"num_trades": kline[8],
"vwap": float(kline[7]) / float(kline[5]) if float(kline[5]) > 0 else 0.0 # Calculate VWAP
}
'''
pass pass
async def on_mkt_data_update(self, update: JsonDictT) -> Optional[pd.DataFrame]: async def on_mkt_data_update(self, update: JsonDictT) -> Optional[pd.DataFrame]:
@ -187,6 +208,23 @@ class RealTimeMarketData(PtMarketData):
# add tmp1 to origin_mkt_data_df_ # add tmp1 to origin_mkt_data_df_
# add tmp2 to market_data_df_ # add tmp2 to market_data_df_
# return market_data_df_ # return market_data_df_
'''
class MdTradesAggregate(NamedObject):
def to_dict(self) -> Dict[str, Any]:
return {
"time_ns": self.time_ns_,
"tstamp": format_nanos_utc(self.time_ns_),
"exchange_id": self.exch_inst_.exchange_id_,
"instrument_id": self.exch_inst_.instrument_id(),
"interval_ns": self.interval_ns_,
"open": self.exch_inst_.get_price(self.open_),
"high": self.exch_inst_.get_price(self.high_),
"low": self.exch_inst_.get_price(self.low_),
"close": self.exch_inst_.get_price(self.close_),
"volume": self.exch_inst_.get_quantity(self.volume_),
"vwap": self.exch_inst_.get_price(self.vwap_),
"num_trades": self.exch_inst_.get_quantity(self.num_trades_),
}
'''
return pd.DataFrame() return pd.DataFrame()