使用Claude 3.7 Sonnet开始美股量化搞钱,让它通过老虎证券的API文档用python代码实现模拟账户下限价单买入股票
Claude3.7 Sonnet今天已经发布了,迫不及待测试了一下它写代码的能力,看它和Grok 3.0相比如何。后面将继续来研究如何用AI来生成交易策略来实现量化交易,续。今天想看下用老虎证券的API开放平台实现模拟账户下单买股票。我先试了第一个功能,查询账户功能,老虎文档写的是,我将文档内容直接丢给它,让它给我python代码。第二个测试,让它直接教我如何用模拟账户下单,用130元价格买一手英
今天,我决定用老虎证券的API开放平台来实现模拟账户下单买股票,看看AI能不能顺利完成任务。你知道,编程的乐趣就是在于一开始的探索,尤其是当你碰到新的技术挑战时。
老虎证券的开放平台提供了一些非常实用的API接口,方便开发者与证券账户进行交互。如果你感兴趣,可以查看它们的官方文档:
我先试了第一个功能,查询账户功能,老虎文档写的是,
第一个挑战:查询账户余额
我首先决定从最简单的操作开始——查询账户余额。按照老虎的文档,API接口应该会返回账户的各种余额信息。我直接将文档丢给Claude 3.7,看看它能否给我生成一段完美的Python代码。
不出所料,它快速给出了以下代码:
代码如下:
from tigeropen.trade.trade_client import TradeClient
from tigeropen.tiger_open_config import get_client_config
import pandas as pd
from pprint import pprint
def get_account_balance(private_key_path, tiger_id, account=None):
"""
获取老虎证券账户余额信息
参数:
private_key_path (str): 私钥文件路径
tiger_id (str): 老虎证券ID
account (str, optional): 账户ID,不指定则使用默认账户
返回:
dict: 包含账户余额信息的字典
"""
# 设置客户端配置
client_config = get_client_config(
private_key_path=private_key_path,
tiger_id=tiger_id,
account=account
)
# 创建交易客户端
trade_client = TradeClient(client_config)
# 获取账户资产信息
portfolio_account = trade_client.get_prime_assets(base_currency='USD')
# 提取关键账户信息
account_info = {
'account_id': portfolio_account.account,
'update_time': portfolio_account.update_timestamp,
'summary': {}
}
# 处理证券账户信息 (如果存在)
if 'S' in portfolio_account.segments:
sec = portfolio_account.segments['S']
account_info['summary']['securities'] = {
'cash_balance': sec.cash_balance,
'available_cash': sec.cash_available_for_trade,
'withdrawable_cash': sec.cash_available_for_withdrawal,
'equity_with_loan': sec.equity_with_loan,
'total_assets': sec.net_liquidation,
'unrealized_pl': sec.unrealized_pl,
'realized_pl': sec.realized_pl,
'buying_power': sec.buying_power,
'leverage': sec.leverage,
'currencies': {}
}
# 添加各币种资产
for currency, asset in sec.currency_assets.items():
account_info['summary']['securities']['currencies'][currency] = {
'cash_balance': asset.cash_balance,
'available_cash': asset.cash_available_for_trade
}
# 处理期货账户信息 (如果存在)
if 'C' in portfolio_account.segments:
futures = portfolio_account.segments['C']
account_info['summary']['futures'] = {
'cash_balance': futures.cash_balance,
'available_cash': futures.cash_available_for_trade,
'withdrawable_cash': futures.cash_available_for_withdrawal,
'total_assets': futures.net_liquidation,
'unrealized_pl': futures.unrealized_pl,
'realized_pl': futures.realized_pl,
'init_margin': futures.init_margin,
'maintain_margin': futures.maintain_margin,
'currencies': {}
}
# 添加各币种资产
for currency, asset in futures.currency_assets.items():
account_info['summary']['futures']['currencies'][currency] = {
'cash_balance': asset.cash_balance,
'available_cash': asset.cash_available_for_trade
}
return account_info
if __name__ == "__main__":
# 设置您的参数
private_key_path = '您的私钥路径'
tiger_id = '您的tiger_id'
account = '您的账户ID' # 可选,不设置则使用默认账户
# 获取账户余额
balance_info = get_account_balance(private_key_path, tiger_id, account)
# 打印账户信息
print(f"账户ID: {balance_info['account_id']}")
print(f"更新时间: {pd.to_datetime(balance_info['update_time'], unit='ms')}")
print("\n=== 账户余额详情 ===")
pprint(balance_info['summary'])
运行结果如下:
这个代码直接生成了所有我需要的查询功能,并且一次性准确输出了账户余额。大赞Claude 3.7的效率!
同时也测试了一下Grok3.0,可惜这次Grok3.0没能正确给出代码。
第二个挑战:模拟账户下单
接下来,我决定再挑战一下,看看Claude 3.7能否教我如何通过模拟账户下单买入股票。我的目标是用130美元的价格购买一手英伟达(NVDA)股票。
再次,我将任务交给Claude 3.7,它迅速给出了一段代码:
代码如下:
from tigeropen.common.util.contract_utils import stock_contract
from tigeropen.common.util.order_utils import limit_order
from tigeropen.trade.trade_client import TradeClient
from tigeropen.tiger_open_config import get_client_config
def place_limit_order_for_nvda():
"""
在模拟账户中下限价单购买一手NVDA股票
"""
# 设置客户端配置,这里需要使用您的模拟账户
# 注意:确保account参数是您的模拟账户ID
client_config = get_client_config(
private_key_path='您的私钥路径', # 替换为您的私钥文件路径
tiger_id='您的tiger_id', # 替换为您的老虎证券ID
account='您的模拟账户ID' # 替换为您的模拟账户ID
)
# 创建交易客户端
trade_client = TradeClient(client_config)
# 生成NVDA股票合约
contract = stock_contract(symbol='NVDA', currency='USD')
# 生成限价单订单对象
# 参数说明:
# - account: 账户ID
# - contract: 股票合约
# - action: 买入(BUY)或卖出(SELL)
# - limit_price: 限价单价格,这里设为130美元
# - quantity: 数量,这里为1手(100股)
order = limit_order(
account=client_config.account,
contract=contract,
action='BUY',
limit_price=130.0,
quantity=100 # 美股一手通常是100股
)
# 下单
try:
order_id = trade_client.place_order(order)
print(f"订单已提交,订单ID: {order_id}")
print(f"订单状态: {order.status}")
# 获取订单详情
placed_order = trade_client.get_order(id=order_id)
print("订单详情:")
print(f"- 交易品种: {placed_order.contract}")
print(f"- 订单类型: {placed_order.order_type}")
print(f"- 交易方向: {placed_order.action}")
print(f"- 限价: ${placed_order.limit_price}")
print(f"- 数量: {placed_order.quantity}股")
print(f"- 已成交: {placed_order.filled}股")
print(f"- 剩余: {placed_order.remaining}股")
except Exception as e:
print(f"下单失败: {e}")
if hasattr(order, 'reason') and order.reason:
print(f"失败原因: {order.reason}")
if __name__ == "__main__":
place_limit_order_for_nvda()
运行结果是:代码准确执行,成功下单!模拟账户中可以看到买入成功。
在手机端也能看到买入成功的交易记录。整个人都感觉AI就是这么可靠!
手机端也可以看到确实买入成功。
下一步:量化交易
这次的测试顺利完成之后,我计划深入研究如何用AI来生成交易策略,实现量化交易。毕竟,AI不仅能帮助你解决技术问题,还能在金融市场中发掘新的机会。这个故事,还在继续……
更多推荐
所有评论(0)