Skip to content

Commit

Permalink
Merge pull request #13 from zsrl/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
zsrl authored Dec 7, 2024
2 parents 36fa945 + 55e88f7 commit df342ad
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 25 deletions.
47 changes: 23 additions & 24 deletions tdxtrader/order.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from tdxtrader.utils import add_stock_suffix, timestamp_to_datetime_string, convert_to_current_date
from tdxtrader.anis import RED, GREEN, YELLOW, BLUE, RESET
from tdxtrader.logger import logger
from tdxtrader.trader import error_orders

def get_volume(paload, row):
if paload.get('size') is not None:
Expand Down Expand Up @@ -36,28 +37,30 @@ def create_order(xt_trader, account, file_path, previous_df, buy_sign, sell_sign

if row['sign'] == buy_sign:
buy_paload = buy_event(row, xt_trader)
xt_trader.order_stock_async(
account=account,
stock_code=stock_code,
order_type=xtconstant.STOCK_BUY,
order_volume=get_volume(buy_paload, row),
price_type=price_type_map.get(buy_paload.get('type')) or xtconstant.LATEST_PRICE,
price=buy_paload.get('price') or -1,
order_remark=row.get('name')
)
elif row['sign'] == sell_sign:
position = xt_trader.query_stock_position(account, stock_code)
if position is not None:
sell_paload = sell_event(row, position, xt_trader)
if buy_paload is not None:
xt_trader.order_stock_async(
account=account,
stock_code=stock_code,
order_type=xtconstant.STOCK_SELL,
order_volume=get_volume(sell_paload, row),
price_type=price_type_map.get(sell_paload.get('type')) or xtconstant.LATEST_PRICE,
price=sell_paload.get('price') or -1,
order_type=xtconstant.STOCK_BUY,
order_volume=get_volume(buy_paload, row),
price_type=price_type_map.get(buy_paload.get('type')) or xtconstant.LATEST_PRICE,
price=buy_paload.get('price') or -1,
order_remark=row.get('name')
)
elif row['sign'] == sell_sign:
position = xt_trader.query_stock_position(account, stock_code)
if position is not None:
sell_paload = sell_event(row, position, xt_trader)
if sell_paload is not None:
xt_trader.order_stock_async(
account=account,
stock_code=stock_code,
order_type=xtconstant.STOCK_SELL,
order_volume=get_volume(sell_paload, row),
price_type=price_type_map.get(sell_paload.get('type')) or xtconstant.LATEST_PRICE,
price=sell_paload.get('price') or -1,
order_remark=row.get('name')
)
else:
logger.warning(f"{YELLOW}【无持仓】{RESET}没有查询到持仓信息,不执行卖出操作。股票代码:{stock_code}, 名称:{row['name']}")

Expand All @@ -69,12 +72,8 @@ def cancel_order(xt_trader, account, cancel_after):
if cancel_after is not None:
orders = xt_trader.query_stock_orders(account, cancelable_only=True)
for order in orders:
if order.order_id in error_orders:
return
order_time = convert_to_current_date(order.order_time)
# print(order_time, time.time())
# print(timestamp_to_datetime_string(order_time), timestamp_to_datetime_string(time.time()))
if time.time() - order_time >= cancel_after:
xt_trader.cancel_order_stock_async(account, order.order_id)
# if seq > 0:
# logger.warning(f"{YELLOW}【已撤单】{RESET}代码: {order.stock_code} 订单编号:{order.order_id} 下单时间: {timestamp_to_datetime_string(order.order_time)} 撤单时间:{timestamp_to_datetime_string(time.time())}")
# else:
# logger.error(f"【撤单失败】代码: {order.stock_code} 订单号:{order.order_id} 下单时间: {timestamp_to_datetime_string(order.order_time)} 撤单时间:{timestamp_to_datetime_string(time.time())}")
xt_trader.cancel_order_stock_async(account, order.order_id)
10 changes: 9 additions & 1 deletion tdxtrader/trader.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
from tdxtrader.anis import RED, GREEN, YELLOW, BLUE, RESET
from tdxtrader.logger import logger

error_orders = []

class MyXtQuantTraderCallback(XtQuantTraderCallback):
def on_disconnected(self):
"""
Expand Down Expand Up @@ -34,9 +36,15 @@ def on_stock_trade(self, trade):
logger.info(f"{GREEN}【已成交】{RESET} {parse_order_type(trade.order_type)} 代码:{trade.stock_code} 名称:{trade.order_remark} 成交价格:{trade.traded_price:.2f} 成交数量:{trade.traded_volume} 成交编号:{trade.order_id} 成交时间:{timestamp_to_datetime_string(convert_to_current_date(trade.traded_time))}")

def on_order_error(self, data):
logger.error(f"{RED}【委托失败】{RESET}错误信息:{data.error_msgstrip()}")
if data.order_id in error_orders:
return
error_orders.append(data.order_id)
logger.error(f"{RED}【委托失败】{RESET}错误信息:{data.error_msg.strip()}")

def on_cancel_error(self, data):
if data.order_id in error_orders:
return
error_orders.append(data.order_id)
logger.error(f"{RED}【撤单失败】{RESET}错误信息:{data.error_msg.strip()}")


Expand Down

0 comments on commit df342ad

Please sign in to comment.