Skip to content

Commit

Permalink
add add_line_callback to draw line graph
Browse files Browse the repository at this point in the history
  • Loading branch information
msaltnet committed Oct 20, 2023
1 parent d67614f commit 1a4efb2
Show file tree
Hide file tree
Showing 8 changed files with 26 additions and 10 deletions.
2 changes: 1 addition & 1 deletion integration_tests/operator_ITG_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def check_interval():
op.initialize(data_provider, strategy, trader, analyzer, budget=50000)
self.assertEqual(op.state, "ready")
analyzer.initialize.assert_called_with(trader.get_account_info)
strategy.initialize.assert_called_with(50000, add_spot_callback=ANY)
strategy.initialize.assert_called_with(50000, add_spot_callback=ANY, add_line_callback=ANY)

strategy.get_request.return_value = "mango"
op.set_interval(1)
Expand Down
7 changes: 6 additions & 1 deletion smtm/operator.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,17 @@ def initialize(self, data_provider, strategy, trader, analyzer, budget=500):
def add_spot_callback(date_time, value):
analyzer.add_drawing_spot(date_time, value)

def add_line_callback(date_time, value):
analyzer.add_value_for_line_graph(date_time, value)

self.data_provider = data_provider
self.strategy = strategy
self.trader = trader
self.analyzer = analyzer
self.state = "ready"
self.strategy.initialize(budget, add_spot_callback=add_spot_callback)
self.strategy.initialize(
budget, add_spot_callback=add_spot_callback, add_line_callback=add_line_callback
)
self.analyzer.initialize(trader.get_account_info)
self.tag = datetime.now().strftime("%Y%m%d-%H%M%S")
try:
Expand Down
3 changes: 2 additions & 1 deletion smtm/strategy.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,13 @@ class Strategy(metaclass=ABCMeta):
NAME = "---"

@abstractmethod
def initialize(self, budget, min_price=100, add_spot_callback=None):
def initialize(self, budget, min_price=100, add_spot_callback=None, add_line_callback=None):
"""예산을 설정하고 초기화한다
budget: 예산
min_price: 최소 거래 금액, 거래소의 최소 거래 금액
add_spot_callback(date_time, value): 그래프에 그려질 spot을 추가하는 콜백 함수
add_line_callback(date_time, value): 그래프에 그려질 line을 추가하는 콜백 함수
"""

@abstractmethod
Expand Down
2 changes: 1 addition & 1 deletion smtm/strategy_bnh.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ def get_request(self):
]
return None

def initialize(self, budget, min_price=5000, add_spot_callback=None):
def initialize(self, budget, min_price=5000, add_spot_callback=None, add_line_callback=None):
"""예산과 최소 거래 가능 금액을 설정한다"""
if self.is_intialized:
return
Expand Down
2 changes: 1 addition & 1 deletion smtm/strategy_rsi.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def __init__(self):
self.waiting_requests = {}
self.position = None

def initialize(self, budget, min_price=100, add_spot_callback=None):
def initialize(self, budget, min_price=100, add_spot_callback=None, add_line_callback=None):
"""예산을 설정하고 초기화한다
budget: 예산
Expand Down
2 changes: 1 addition & 1 deletion smtm/strategy_sma_0.py
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ def __create_sell(self):
"amount": amount,
}

def initialize(self, budget, min_price=5000, add_spot_callback=None):
def initialize(self, budget, min_price=5000, add_spot_callback=None, add_line_callback=None):
"""
예산과 최소 거래 가능 금액을 설정한다
"""
Expand Down
6 changes: 5 additions & 1 deletion smtm/strategy_sma_ml.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,9 @@ def __init__(self):
self.waiting_requests = {}
self.cross_info = [{"price": 0, "index": 0}, {"price": 0, "index": 0}]
self.add_spot_callback = None
self.add_line_callback = None

def initialize(self, budget, min_price=5000, add_spot_callback=None):
def initialize(self, budget, min_price=5000, add_spot_callback=None, add_line_callback=None):
"""
예산과 최소 거래 가능 금액을 설정한다
"""
Expand All @@ -76,6 +77,7 @@ def initialize(self, budget, min_price=5000, add_spot_callback=None):
self.balance = budget
self.min_price = min_price
self.add_spot_callback = add_spot_callback
self.add_line_callback = add_line_callback

def update_trading_info(self, info):
"""새로운 거래 정보를 업데이트
Expand All @@ -96,6 +98,8 @@ def update_trading_info(self, info):
return
self.data.append(copy.deepcopy(info))
self.__update_process(info)
if self.add_line_callback is not None:
self.add_line_callback(info["date_time"], info["closing_price"])

def update_result(self, result):
"""요청한 거래의 결과를 업데이트
Expand Down
12 changes: 9 additions & 3 deletions tests/operator_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,28 @@ def test_initialize_keep_object_correctly(self):
self.assertEqual(self.operator.strategy, self.strategy_mock)
self.assertEqual(self.operator.trader, self.trader_mock)
self.assertEqual(self.operator.analyzer, self.analyzer_mock)
self.strategy_mock.initialize.assert_called_once_with("banana", add_spot_callback=ANY)
self.strategy_mock.initialize.assert_called_once_with(
"banana", add_spot_callback=ANY, add_line_callback=ANY
)

def test_initialize_should_call_analyzer_initialize_with_trader(self):
self.trader_mock.get_account_info = "orange"
self.operator.initialize(
"mango", self.strategy_mock, self.trader_mock, self.analyzer_mock, "banana"
)
self.analyzer_mock.initialize.assert_called_once_with("orange")
self.strategy_mock.initialize.assert_called_once_with("banana", add_spot_callback=ANY)
self.strategy_mock.initialize.assert_called_once_with(
"banana", add_spot_callback=ANY, add_line_callback=ANY
)

def test_initialize_should_call_strategy_initialize_with_add_spot_callback(self):
self.trader_mock.get_account_info = "orange"
self.operator.initialize(
"mango", self.strategy_mock, self.trader_mock, self.analyzer_mock, "banana"
)
self.strategy_mock.initialize.assert_called_once_with("banana", add_spot_callback=ANY)
self.strategy_mock.initialize.assert_called_once_with(
"banana", add_spot_callback=ANY, add_line_callback=ANY
)
self.strategy_mock.initialize.call_args[1]["add_spot_callback"]("spot_date_time", 777)
self.analyzer_mock.add_drawing_spot.assert_called_once_with("spot_date_time", 777)

Expand Down

0 comments on commit 1a4efb2

Please sign in to comment.