forked from robcarver17/pysystemtrade
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcsv_strategy_position_data.py
44 lines (34 loc) · 1.47 KB
/
csv_strategy_position_data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import pandas as pd
from sysdata.production.historic_strategy_positions import strategyPositionData
from syscore.fileutils import resolve_path_and_filename_for_package
from syscore.constants import arg_not_supplied
from syslogging.logger import *
from sysobjects.production.tradeable_object import instrumentStrategy
DATE_INDEX_NAME = "DATETIME"
class csvStrategyPositionData(strategyPositionData):
"""
Class for contract_positions write to / read from csv
"""
def __init__(
self, datapath=arg_not_supplied, log=get_logger("csvStrategyPositionData")
):
super().__init__(log=log)
if datapath is None:
raise Exception("Need to provide datapath")
self._datapath = datapath
def __repr__(self):
return "csvStrategyPositionData accessing %s" % self._datapath
def _write_updated_position_series_for_instrument_strategy_object(
self, instrument_strategy: instrumentStrategy, updated_series: pd.Series
):
position_df = pd.DataFrame(updated_series)
filename = self._filename_given_instrument_strategy(instrument_strategy)
position_df.to_csv(filename, index_label=DATE_INDEX_NAME)
def _filename_given_instrument_strategy(
self, instrument_strategy: instrumentStrategy
):
return resolve_path_and_filename_for_package(
self._datapath,
"%s_%s.csv"
% (instrument_strategy.strategy_name, instrument_strategy.instrument_code),
)