コード例 #1
0
 def test_get_request_return_None_when_data_is_invaild(self):
     sma = StrategySma0()
     sma.initialize(100, 10)
     dummy_info = {}
     sma.update_trading_info(dummy_info)
     requests = sma.get_request()
     self.assertEqual(requests, None)
コード例 #2
0
    def test_get_request_return_correct_request_at_buy_process(self):
        sma = StrategySma0()
        sma.initialize(10000, 100)
        dummy_info = {"closing_price": 20000000}
        sma.update_trading_info(dummy_info)
        sma.cross_info[0] = {"price": 500, "index": 1}
        sma.cross_info[1] = {"price": 500, "index": 2}
        sma.current_process = "buy"
        sma.process_unit = (4000, 0)
        requests = sma.get_request()
        self.assertEqual(requests[0]["price"], 20000000)
        self.assertEqual(requests[0]["amount"], 0.0001)
        self.assertEqual(requests[0]["type"], "buy")

        dummy_info = {"closing_price": 10000000}
        sma.update_trading_info(dummy_info)
        requests = sma.get_request()
        self.assertEqual(requests[0]["price"], 10000000)
        self.assertEqual(requests[0]["amount"], 0.0003)
        self.assertEqual(requests[0]["type"], "buy")

        dummy_info = {"closing_price": 100}
        sma.update_trading_info(dummy_info)
        sma.balance = 2000
        requests = sma.get_request()
        self.assertEqual(requests[0]["price"], 100)
        self.assertEqual(requests[0]["amount"], 19.9899)
        self.assertEqual(requests[0]["type"], "buy")
コード例 #3
0
 def test_get_request_return_None_when_cross_info_is_invaild(self):
     sma = StrategySma0()
     sma.initialize(100, 10)
     dummy_info = {"closing_price": 2000}
     sma.closing_price_list.append(dummy_info)
     sma.cross_info[0] = {"price": 0, "index": 1}
     requests = sma.get_request()
     self.assertEqual(requests, None)
コード例 #4
0
 def test_update_trading_info_append_closing_price(self):
     sma = StrategySma0()
     sma.initialize(100, 10)
     dummy_info = {
         "closing_price": 500,
     }
     sma.update_trading_info(dummy_info)
     self.assertEqual(sma.closing_price_list.pop(), 500)
コード例 #5
0
    def test_update_trading_info_update_process_when_long_lt_short(
            self, mock_series, mock_np):
        sma = StrategySma0()

        for i in range(sma.LONG):
            sma.closing_price_list.append(500)

        class DummyMean:
            pass

        dummy_mean_short = DummyMean()
        dummy_mean_mid = DummyMean()
        dummy_mean_long = DummyMean()

        dummy_mean_short.values = [10]
        dummy_mean_mid.values = [7]
        dummy_mean_long.values = [5]

        rolling_return_mock = MagicMock()
        rolling_return_mock.mean.side_effect = [
            dummy_mean_short,
            dummy_mean_mid,
            dummy_mean_long,
            dummy_mean_short,
            dummy_mean_mid,
            dummy_mean_long,
        ]
        series_return = MagicMock()
        series_return.rolling.return_value = rolling_return_mock
        mock_series.return_value = series_return

        dummy_info = {
            "date_time": "mango",
            "closing_price": 500,
        }
        mock_np.return_value = False
        sma.initialize(100, 10)
        sma.current_process = "sell"
        sma.balance = 90000
        expected_price = 90000 / sma.STEP
        sma.update_trading_info(dummy_info)
        self.assertEqual(sma.current_process, "buy")
        self.assertEqual(sma.process_unit[0], expected_price)
        self.assertEqual(sma.process_unit[1], 0)

        self.assertEqual(sma.cross_info[0], {"price": 0, "index": 0})
        self.assertEqual(sma.cross_info[1], {"price": 500, "index": 60})

        # current_process가 "buy" 일때는 업데이트 되지 않아야함
        sma.current_process = "buy"
        sma.balance = 90000
        sma.update_trading_info(dummy_info)
        self.assertEqual(sma.current_process, "buy")
        self.assertEqual(sma.process_unit[0], 90000)  # 90000 / STEP
        self.assertEqual(sma.process_unit[1], 0)
コード例 #6
0
 def test_initialize_update_initial_balance(self):
     sma = StrategySma0()
     self.assertEqual(sma.is_intialized, False)
     sma.initialize(50000, 50)
     self.assertEqual(sma.budget, 50000)
     self.assertEqual(sma.balance, 50000)
     self.assertEqual(sma.min_price, 50)
     self.assertEqual(sma.is_intialized, True)
     sma.initialize(100, 10)
     self.assertEqual(sma.budget, 50000)
     self.assertEqual(sma.balance, 50000)
     self.assertEqual(sma.min_price, 50)
