PyAlgoEngine 0.8.0a3__tar.gz → 0.8.0a5__tar.gz
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.
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/PKG-INFO +1 -1
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/PyAlgoEngine.egg-info/PKG-INFO +1 -1
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/__init__.py +1 -1
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/backtest/sim_match.py +2 -2
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/base/__init__.py +4 -4
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/base/trade_utils.py +2 -2
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/engine/algo_engine.py +1 -1
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/engine/trade_engine.py +22 -22
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/strategy/strategy_engine.py +4 -4
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/LICENSE +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/PyAlgoEngine.egg-info/SOURCES.txt +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/PyAlgoEngine.egg-info/dependency_links.txt +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/PyAlgoEngine.egg-info/requires.txt +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/PyAlgoEngine.egg-info/top_level.txt +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/README.md +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/__init__.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/backtest/__init__.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/backtest/doc_server.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/backtest/tester.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/backtest/web_app.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/bokeh_server.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/demo/__init__.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/demo/test.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/sim_input/__init__.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/sim_input/client.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/sim_input/sim_keyboard.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/sim_input/sim_mouse.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/apps/sim_input/window.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/backtest/__init__.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/backtest/__main__.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/backtest/metrics.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/backtest/replay.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/base/console_utils.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/base/finance_decimal.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/base/market_utils_nt.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/base/market_utils_posix.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/base/technical_analysis.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/base/telemetrics.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/engine/__init__.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/engine/event_engine.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/engine/market_engine.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/monitor/__init__.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/monitor/advanced_data_interface.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/profile/__init__.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/profile/cn.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/strategy/__init__.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/utils/__init__.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/utils/commit_regularizer.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/utils/data_utils.py +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/setup.cfg +0 -0
- {pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/setup.py +0 -0
|
@@ -37,9 +37,9 @@ class SimMatch(object):
|
|
|
37
37
|
market_data: MarketData | None = kwargs.pop('market_data', None)
|
|
38
38
|
|
|
39
39
|
if order is not None:
|
|
40
|
-
if order.order_type == OrderType.
|
|
40
|
+
if order.order_type == OrderType.ORDER_LIMIT:
|
|
41
41
|
self.launch_order(order=order)
|
|
42
|
-
elif order.order_type == OrderType.
|
|
42
|
+
elif order.order_type == OrderType.ORDER_CANCEL:
|
|
43
43
|
self.cancel_order(order=order)
|
|
44
44
|
else:
|
|
45
45
|
raise ValueError(f'Invalid order {order}')
|
|
@@ -40,10 +40,10 @@ if check_cython_module():
|
|
|
40
40
|
from .transaction import TransactionDirection, TransactionOffset, TransactionSide, OrderType, TransactionData, TradeData, OrderData
|
|
41
41
|
from .tick import TickDataLite, TickData
|
|
42
42
|
from .candlestick import BarData, DailyBar
|
|
43
|
-
|
|
44
|
-
from .market_utils_nt import TransactionSide, OrderType, MarketData, OrderBook, BarData, DailyBar, CandleStick, TickData, TransactionData, TradeData, OrderData, MarketDataBuffer, MarketDataRingBuffer
|
|
43
|
+
from .market_data_buffer import MarketDataBuffer
|
|
45
44
|
else:
|
|
46
|
-
from .
|
|
45
|
+
import_cmd = f'from .market_utils_{os.name} import TransactionSide, OrderType, MarketData, OrderBook, BarData, DailyBar, CandleStick, TickData, TransactionData, TradeData, OrderData, MarketDataBuffer, MarketDataRingBuffer'
|
|
46
|
+
eval(import_cmd)
|
|
47
47
|
|
|
48
48
|
from .technical_analysis import TechnicalAnalysis
|
|
49
49
|
from .trade_utils import OrderState, TradeInstruction, TradeReport
|
|
@@ -52,7 +52,7 @@ from .console_utils import Progress, GetInput, GetArgs, count_ordinal, TerminalS
|
|
|
52
52
|
__all__ = [
|
|
53
53
|
'PROFILE',
|
|
54
54
|
'FinancialDecimal',
|
|
55
|
-
'TransactionSide', 'OrderType', 'MarketData', 'BarData', 'DailyBar', 'TickDataLite', 'TickData', 'TransactionData', 'TradeData', 'OrderData',
|
|
55
|
+
'TransactionDirection', 'TransactionOffset', 'TransactionSide', 'OrderType', 'MarketData', 'BarData', 'DailyBar', 'TickDataLite', 'TickData', 'TransactionData', 'TradeData', 'OrderData', 'MarketDataBuffer',
|
|
56
56
|
# 'MarketDataMemoryBuffer', 'OrderBookBuffer', 'BarDataBuffer', 'TickDataBuffer', 'TransactionDataBuffer',
|
|
57
57
|
# 'MarketDataPointer', 'OrderBookPointer', 'BarDataPointer', 'TickDataPointer', 'TransactionDataPointer',
|
|
58
58
|
'TechnicalAnalysis',
|
|
@@ -371,7 +371,7 @@ class TradeInstruction(TradeBaseClass):
|
|
|
371
371
|
side: int | float | str | TransactionSide,
|
|
372
372
|
volume: float,
|
|
373
373
|
timestamp: float,
|
|
374
|
-
order_type: int | float | str | OrderType = OrderType.
|
|
374
|
+
order_type: int | float | str | OrderType = OrderType.ORDER_GENERIC,
|
|
375
375
|
limit_price: float = None,
|
|
376
376
|
order_id: str = None,
|
|
377
377
|
multiplier: float = None,
|
|
@@ -413,7 +413,7 @@ class TradeInstruction(TradeBaseClass):
|
|
|
413
413
|
return True
|
|
414
414
|
|
|
415
415
|
def __str__(self):
|
|
416
|
-
if self.limit_price is None or self.order_type == OrderType.
|
|
416
|
+
if self.limit_price is None or self.order_type == OrderType.ORDER_MARKET:
|
|
417
417
|
return f'<TradeInstruction id={self.order_id}>({self.ticker} {self.order_type.name} {self.side.name} {self.volume}; filled {self.filled_volume:.2f} @ {self.average_price:.2f} now {self.order_state.name})'
|
|
418
418
|
else:
|
|
419
419
|
return f'<TradeInstruction id={self.order_id}>({self.ticker} {self.order_type.name} {self.side.name} {self.volume} limit {self.limit_price:.2f}; filled {self.filled_volume:.2f} @ {self.average_price:.2f} now {self.order_state.name})'
|
|
@@ -511,7 +511,7 @@ class Passive(AlgoTemplate):
|
|
|
511
511
|
limit_adjust_level=limit_adjust_level,
|
|
512
512
|
mode=limit_mode
|
|
513
513
|
)
|
|
514
|
-
order_type = OrderType.
|
|
514
|
+
order_type = OrderType.ORDER_LIMIT
|
|
515
515
|
volume = self.target_volume - self.filled_volume - self.working_volume
|
|
516
516
|
|
|
517
517
|
LOGGER.info(f'{self} launching {order_type} {self.ticker} {self.side.name} {volume}')
|
|
@@ -18,7 +18,7 @@ import pandas as pd
|
|
|
18
18
|
from . import LOGGER
|
|
19
19
|
from .algo_engine import ALGO_ENGINE, AlgoTemplate
|
|
20
20
|
from .market_engine import MarketDataService, Singleton
|
|
21
|
-
from ..base import TransactionSide, TradeInstruction, MarketData, OrderState, TradeReport
|
|
21
|
+
from ..base import TransactionSide, TransactionDirection as Direction, TransactionOffset as Offset, TradeInstruction, MarketData, OrderState, TradeReport
|
|
22
22
|
|
|
23
23
|
LOGGER = LOGGER.getChild('TradeEngine')
|
|
24
24
|
__all__ = ['DirectMarketAccess', 'PositionManagementService', 'Balance', 'Inventory', 'RiskProfile']
|
|
@@ -328,7 +328,7 @@ class PositionManagementService(object):
|
|
|
328
328
|
return
|
|
329
329
|
|
|
330
330
|
to_unwind = abs(exposure)
|
|
331
|
-
side =
|
|
331
|
+
side = (Direction.DIRECTION_SHORT if exposure > 0 else Direction.DIRECTION_LONG) | Offset.OFFSET_CLOSE
|
|
332
332
|
self.open(ticker=ticker, target_volume=to_unwind, trade_side=side)
|
|
333
333
|
|
|
334
334
|
def add_exposure(self, ticker: str, volume: float, notional: float, side: TransactionSide, timestamp: float):
|
|
@@ -1144,7 +1144,7 @@ class Inventory(object, metaclass=Singleton):
|
|
|
1144
1144
|
self.multiplier = multiplier
|
|
1145
1145
|
|
|
1146
1146
|
class Entry(object):
|
|
1147
|
-
def __init__(self, ticker: str, volume: float, price: float, security_type: Inventory.SecurityType, direction:
|
|
1147
|
+
def __init__(self, ticker: str, volume: float, price: float, security_type: Inventory.SecurityType, direction: Direction, **kwargs):
|
|
1148
1148
|
if volume < 0:
|
|
1149
1149
|
LOGGER.warning('volume of Inventory.Entry normally should be positive!')
|
|
1150
1150
|
|
|
@@ -1159,7 +1159,7 @@ class Inventory(object, metaclass=Singleton):
|
|
|
1159
1159
|
self.recalled = kwargs.pop('recalled', 0.)
|
|
1160
1160
|
|
|
1161
1161
|
def __repr__(self):
|
|
1162
|
-
return f'<Inventory.Entry>(ticker={self.ticker}, side={self.direction.
|
|
1162
|
+
return f'<Inventory.Entry>(ticker={self.ticker}, side={self.direction.name}, volume={self.volume:,}, fee={self.fee:.2f})'
|
|
1163
1163
|
|
|
1164
1164
|
def __add__(self, other):
|
|
1165
1165
|
if isinstance(other, self.__class__):
|
|
@@ -1225,8 +1225,8 @@ class Inventory(object, metaclass=Singleton):
|
|
|
1225
1225
|
ticker=self.ticker,
|
|
1226
1226
|
volume=self.volume,
|
|
1227
1227
|
price=self.price,
|
|
1228
|
-
security_type=self.security_type.
|
|
1229
|
-
direction=self.direction.
|
|
1228
|
+
security_type=self.security_type.value,
|
|
1229
|
+
direction=self.direction.value,
|
|
1230
1230
|
notional=self.notional,
|
|
1231
1231
|
fee=self.fee,
|
|
1232
1232
|
recalled=self.recalled
|
|
@@ -1250,8 +1250,8 @@ class Inventory(object, metaclass=Singleton):
|
|
|
1250
1250
|
ticker=json_dict['ticker'],
|
|
1251
1251
|
volume=json_dict['volume'],
|
|
1252
1252
|
price=json_dict['price'],
|
|
1253
|
-
security_type=Inventory.SecurityType
|
|
1254
|
-
direction=
|
|
1253
|
+
security_type=Inventory.SecurityType(json_dict['security_type']),
|
|
1254
|
+
direction=Direction(json_dict['direction']),
|
|
1255
1255
|
notional=json_dict['notional'],
|
|
1256
1256
|
fee=json_dict.get('fee', 0.),
|
|
1257
1257
|
recalled=json_dict.get('recalled', 0.),
|
|
@@ -1273,12 +1273,12 @@ class Inventory(object, metaclass=Singleton):
|
|
|
1273
1273
|
|
|
1274
1274
|
def __call__(self, ticker: str):
|
|
1275
1275
|
return dict(
|
|
1276
|
-
Long=self.available_volume(ticker=ticker, direction=
|
|
1277
|
-
Short=self.available_volume(ticker=ticker, direction=
|
|
1276
|
+
Long=self.available_volume(ticker=ticker, direction=Direction.DIRECTION_LONG),
|
|
1277
|
+
Short=self.available_volume(ticker=ticker, direction=Direction.DIRECTION_SHORT)
|
|
1278
1278
|
)
|
|
1279
1279
|
|
|
1280
|
-
def recall(self, ticker: str, volume: float, direction:
|
|
1281
|
-
key = f'{ticker}.{direction.
|
|
1280
|
+
def recall(self, ticker: str, volume: float, direction: Direction = Direction.DIRECTION_LONG):
|
|
1281
|
+
key = f'{ticker}.{direction.name}'
|
|
1282
1282
|
_ = self._inv.get(key, [])
|
|
1283
1283
|
to_recall = volume
|
|
1284
1284
|
|
|
@@ -1300,15 +1300,15 @@ class Inventory(object, metaclass=Singleton):
|
|
|
1300
1300
|
|
|
1301
1301
|
def add_inv(self, entry: Entry):
|
|
1302
1302
|
self._tickers.add(entry.ticker)
|
|
1303
|
-
key = f'{entry.ticker}.{entry.direction.
|
|
1303
|
+
key = f'{entry.ticker}.{entry.direction.name}'
|
|
1304
1304
|
_ = self._inv.get(key, [])
|
|
1305
1305
|
|
|
1306
1306
|
_.append(entry)
|
|
1307
1307
|
|
|
1308
1308
|
self._inv[key] = _
|
|
1309
1309
|
|
|
1310
|
-
def get_inv(self, ticker: str, direction:
|
|
1311
|
-
key = f'{ticker}.{direction.
|
|
1310
|
+
def get_inv(self, ticker: str, direction: Direction = Direction.DIRECTION_LONG) -> Entry | None:
|
|
1311
|
+
key = f'{ticker}.{direction.name}'
|
|
1312
1312
|
_ = self._inv.get(key, [])
|
|
1313
1313
|
|
|
1314
1314
|
merged_entry = None
|
|
@@ -1320,12 +1320,12 @@ class Inventory(object, metaclass=Singleton):
|
|
|
1320
1320
|
|
|
1321
1321
|
return merged_entry
|
|
1322
1322
|
|
|
1323
|
-
def use_inv(self, ticker: str, volume: float, direction:
|
|
1324
|
-
key = f'{ticker}.{direction.
|
|
1323
|
+
def use_inv(self, ticker: str, volume: float, direction: Direction = Direction.DIRECTION_LONG):
|
|
1324
|
+
key = f'{ticker}.{direction.name}'
|
|
1325
1325
|
|
|
1326
1326
|
self._traded[key] = self._traded.get(key, 0.) + volume
|
|
1327
1327
|
|
|
1328
|
-
def available_volume(self, ticker: str, direction:
|
|
1328
|
+
def available_volume(self, ticker: str, direction: Direction = Direction.DIRECTION_LONG) -> float:
|
|
1329
1329
|
inv = self.get_inv(ticker=ticker, direction=direction)
|
|
1330
1330
|
|
|
1331
1331
|
if inv is None:
|
|
@@ -1393,10 +1393,10 @@ class Inventory(object, metaclass=Singleton):
|
|
|
1393
1393
|
inv_dict = {'inv_l': {}, 'inv_s': {}}
|
|
1394
1394
|
|
|
1395
1395
|
for ticker in self._inv:
|
|
1396
|
-
if (long_inv := self.get_inv(ticker=ticker, direction=
|
|
1396
|
+
if (long_inv := self.get_inv(ticker=ticker, direction=Direction.DIRECTION_LONG)) is not None:
|
|
1397
1397
|
inv_dict['inv_l'][ticker] = long_inv.volume
|
|
1398
1398
|
|
|
1399
|
-
if (short_inv := self.get_inv(ticker=ticker, direction=
|
|
1399
|
+
if (short_inv := self.get_inv(ticker=ticker, direction=Direction.DIRECTION_SHORT)) is not None:
|
|
1400
1400
|
inv_dict['inv_s'][ticker] = short_inv.volume
|
|
1401
1401
|
|
|
1402
1402
|
inv_df = pd.DataFrame(inv_dict)
|
|
@@ -1422,8 +1422,8 @@ class Inventory(object, metaclass=Singleton):
|
|
|
1422
1422
|
info_dict = {'inv_l': {}, 'inv_s': {}}
|
|
1423
1423
|
|
|
1424
1424
|
for ticker in self.tickers:
|
|
1425
|
-
inv_l = self.get_inv(ticker,
|
|
1426
|
-
inv_s = self.get_inv(ticker,
|
|
1425
|
+
inv_l = self.get_inv(ticker=ticker, direction=Direction.DIRECTION_LONG)
|
|
1426
|
+
inv_s = self.get_inv(ticker=ticker, direction=Direction.DIRECTION_SHORT)
|
|
1427
1427
|
|
|
1428
1428
|
if inv_l is not None:
|
|
1429
1429
|
info_dict['inv_l'][ticker] = inv_l.volume
|
|
@@ -6,7 +6,7 @@ from functools import cached_property
|
|
|
6
6
|
|
|
7
7
|
from . import LOGGER
|
|
8
8
|
from ..backtest import SimMatch, ProgressiveReplay
|
|
9
|
-
from ..base import MarketData, TradeReport, TradeInstruction, TransactionSide
|
|
9
|
+
from ..base import MarketData, TradeReport, TradeInstruction, TransactionSide, TransactionDirection as Direction, TransactionOffset as Offset
|
|
10
10
|
from ..engine import PositionManagementService, TOPIC, EVENT_ENGINE
|
|
11
11
|
|
|
12
12
|
LOGGER = LOGGER.getChild('Strategy')
|
|
@@ -306,7 +306,7 @@ class StrategyEngine(StrategyEngineTemplate):
|
|
|
306
306
|
return executed, remains
|
|
307
307
|
|
|
308
308
|
# then it must be
|
|
309
|
-
side =
|
|
309
|
+
side = (Direction.DIRECTION_SHORT if exposure > 0 else Direction.DIRECTION_LONG) | Offset.OFFSET_CLOSE
|
|
310
310
|
|
|
311
311
|
if side.sign > 0: # short position, buy action
|
|
312
312
|
working_open = working_short
|
|
@@ -359,8 +359,8 @@ class StrategyEngine(StrategyEngineTemplate):
|
|
|
359
359
|
return
|
|
360
360
|
|
|
361
361
|
if side is None:
|
|
362
|
-
|
|
363
|
-
LOGGER.warning(f'Trade side of open instruction not specified! Presumed to be {
|
|
362
|
+
side = (Direction.DIRECTION_SHORT if volume > 0 else Direction.DIRECTION_LONG) | Offset.OFFSET_OPEN
|
|
363
|
+
LOGGER.warning(f'Trade side of open instruction not specified! Presumed to be {side} by the sign of volume!')
|
|
364
364
|
|
|
365
365
|
algo = self.position_tracker.open(
|
|
366
366
|
ticker=ticker,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyalgoengine-0.8.0a3 → pyalgoengine-0.8.0a5}/algo_engine/monitor/advanced_data_interface.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|