From c0750cdc87fd2323722e34f7ccc41514cfee215a Mon Sep 17 00:00:00 2001 From: zhiyong Date: Sun, 5 Jan 2025 22:31:17 +0800 Subject: [PATCH] feat: make real_trader work --- README.md | 5 +++- src/real_trader.py | 30 +++++++++++++++----- tests/__init__.py | 1 + tests/test_real_trader.py | 59 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 87 insertions(+), 8 deletions(-) create mode 100644 tests/__init__.py create mode 100644 tests/test_real_trader.py diff --git a/README.md b/README.md index 58d9958..535f0d2 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,7 @@ real trader 服务器, 基于easytrader python 版本: 3.6.8-win32 ## 依赖安装 -pip install -r requirements.txt \ No newline at end of file +pip install -r requirements.txt + +## 运行准备 +在环境变量中设置ACCOUNT和PASSWORD \ No newline at end of file diff --git a/src/real_trader.py b/src/real_trader.py index 311605b..fd8603e 100644 --- a/src/real_trader.py +++ b/src/real_trader.py @@ -71,13 +71,29 @@ if __name__ == "__main__": # 获取账户余额测试 balance = trader.get_balance() print("账户余额信息:", balance) + + # 获取持仓信息 + positions = trader.get_positions() + print("持仓信息:", positions) + + # 获取当日成交 + today_trades = trader.get_today_trades() + print("当日成交:", today_trades) + + # 获取当日委托 + today_entrust = trader.get_today_entrust() + print("当日委托:", today_entrust) + + # 刷新数据 + trader.refresh() + print("数据已刷新") except Exception as e: print("发生错误:", str(e)) - finally: - # 确保退出登录 - try: - trader.logout() - print("已安全退出!") - except: - pass + # finally: + # # 确保退出登录 + # try: + # trader.logout() + # print("已安全退出!") + # except: + # pass diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ + diff --git a/tests/test_real_trader.py b/tests/test_real_trader.py new file mode 100644 index 0000000..0b76ddb --- /dev/null +++ b/tests/test_real_trader.py @@ -0,0 +1,59 @@ +import unittest +from unittest.mock import patch, MagicMock +import os +import sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from src.real_trader import RealTrader + +class TestRealTrader(unittest.TestCase): + def setUp(self): + self.trader = RealTrader() + + def test_init(self): + """测试初始化""" + self.assertEqual(self.trader._exe_path, r"C:\\ths\\xiadan.exe") + + @patch('easytrader.use') + def test_login(self, mock_use): + """测试登录功能""" + mock_trader = MagicMock() + mock_use.return_value = mock_trader + + self.trader.login() + + mock_use.assert_called_once_with("ths5.19") + mock_trader.enable_type_keys_for_editor.assert_called_once() + mock_trader.prepare.assert_called_once_with( + user=self.trader._ACCOUNT, + password=self.trader._PASSWORD, + exe_path=self.trader._exe_path + ) + + @patch('easytrader.use') + def test_get_balance(self, mock_use): + """测试获取余额""" + mock_trader = MagicMock() + mock_use.return_value = mock_trader + expected_balance = {'资金余额': 1000} + mock_trader.balance = expected_balance + + self.trader.login() + balance = self.trader.get_balance() + + self.assertEqual(balance, expected_balance) + + @patch('easytrader.use') + def test_get_positions(self, mock_use): + """测试获取持仓""" + mock_trader = MagicMock() + mock_use.return_value = mock_trader + expected_positions = [{'证券代码': '000001', '证券名称': '平安银行'}] + mock_trader.position = expected_positions + + self.trader.login() + positions = self.trader.get_positions() + + self.assertEqual(positions, expected_positions) + +if __name__ == '__main__': + unittest.main()