コード例 #7
0
 def test_get_request_return_turn_over_when_target_budget_lt_min_price_at_simulation(
         self):
     sma = StrategySma0()
     sma.initialize(1000, 500)
     sma.is_simulation = True
     dummy_info = {}
     dummy_info["date_time"] = "2020-02-25T15:41:09"
     dummy_info["closing_price"] = 20000000
     sma.update_trading_info(dummy_info)
     sma.current_process = "buy"
     sma.process_unit = (300, 0)
     requests = sma.get_request()
     self.assertEqual(requests[0]["price"], 0)
     self.assertEqual(requests[0]["amount"], 0)
     self.assertEqual(requests[0]["type"], "buy")
コード例 #8
0
    def test_update_result_update_balance_and_asset_amount(self):
        sma = StrategySma0()
        sma.initialize(100000, 10)
        self.assertEqual(sma.balance, 100000)
        sma.asset_amount = 50

        dummy_result = {
            "type": "buy",
            "request": {
                "id": "orange"
            },
            "price": 1000,
            "amount": 5,
            "msg": "success",
            "balance": 100,
            "state": "done",
        }
        sma.update_result(dummy_result)
        self.assertEqual(sma.balance, 94998)
        self.assertEqual(sma.asset_amount, 55)
        self.assertEqual(sma.result[-1]["type"], "buy")
        self.assertEqual(sma.result[-1]["request"]["id"], "orange")
        self.assertEqual(sma.result[-1]["price"], 1000)
        self.assertEqual(sma.result[-1]["amount"], 5)
        self.assertEqual(sma.result[-1]["msg"], "success")
        self.assertEqual(sma.result[-1]["balance"], 100)

        dummy_result = {
            "type": "sell",
            "request": {
                "id": "apple"
            },
            "price": 1000,
            "amount": 53,
            "msg": "success",
            "balance": 1000,
            "state": "done",
        }
        sma.update_result(dummy_result)
        self.assertEqual(sma.balance, 147972)
        self.assertEqual(sma.asset_amount, 2)
        self.assertEqual(sma.result[-1]["type"], "sell")
        self.assertEqual(sma.result[-1]["request"]["id"], "apple")
        self.assertEqual(sma.result[-1]["price"], 1000)
        self.assertEqual(sma.result[-1]["amount"], 53)
        self.assertEqual(sma.result[-1]["msg"], "success")
        self.assertEqual(sma.result[-1]["balance"], 1000)
コード例 #9
0
 def test_get_request_return_turn_over_when_asset_amount_empty_at_simulation(
         self):
     sma = StrategySma0()
     sma.initialize(900, 10)
     sma.cross_info[0] = {"price": 500, "index": 1}
     sma.cross_info[1] = {"price": 500, "index": 2}
     sma.is_simulation = True
     dummy_info = {}
     dummy_info["date_time"] = "2020-02-25T15:41:09"
     dummy_info["closing_price"] = 20000
     sma.update_trading_info(dummy_info)
     sma.current_process = "sell"
     sma.asset_amount = 0
     sma.process_unit = (0, 10)
     requests = sma.get_request()
     self.assertEqual(requests[0]["price"], 0)
     self.assertEqual(requests[0]["amount"], 0)
     self.assertEqual(requests[0]["type"], "sell")
コード例 #10
0
    def test_get_request_return_turn_over_when_last_data_is_None(self):
        sma = StrategySma0()
        sma.initialize(10000, 100)
        sma.cross_info[0] = {"price": 500, "index": 1}
        sma.cross_info[1] = {"price": 500, "index": 2}
        dummy_info = {}
        dummy_info["closing_price"] = 20000000
        sma.update_trading_info(dummy_info)
        sma.current_process = "buy"
        sma.process_unit = (4000, 0)
        requests = sma.get_request()
        self.assertEqual(requests[0]["price"], 20000000)
        self.assertEqual(requests[0]["amount"], 0.0001)
        self.assertEqual(requests[0]["type"], "buy")

        sma.update_trading_info(None)
        requests = sma.get_request()
        self.assertEqual(requests[0]["price"], 0)
        self.assertEqual(requests[0]["amount"], 0)
コード例 #11
0
    def test_update_result_insert_into_waiting_requests(self):
        sma = StrategySma0()
        sma.initialize(100, 10)
        sma.waiting_requests["banana"] = "banana_request"

        dummy_result = {
            "type": "orange",
            "request": {
                "id": "banana"
            },
            "price": "777000",
            "amount": "0.0001234",
            "msg": "melon",
            "balance": 500,
            "state": "requested",
        }
        sma.update_result(dummy_result)
        self.assertEqual(len(sma.result), 0)
        self.assertTrue("banana" in sma.waiting_requests)
