Skip to content

Commit

Permalink
add add_spot_callback interface
Browse files Browse the repository at this point in the history
  • Loading branch information
msaltnet committed Feb 24, 2022
1 parent a2dc7d7 commit 254e116
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 9 deletions.
2 changes: 1 addition & 1 deletion integration_tests/analyzer_ITG_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,5 +322,5 @@ def test_ITG_analyze_create_report(self):
with open("integration_tests/data/test_report.txt", "r") as file2:
diff = set(file1).difference(file2)

self.assertEqual(len(diff), 1)
self.assertTrue(len(diff) < 2)
self.assertTrue(os.path.isfile(analyzer.OUTPUT_FOLDER + "test_report.jpg"))
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)
strategy.initialize.assert_called_with(50000, add_spot_callback=ANY)

strategy.get_request.return_value = "mango"
op.set_interval(1)
Expand Down
5 changes: 4 additions & 1 deletion smtm/operator.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,15 @@ def initialize(self, data_provider, strategy, trader, analyzer, budget=500):
if self.state is not None:
return

def add_spot_callback(date_time, value):
analyzer.add_drawing_spot(date_time, value)

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

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

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

def initialize(self, budget, min_price=5000):
def initialize(self, budget, min_price=5000, add_spot_callback=None):
"""예산과 최소 거래 가능 금액을 설정한다"""
if self.is_intialized:
return
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 @@ -320,7 +320,7 @@ def __create_sell(self):
"amount": amount,
}

def initialize(self, budget, min_price=5000):
def initialize(self, budget, min_price=5000, add_spot_callback=None):
"""
예산과 최소 거래 가능 금액을 설정한다
"""
Expand Down
13 changes: 11 additions & 2 deletions tests/operator_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,24 @@ 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")
self.strategy_mock.initialize.assert_called_once_with("banana", add_spot_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")
self.strategy_mock.initialize.assert_called_once_with("banana", add_spot_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.call_args[1]["add_spot_callback"]("spot_date_time", 777)
self.analyzer_mock.add_drawing_spot.assert_called_once_with("spot_date_time", 777)

def test_initialize_do_nothing_when_state_is_NOT_None(self):
self.operator.state = "mango"
Expand Down

0 comments on commit 254e116

Please sign in to comment.