qka 1.2.2.dev2__tar.gz → 1.2.3.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/PKG-INFO +1 -1
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/core/broker.py +5 -5
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/.github/workflows/docs.yml +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/.github/workflows/release.yml +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/.gitignore +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/.vscode/settings.json +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/CHANGELOG.md +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/LICENSE +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/README.md +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/docs/api/brokers.md +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/docs/api/core.md +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/docs/api/utils.md +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/docs/getting-started/concepts.md +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/docs/getting-started/first-strategy.md +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/docs/getting-started/installation.md +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/docs/index.md +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/docs/user-guide/backtest.md +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/docs/user-guide/data.md +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/docs/user-guide/trading.md +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/mkdocs.yml +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/pyproject.toml +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/__init__.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/brokers/__init__.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/brokers/client.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/brokers/server.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/brokers/trade.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/cli.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/core/__init__.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/core/backtest.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/core/data.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/core/report.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/core/strategy.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/mcp/__init__.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/mcp/api.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/mcp/server.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/server/__init__.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/server/handlers/__init__.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/server/handlers/class_inspector_handler.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/server/handlers/code_executor_handler.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/server/ws_client.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/server/zmq_server.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/utils/__init__.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/utils/anis.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/utils/logger.py +0 -0
- {qka-1.2.2.dev2 → qka-1.2.3.dev1}/qka/utils/util.py +0 -0
|
@@ -114,7 +114,7 @@ class Broker:
|
|
|
114
114
|
bool: 交易是否成功
|
|
115
115
|
"""
|
|
116
116
|
if size <= 0:
|
|
117
|
-
|
|
117
|
+
logger.warning(f"买入数量必须大于 0!当前: {size}")
|
|
118
118
|
return False
|
|
119
119
|
|
|
120
120
|
if price <= 0:
|
|
@@ -130,7 +130,7 @@ class Broker:
|
|
|
130
130
|
total_cost = amount + commission
|
|
131
131
|
|
|
132
132
|
if self.cash < total_cost:
|
|
133
|
-
|
|
133
|
+
logger.debug(f"资金不足!需要 {total_cost:.2f}(佣金 {commission:.2f}),当前可用 {self.cash:.2f}")
|
|
134
134
|
return False
|
|
135
135
|
|
|
136
136
|
# 执行买入
|
|
@@ -173,7 +173,7 @@ class Broker:
|
|
|
173
173
|
bool: 交易是否成功
|
|
174
174
|
"""
|
|
175
175
|
if size <= 0:
|
|
176
|
-
|
|
176
|
+
logger.warning(f"卖出数量必须大于 0!当前: {size}")
|
|
177
177
|
return False
|
|
178
178
|
|
|
179
179
|
if price <= 0:
|
|
@@ -181,12 +181,12 @@ class Broker:
|
|
|
181
181
|
return False
|
|
182
182
|
|
|
183
183
|
if symbol not in self.positions:
|
|
184
|
-
|
|
184
|
+
logger.warning(f"没有 {symbol} 的持仓!")
|
|
185
185
|
return False
|
|
186
186
|
|
|
187
187
|
position = self.positions[symbol]
|
|
188
188
|
if position['size'] < size:
|
|
189
|
-
|
|
189
|
+
logger.warning(f"持仓不足!当前持有 {position['size']},尝试卖出 {size}")
|
|
190
190
|
return False
|
|
191
191
|
|
|
192
192
|
exec_price = price * (1 - self.slippage)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|