コード例 #12
0
    def test_update_result_append_result(self):
        sma = StrategySma0()
        sma.initialize(100, 10)

        dummy_result = {
            "type": "orange",
            "request": {
                "id": "banana"
            },
            "price": "777000",
            "amount": "0.0001234",
            "msg": "melon",
            "balance": 500,
            "state": "done",
        }
        sma.update_result(dummy_result)
        self.assertEqual(sma.result[-1]["type"], "orange")
        self.assertEqual(sma.result[-1]["request"]["id"], "banana")
        self.assertEqual(sma.result[-1]["price"], "777000")
        self.assertEqual(sma.result[-1]["amount"], "0.0001234")
        self.assertEqual(sma.result[-1]["msg"], "melon")
        self.assertEqual(sma.result[-1]["balance"], 500)
コード例 #13
0
    def test_get_request_return_correct_request_at_sell_process(self):
        sma = StrategySma0()
        sma.initialize(10000, 100)
        dummy_info = {"closing_price": 20000000}
        sma.update_trading_info(dummy_info)
        sma.cross_info[0] = {"price": 500, "index": 1}
        sma.cross_info[1] = {"price": 500, "index": 2}

        sma.current_process = "sell"
        sma.asset_amount = 60
        sma.process_unit = (0, 20)
        requests = sma.get_request()
        self.assertEqual(requests[0]["price"], 20000000)
        self.assertEqual(requests[0]["amount"], 20)
        self.assertEqual(requests[0]["type"], "sell")

        dummy_info = {"closing_price": 10000000}
        sma.update_trading_info(dummy_info)
        sma.asset_amount = 10
        requests = sma.get_request()
        self.assertEqual(requests[0]["price"], 10000000)
        self.assertEqual(requests[0]["amount"], 10)
        self.assertEqual(requests[0]["type"], "sell")
コード例 #14
0
 def test_get_request_return_request_with_cancel_requests(self):
     sma = StrategySma0()
     sma.initialize(10000, 100)
     sma.cross_info[0] = {"price": 500, "index": 1}
     sma.cross_info[1] = {"price": 500, "index": 2}
     sma.waiting_requests["mango_id"] = {"request": {"id": "mango_id"}}
     sma.waiting_requests["orange_id"] = {"request": {"id": "orange_id"}}
     sma.is_simulation = True
     dummy_info = {}
     dummy_info["date_time"] = "2020-02-25T15:41:09"
     dummy_info["closing_price"] = 20000000
     sma.update_trading_info(dummy_info)
     sma.current_process = "sell"
     sma.asset_amount = 60
     sma.process_unit = (0, 20)
     requests = sma.get_request()
     self.assertEqual(requests[0]["id"], "mango_id")
     self.assertEqual(requests[0]["type"], "cancel")
     self.assertEqual(requests[1]["id"], "orange_id")
     self.assertEqual(requests[1]["type"], "cancel")
     self.assertEqual(requests[2]["price"], 20000000)
     self.assertEqual(requests[2]["amount"], 20)
     self.assertEqual(requests[2]["type"], "sell")
     self.assertEqual(requests[2]["date_time"], "2020-02-25T15:41:09")
コード例 #15
0
    def test_update_result_remove_from_waiting_requests(self):
        sma = StrategySma0()
        sma.initialize(100, 10)
        sma.waiting_requests["banana"] = "banana_request"

        dummy_result = {
            "type": "orange",
            "request": {
                "id": "banana"
            },
            "price": "777000",
            "amount": "0.0001234",
            "msg": "melon",
            "balance": 500,
            "state": "done",
        }
        sma.update_result(dummy_result)
        self.assertEqual(sma.result[-1]["type"], "orange")
        self.assertEqual(sma.result[-1]["request"]["id"], "banana")
        self.assertEqual(sma.result[-1]["price"], "777000")
        self.assertEqual(sma.result[-1]["amount"], "0.0001234")
        self.assertEqual(sma.result[-1]["msg"], "melon")
        self.assertEqual(sma.result[-1]["balance"], 500)
        self.assertFalse("banana" in sma.waiting_requests)
コード例 #16
0
 def test_update_trading_info_ignore_info_when_not_yet_initialzed(self):
     sma = StrategySma0()
     sma.update_trading_info("mango")
     self.assertEqual(len(sma.data), 0)
コード例 #17
0
 def test_get_request_return_None_when_data_is_empty(self):
     sma = StrategySma0()
     sma.initialize(100, 10)
     requests = sma.get_request()
     self.assertEqual(requests, None)
コード例 #18
0
 def test_get_request_return_None_when_not_yet_initialized(self):
     sma = StrategySma0()
     requests = sma.get_request()
     self.assertEqual(requests, None)
コード例 #19
0
 def test_update_result_ignore_result_when_not_yet_initialized(self):
     sma = StrategySma0()
     sma.update_result("orange")
     self.assertEqual(len(sma.result), 0)