feat: 备份 hk_intraday_close.py + us_intraday_close.py

This commit is contained in:
2026-07-24 12:06:48 +08:00
parent d331b4e682
commit 0fb327e397
2 changed files with 180 additions and 0 deletions
+90
View File
@@ -0,0 +1,90 @@
#!/usr/bin/env python3
"""港股日内交易强制平仓 - 北京时间15:45运行"""
import os, json, time
from datetime import datetime
# Force SDK to use international endpoint (bypass 602315 mainland CN geo-block)
os.environ['LONGBRIDGE_REGION'] = 'ap'
# Load LongBridge credentials
config = {}
with open(os.path.expanduser('~/.bashrc'), 'r') as f:
for line in f:
if line.startswith('export LONGPORT_'):
key, value = line.strip().split('=', 1)
config[key.replace('export ', '')] = value
os.environ['LONGPORT_APP_KEY'] = config.get('LONGPORT_APP_KEY', '')
os.environ['LONGPORT_APP_SECRET'] = config.get('LONGPORT_APP_SECRET', '')
os.environ['LONGPORT_ACCESS_TOKEN'] = config.get('LONGPORT_ACCESS_TOKEN', '')
from longport import openapi
cfg = openapi.Config.from_env()
trade_ctx = openapi.TradeContext(config=cfg)
# 读取入场记录
entry_file = os.path.expanduser('~/.hermes/trading/hk_intraday_entries.json')
if not os.path.exists(entry_file):
print("📊 无日内持仓记录")
exit(0)
with open(entry_file) as f:
entries = json.load(f)
if not entries:
print("📊 无日内持仓")
exit(0)
print(f"🔔 日内平仓开始 {datetime.now().strftime('%H:%M')}")
print("=" * 50)
closed = []
errors = []
for ticker, entry in list(entries.items()):
try:
# 只平仓日内系统自己开的仓位
order_id = entry.get('order_id', '')
if not order_id:
print(f"⚠️ {ticker}: 无订单ID,跳过平仓")
continue
entry_shares = entry.get('shares', 0)
# 市价平仓(只平我们开的仓位数量)
if entry['side'] == 'buy':
resp = trade_ctx.submit_order(
symbol=ticker,
order_type=openapi.OrderType.MO,
side=openapi.OrderSide.Sell,
submitted_quantity=entry_shares,
time_in_force=openapi.TimeInForceType.Day,
)
else:
resp = trade_ctx.submit_order(
symbol=ticker,
order_type=openapi.OrderType.MO,
side=openapi.OrderSide.Buy,
submitted_quantity=entry_shares,
time_in_force=openapi.TimeInForceType.Day,
)
print(f"{ticker}: 平仓成功 ({entry['side']} {entry_shares}股)")
closed.append(ticker)
except Exception as e:
print(f"{ticker}: 平仓失败 - {e}")
errors.append(ticker)
# 清理已平仓记录
for ticker in closed:
del entries[ticker]
with open(entry_file, 'w') as f:
json.dump(entries, f, indent=2)
print()
print(f"📊 结果: {len(closed)}平仓, {len(errors)}失败")
if errors:
print(f"⚠️ 失败标的: {', '.join(errors)}")
+90
View File
@@ -0,0 +1,90 @@
#!/usr/bin/env python3
"""美股日内交易强制平仓 - 北京时间3:45运行"""
import os, json, time
from datetime import datetime
# Force SDK to use international endpoint (bypass 602315 mainland CN geo-block)
os.environ['LONGBRIDGE_REGION'] = 'ap'
# Load LongBridge credentials
config = {}
with open(os.path.expanduser('~/.bashrc'), 'r') as f:
for line in f:
if line.startswith('export LONGPORT_'):
key, value = line.strip().split('=', 1)
config[key.replace('export ', '')] = value
os.environ['LONGPORT_APP_KEY'] = config.get('LONGPORT_APP_KEY', '')
os.environ['LONGPORT_APP_SECRET'] = config.get('LONGPORT_APP_SECRET', '')
os.environ['LONGPORT_ACCESS_TOKEN'] = config.get('LONGPORT_ACCESS_TOKEN', '')
from longport import openapi
cfg = openapi.Config.from_env()
trade_ctx = openapi.TradeContext(config=cfg)
# 读取入场记录
entry_file = os.path.expanduser('~/.hermes/trading/us_intraday_entries.json')
if not os.path.exists(entry_file):
print("📊 无日内持仓记录")
exit(0)
with open(entry_file) as f:
entries = json.load(f)
if not entries:
print("📊 无日内持仓")
exit(0)
print(f"🔔 美股日内平仓开始 {datetime.now().strftime('%H:%M')}")
print("=" * 50)
closed = []
errors = []
for ticker, entry in list(entries.items()):
try:
# 只平仓日内系统自己开的仓位
order_id = entry.get('order_id', '')
if not order_id:
print(f"⚠️ {ticker}: 无订单ID,跳过平仓")
continue
entry_shares = entry.get('shares', 0)
# 市价平仓(只平我们开的仓位数量)
if entry['side'] == 'buy':
resp = trade_ctx.submit_order(
symbol=ticker,
order_type=openapi.OrderType.MO,
side=openapi.OrderSide.Sell,
submitted_quantity=entry_shares,
time_in_force=openapi.TimeInForceType.Day,
)
else:
resp = trade_ctx.submit_order(
symbol=ticker,
order_type=openapi.OrderType.MO,
side=openapi.OrderSide.Buy,
submitted_quantity=entry_shares,
time_in_force=openapi.TimeInForceType.Day,
)
print(f"{ticker}: 平仓成功 ({entry['side']} {entry_shares}股)")
closed.append(ticker)
except Exception as e:
print(f"{ticker}: 平仓失败 - {e}")
errors.append(ticker)
# 清理已平仓记录
for ticker in closed:
del entries[ticker]
with open(entry_file, 'w') as f:
json.dump(entries, f, indent=2)
print()
print(f"📊 结果: {len(closed)}平仓, {len(errors)}失败")
if errors:
print(f"⚠️ 失败标的: {', '.join(errors)}")