fix bug
This commit is contained in:
@@ -1,82 +1,62 @@
|
||||
from .models import *
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
|
||||
OP_BUY = 23
|
||||
OP_SELL = 24
|
||||
ORDER_TYPE_VOLUME, PR_TYPE_LATEST, QUICK_TRADE_NOW = 1101, 5, 2
|
||||
ORDER_TYPE_VOLUME = 1101
|
||||
PR_TYPE_LATEST = 5
|
||||
QUICK_TRADE_NOW = 2
|
||||
ORDER_SIDE_BY_OFFSET = {"23": "BUY", "24": "SELL", "48": "BUY", "49": "SELL"}
|
||||
|
||||
|
||||
class TradeMixin:
|
||||
account_type: str
|
||||
def passorder(
|
||||
self,
|
||||
op_type: int,
|
||||
stock_code: str,
|
||||
volume: int,
|
||||
order_type: int = ORDER_TYPE_VOLUME,
|
||||
pr_type: int = PR_TYPE_LATEST,
|
||||
price: float = -1,
|
||||
quick_trade: int = QUICK_TRADE_NOW,
|
||||
strategy_name: str = "",
|
||||
order_id: str = "",
|
||||
) -> dict[str, Any]:
|
||||
return self._post_json(
|
||||
"/api/trade/passorder",
|
||||
{
|
||||
"opType": op_type,
|
||||
"orderType": order_type,
|
||||
"stockCode": stock_code,
|
||||
"prType": pr_type,
|
||||
"price": price,
|
||||
"volume": volume,
|
||||
"quickTrade": quick_trade,
|
||||
"strategyName": strategy_name,
|
||||
"orderId": order_id,
|
||||
},
|
||||
)
|
||||
|
||||
def passorder(self, op_type, stock, volume, order_type=0, pr_type=0, price=0.0, quick_trade=0, strategy_name=""):
|
||||
body = {"opType": op_type, "stock": stock, "price": price, "volume": volume}
|
||||
for key, value in (("orderType", order_type), ("prType", pr_type), ("quickTrade", quick_trade), ("strategyName", strategy_name)):
|
||||
if value: body[key] = value
|
||||
return self._post_json("/api/trade/passorder", body)
|
||||
def passorder_latest(self, side: int, stock_code: str, volume: int) -> dict[str, Any]:
|
||||
return self.passorder(side, stock_code, volume)
|
||||
|
||||
def passorder_latest(self, side, stock, volume): return self.passorder_latest_tagged(side, stock, volume, "", "")
|
||||
def passorder_latest_tagged(self, side, stock_code, volume, strategy_name, order_id):
|
||||
body = {
|
||||
"opType": side,
|
||||
"orderType": ORDER_TYPE_VOLUME,
|
||||
"stockCode": stock_code,
|
||||
"prType": PR_TYPE_LATEST,
|
||||
"price": -1,
|
||||
"volume": volume,
|
||||
"quickTrade": QUICK_TRADE_NOW,
|
||||
"strategyName": strategy_name,
|
||||
"orderId": order_id,
|
||||
}
|
||||
return self._post_json("/api/trade/passorder", body)
|
||||
def passorder_latest_tagged(
|
||||
self,
|
||||
side: int,
|
||||
stock_code: str,
|
||||
volume: int,
|
||||
strategy_name: str,
|
||||
order_id: str,
|
||||
) -> dict[str, Any]:
|
||||
return self.passorder(
|
||||
side,
|
||||
stock_code,
|
||||
volume,
|
||||
strategy_name=strategy_name,
|
||||
order_id=order_id,
|
||||
)
|
||||
|
||||
def algo_passorder(self, **kwargs): return self._post_json("/api/trade/algo_passorder", kwargs)
|
||||
def smart_algo_passorder(self, **kwargs): return self._post_json("/api/trade/smart_algo_passorder", kwargs)
|
||||
|
||||
def _style_order(self, path, stock, value_key, value, style, price):
|
||||
return self._post_json(path, {"stock": stock, value_key: value, "style": style, "price": price})
|
||||
def order_lots(self, stock, lots, style, price): return self._style_order("/api/trade/order_lots", stock, "lots", lots, style, price)
|
||||
def order_value(self, stock, value, style, price): return self._style_order("/api/trade/order_value", stock, "value", value, style, price)
|
||||
def order_percent(self, stock, percent, style, price): return self._style_order("/api/trade/order_percent", stock, "percent", percent, style, price)
|
||||
def order_target_value(self, stock, value, style, price): return self._style_order("/api/trade/order_target_value", stock, "tar_value", value, style, price)
|
||||
def order_target_percent(self, stock, percent, style, price): return self._style_order("/api/trade/order_target_percent", stock, "tar_percent", percent, style, price)
|
||||
def order_shares(self, stock, shares, style, price): return self._style_order("/api/trade/order_shares", stock, "shares", shares, style, price)
|
||||
|
||||
def _future(self, action, stock, amount, style, price): return self._style_order(f"/api/trade/futures/{action}", stock, "amount", amount, style, price)
|
||||
def futures_buy_open(self, *args): return self._future("buy_open", *args)
|
||||
def futures_buy_close_tdayfirst(self, *args): return self._future("buy_close_tdayfirst", *args)
|
||||
def futures_buy_close_ydayfirst(self, *args): return self._future("buy_close_ydayfirst", *args)
|
||||
def futures_sell_open(self, *args): return self._future("sell_open", *args)
|
||||
def futures_sell_close_tdayfirst(self, *args): return self._future("sell_close_tdayfirst", *args)
|
||||
def futures_sell_close_ydayfirst(self, *args): return self._future("sell_close_ydayfirst", *args)
|
||||
|
||||
def _task(self, action, task_id): return self._post_json(f"/api/trade/{action}_task", {"taskId": task_id, "accountType": self.account_type})
|
||||
def cancel_task(self, task_id): return self._task("cancel", task_id)
|
||||
def pause_task(self, task_id): return self._task("pause", task_id)
|
||||
def resume_task(self, task_id): return self._task("resume", task_id)
|
||||
def do_order(self): return self._post_json("/api/trade/do_order")
|
||||
def trade_detail_data(self, datatype):
|
||||
datatype = str(datatype).strip().lower()
|
||||
data = self._post_json(
|
||||
"/api/trade/trade_detail_data",
|
||||
{"account": self.account_type, "datatype": datatype},
|
||||
).get("data", [])
|
||||
rows = data if isinstance(data, list) else [data] if isinstance(data, dict) else []
|
||||
if datatype == "order":
|
||||
return [OrderItem.from_trade_detail(row) for row in rows]
|
||||
if datatype == "position":
|
||||
return [PositionItem.from_trade_detail(row) for row in rows]
|
||||
if datatype == "account":
|
||||
return [Assets.from_dict(row) for row in rows]
|
||||
return data
|
||||
def value_by_order_id(self, order_id, datatype): return self._post_json("/api/trade/value_by_order_id", {"orderId": order_id, "accountType": self.account_type, "datatype": datatype}).get("data")
|
||||
def last_order_id(self, datatype): return self._post_json("/api/trade/last_order_id", {"account": self.account_type, "datatype": datatype}).get("last_order_id")
|
||||
def can_cancel_order(self, order_id): return self._post_json("/api/trade/can_cancel_order", {"orderId": order_id, "accountType": self.account_type}).get("can_cancel")
|
||||
def cancel_by_id(self, order_id): return self._post_json("/api/order/cancel_by_id", {"order_id": order_id, "account_type": self.account_type})
|
||||
def debt_contract(self): return self._contract("debt_contract")
|
||||
def assure_contract(self): return self._contract("assure_contract")
|
||||
def enable_short_contract(self): return self._contract("enable_short_contract")
|
||||
def _contract(self, name): return self._post_json(f"/api/trade/{name}").get("data", [])
|
||||
def ipo_data(self, typ): return self._post_field("/api/trade/ipo_data", {"type": typ}, "data")
|
||||
def new_purchase_limit(self): return self._post_field("/api/trade/new_purchase_limit", None, "data")
|
||||
def cancel_by_id(self, order_id: str) -> dict[str, Any]:
|
||||
return self._post_json("/api/trade/cancel_by_id", {"order_id": order_id})
|
||||
|
||||
Reference in New Issue
Block a user