Giter VIP home page Giter VIP logo

trader-client's Introduction

问薪无愧!
自学量化大纲有这75页就够了

内容摘要:
题图为 MIT 的 Simmons University。版权声明 wiki/public domain。

该建筑属于 MIT 的下属学院 Simmons University,由裁缝 John Simmons 捐建。Simmons Hall 被认为是 Boston 最美的一座...

发表于 2024-07-19 人气 934 点击阅读

不能求二阶导的metrics
不是好的objective

内容摘要:
 
 

!!!quote
最消耗你的东西,不是别人,而是自己的念头。人生之苦,苦在执着。人生之难,难在放下。强大不是对抗,而是接受。一念放下,万般自由。


To accept the things I cannot change...

发表于 2024-07-16 人气 292 点击阅读

你可能不知道的8个IPython技巧

内容摘要:
题图为科罗拉多大学博尔德分校的麦基礼堂。博尔德分校是科罗拉多大学系统的旗舰大学,共有5名诺奖学者,1名图灵奖。

IPython的作者Fernando Pérez在此攻读了粒子物理学博士学位。2001年,他将IPython作为业余项目开发,后来成为Jupyter项目的联合创始人。...

发表于 2024-07-16 人气 198 点击阅读

基于 XGBoost 的组合策略基本框架

内容摘要:
!!! quote
人的放纵是本能,自律才是修行。短时间让你快乐的东西,一定能够让你感到痛苦。反之,那些让你痛苦的东西,最终一定会让你功成名就。记住,低级的快乐,放纵即可拥有,高级的快乐,只有克制才能获得。 -- 罗素

放正文之前,先打个假,这段话不是罗素说的,是啰嗦说...

发表于 2024-07-15 人气 407 点击阅读

Pandas高级技巧-1

内容摘要:
在量化领域,Pandas是不可或缺的工具,它以强大的数据处理和分析功能,极大地简化了数据操作流程。

今天我们介绍两个技巧,都跟因子检验场景相关。第一个技巧是日期按月对齐;第二个是如何提取分组的前n条记录。讲解的概念涉及到group操作、索引的frequency概念以及多级索引的...

发表于 2024-07-15 人气 780 点击阅读

2024已过一半,千禧年发布了这道脑筯急转弯

内容摘要:
今天为大家带来一道千禧年基金的脑筋急转弯题目。

千禧年是一家全球领先的对冲基金管理公司,由以色列裔美国金融家Israel Englander于1989年创立。到今年6月止,管理规模是677亿美元,在职人数5500多人。截止2022年,该公司管理产品的净收益在1989年之后成立的...

发表于 2024-07-10 人气 847 点击阅读

ORB! Alpha 达到年化 36%

内容摘要:
这个策略来自 Carlo Zarattini 等人,在 Quantpedia 2023 年大赛中获第三名。他们研究了最近 6 年的美股市场,发现聚焦在热门股 (Stocks in Play) 中时,5 分钟 ORB 策略实现了超过 1600%的总净收益,夏普高达 2.81,年化 ...

发表于 2024-06-15 人气 992 点击阅读

高薪金领都用啥编程语言?SQL、Python领航,附排名!

内容摘要:
最近两天,收到私信咨询,想进入量化领域难吗?

提问者没有介绍任何自己的背景,也没有明确说明具体要从事什么岗位。因此这是一个无法回答的问题。不过,我会持续跟进这个问题,并给出一些参考资料。

今日焦点:金融界最需要什么样的编程技能。数据来源于Revelio Labs和eFinac...

发表于 2024-06-10 人气 363 点击阅读

反抗者的崛起!Fawce 和 Quantopian 的量化之路

内容摘要:
2008 年的金融危机后,华尔街开始围绕人工智能、算法策略和海量数据构建美丽新世界。掌握编程和算法的大拿是这个新世界的宠儿。也有一批反叛者,他们拒绝华尔街的征召:宁愿穿着睡衣在书房里工作,也不愿在豪华大楼的格子间正襟危坐。

Quantopian 正是这一群人的领袖。John F...

发表于 2024-06-01 人气 861 点击阅读

Barra风险模型构建完全指南

内容摘要:
Barra风险模型是业内最有名的多因子模型之一。它最初由Barra Inc(创始人Barr Rosenberg)提出,后来被MSCI(明晟)收购,因此现在是MSCI的资产。在MSCI网站上,我们还可以看到名为BarraOne的产品推介。

很多想学习Barra模型的人,不知道Ba...

发表于 2024-05-21 人气 537 点击阅读

暴力美学!洗盘模式如何检测?

内容摘要:
**无洗盘,不拉升。** 筹码收集阶段,股价呈现出上涨形态,也吸引到许多不坚定的跟风盘,它们将成为主升过程中的不利因素。

因此,在拉升之前,主力会采用洗盘的方式,将这些不坚定的低价筹码洗下车。这个过程中往往暴涨暴跌,犹如一匹烈马,要摆脱它身上的骑手一样。

**暴力洗盘,某种程...

发表于 2024-05-17 人气 134 点击阅读

前视偏差 - 看似明白,实则糊涂

内容摘要:
之前有一篇关于数据标注的笔记,得到了较多关注,也引起了一些同学质疑:

**你使用了zigzag函数,这不会引起未来数据吗?**

未来数据更学术化的说法叫前视偏差(look-ahead bias),回测中引入了未来数据,确实是做量化中很容易犯的一个错误。

这篇笔记解释了zig...

发表于 2024-05-16 人气 771 点击阅读

trader-client's People

Contributors

aaron-yang-biz avatar henrycs avatar xhatt avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

trader-client's Issues

types.py caused circular import

  • zillionare-trader-client version: 0.3.5
  • Python version: 3.8
  • Operating System: ubuntu 20.04

Description

logging requires re, and re requires types, and types is referred to our types, not the builtin types, thus caused circular import

Justify

should rename types to other names, say, consts.py

使用 client.sell_percent()卖出股票报错:failed: 499, 1 Not Enough Shares

  • zillionare-trader-client version: zillionare-trader-client 0.3.9
  • Python version: Python 3.8
  • Operating System: Win 10

Description

在09:25分后竞价,使用 client.sell_percent()卖出股票,报错:按比例卖出股票 failed: 499, 1 Not Enough Shares. 盘中使用client.sell_percent() 也是同样的报错。

{'security': 'sh603605', 'price': 165.86, 'percent': 1}

按比例卖出股票 failed: 499, 1 Not Enough Shares

raise TradeError(rsp.status_code, rsp.text)

traderclient.errors.TradeError: 1 Not Enough Shares: (499, '1 Not Enough Shares')

使用 client.metrics()报错。

  • zillionare-trader-client version: zillionare-trader-client 0.3.10
  • Python version: Python 3.8
  • Operating System: Win 10

Description

account: johnny_event_bk3_v18-4ba0

账户评估指标 failed: 499, The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Traceback (most recent call last):
File "C:/Users/wx/PycharmProjects/stock_program/zillionare/4_回测并整理交易数据.py", line 250, in
metrics = client.metrics()
File "C:\Users\wx\anaconda3\envs\stock_quant\lib\site-packages\traderclient\client.py", line 616, in metrics
return get(url, headers=self.headers, params=params)
File "C:\Users\wx\anaconda3\envs\stock_quant\lib\site-packages\traderclient\transport.py", line 85, in get
result = process_response_result(rsp, action)
File "C:\Users\wx\anaconda3\envs\stock_quant\lib\site-packages\traderclient\transport.py", line 63, in process_response_result
raise TradeError(rsp.status_code, rsp.text)
traderclient.errors.TradeError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all(): (499, 'The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()')

What I Did

有时报错有时正常。

available_shares在回测时可能无法返回期望数据

如果在3.1日买入某支股票,则次日应该全部可售。但如果在3.1之后没有发生过交易,则次日及以后,available_shares都会为零,因为持仓没有机会被修改。增加dt参数可以解决这个问题。

client.position() 字段需求

  • zillionare-trader-client version: zillionare-trader-client 0.3.10
  • Python version: Python 3.8
  • Operating System: Win 10

Description

client.postition(), 目前有四个键值对,security;shares, sellable; price. 目前需求:增加个股的持仓盈亏,pnl

Consolidate sell_percent with sell

Now we have both sell_percent and sell for selling stock shares. The first one is for sell a portion of the stock shares, the second one is for sell stock shares by absolute amount. However, since the mimimum amount of stock shares to deal with is 100, so we can simply have this:

  1. if shares is among 0 and 1, then the argument is the percentage of shares to sell.
  2. otherwise, it's the absolute amount of the shares to be sold.

Thus the signature of the function is:

def sell(security: str, shares: float, price: Optional[float] = None, order_time: Optional[datetime] = None, **kwargs) -> Dict:
""" sell held stock shares

    Args:
        security: the security to sell
        shares: the number of shares to sell, if it's (0, 1], then it's the percentage of shares to sell, otherwise it's the absolute amount of shares to sell
        price: the price to sell at (optional), if not present, convert it to a market_sell
        order_time: the time of the order (optional), required at backtest mode
    Keyword Args:
        limit_price: the limit price to sell at, if it's a market sell
"""

仓位中有停牌股票时下单显示矢量化错误

2020年7月3日,仓位中有停牌股票‘601558.XSHG’,当日尝试卖出其他股票正常。在7月17日下一次调仓时尝试交易其他股票时报错。7月17日仓位为:
图片

下单代码为:
r = client.market_sell(security=‘300021.XSHE’, volume=35900.0, order_time=arrow.get('2020-07-17 09:31').naive)

报错信息为:
市价卖出 failed: 499, cannot call vectorize on size 0 inputs unless otypes is set

股票买入后几个交易日,client.postion()中,的sellable 一直显示为0,使用client.sell_percent()不能全部成功卖出股票

  • zillionare-trader-client version: zillionare-trader-client 0.3.10
  • Python version: Python 3.8
  • Operating System: Win 10

Description

client.buy() 返回结果:
{'tid': '6dc91bb4-2652-48c5-a38f-2036b92f2413', 'eid': 'b6d4bd8d-7db8-4f70-addf-1f2acd2123b4', 'security': '002931.XSHE', 'order_side': '买入', 'price': 14.488335877862596, 'filled': 65500, 'time': datetime.datetime(2022, 1, 18, 9, 35), 'trade_fees': 94.9}

回测中,2022-01-18买入002931.XSHE后,在随后几个交易日19日,20日,client.position() 返回结果中,最后一个元素的sellable 的值是0,

模拟第255天: 2022-01-19 00:00:00 ==================================================
position
[('600188.XSHG', 34411.76265478, 34411.76265478, 9.63333391)
('002739.XSHE', 7400. , 7400. , 19.69 )
('601117.XSHG', 4761.0397 , 4761.0397 , 6.51032655)
('002931.XSHE', 65500. , 0. , 14.48833588)]

模拟第256天: 2022-01-20 00:00:00 ==================================================
position
[('600188.XSHG', 34411.76265478, 34411.76265478, 9.63333391)
('002739.XSHE', 7400. , 7400. , 19.69 )
('601117.XSHG', 4761.0397 , 4761.0397 , 6.51032655)
('002931.XSHE', 65500. , 0. , 14.48833588)]

在2022-01-20 此股票发出卖出交易,使用client.sell_percent() 全部卖出,显示卖出成功: 但是只是卖出部分,即20800股,如下返回值
[{'tid': '03774906-ae7b-4dde-9fba-071acbcdf66b', 'eid': 'b6d4bd8d-7db8-4f70-addf-1f2acd2123b4', 'security': '002931.XSHE', 'order_side': '卖出', 'price': 14.5, 'filled': 20800.0, 'time': '2022-01-20T09:30:05', 'trade_fees': 30.16}]

当日卖出后,及21日查询持仓:

模拟第257天: 2022-01-21 00:00:00 ==================================================
position
[('600188.XSHG', 34411.76265478, 34411.76265478, 9.63333391)
('002739.XSHE', 7400. , 7400. , 19.69 )
('601117.XSHG', 4761.0397 , 4761.0397 , 6.51032655)
('002931.XSHE', 44700. , 44700. , 14.48833588)]

002931.XSHE,仍然显示有持仓;20日的卖出没有全部成交, 仍有44700股没有卖出。

使用trader_client回测,买入股票失败。

  • zillionare-trader-client version: zillionare-trader-client 0.3.9
  • Python version: Python 3.8
  • Operating System: Win 10

Description

  • 在回测进行到20060303时,账户持仓: [('600216.XSHG', 63000., 63000., 5.02 )
  • ('600240.XSHG', 141800., 0., 4.53054307)];
  • 其中的600216.XSHG 于20060215开始停牌,20060308日复牌;回测账户在20060303买入股票:600227.XSHG时出现报错:“买入股票 failed: 499, -8 获取600216.XSHG在2006-03-03的行情数据失败,请检查日期是否为交易日,或者当天是否停牌”。

在买入股票600227之前,回测系统先查询持仓资产等,因持仓股票600216处于停牌状态,而产生报错。

当日持仓中有停牌的股票,如果当日买卖其他股票也会报错

在回测中,2020-07-03持仓有‘601558.XSHG’,该股当日停牌,在当日发出买卖其他股票的指令时(未进行该股买卖)报错。图片未当日持仓情况,代码为当日下单代码:

图片

r = client.market_sell(security='600698.XSHG', volume=91600.0,order_time= arrow.get('2020-07-03 09:31').naive)
图片

available_money体验问题

当调用available_money的时候,加括号会报错,不加括号正常。
trader_client中其他API均需加括号,如果这个也设置成加上括号用户体验感会更好,使用标准一致

invalid type promotion with structured datatype(s)

在‘2020-05-11’日查询仓位信息为:
图片

经查询,000620.XSHE当日未停牌,下单时间点9点31分未跌停,在9点31日发出下单指令:
client.market_sell(security='000620.XSHE', volume=100, order_time=arrow.get('2020-05-11 09:31').naive)

报错:
TradeError: invalid type promotion with structured datatype(s).: (499, 'invalid type promotion with structured datatype(s).')

market_buy和market_sell返回的数据格式不一致

在回测模式中,market_buy和market_sell返回的数据格式不一致,market_buy返回的为一个字典,如下:
图片
market_sell返回的为列表嵌套字典,如下:
图片
当使用r=market_sell()时,获取某字段比如'filled'需要r[0]['fille'],而market_buy则直接r['filled'],建议改成一致,方便用户统一代码提高体验。

仓位中有只长期停牌股票时交易异常

2020年7月3日,仓位中有停牌股票‘601558.XSHG’,当日尝试卖出其他股票正常。在7月17日下一次调仓时尝试交易其他股票时报错。7月17日仓位为:
图片

下单代码为:
r = client.market_sell(security=‘300021.XSHE’, volume=35900.0, order_time=arrow.get('2020-07-17 09:31').naive)

报错信息为:
图片

Consolidate market_buy with buyy

currently backtesting/trader-server support two seperate API to place now buy orders, that is market_buy and buy. However, we could be able to merge them into one API, say, keep buy only. and the signature of buy would be:

def buy(security: str, shares: int, price: Optional[float]=None, order_time: Optional[datetime.date]=None, **kwargs)->Dict:
    """Place a buy order.

    The order could be either a market buy entrust or a limit price buy entrust
    Args:
        security (str): 证券代码
        shares: (int): 购买数量
        price (float): 买入价格(限价), 如果price指定为None,将转换为市价买入。
        volume (int): 买入股票数

    Keyword Args:
        limit_price (float): 市价买入时的最高限价

    """

分红股票份额小数点两位后异常

分红股票份额正常卖出后,查询仓位信息仍然会有两位小数点之后的份额存在(如0.004314),但是卖出这些份额显示期间没有持仓无法卖出(不影响正常回测),反馈信息为:
市价卖出 failed: 499, -5 601985.XSHG在2022-01-21 09:31:00期间没有持仓

使用 client.sell() 报错,

  • zillionare-trader-client version: zillionare-trader-client 0.3.9
  • Python version: Python 3.8
  • Operating System: Win 10

Description

卖出{'security': '600273.XSHG', 'price': 10.15, 'volume': 4400}时,报错。

Traceback (most recent call last):
File "C:/Users/wx/PycharmProjects/stock_program/zillionare/交易/一键下单.py", line 41, in
sell_info = client.sell(**sell_dict)
File "C:\Users\wx\anaconda3\envs\stock_quant\lib\site-packages\traderclient\client.py", line 442, in sell
rec["time"] = arrow.get(rec["time"]).naive
TypeError: string indices must be integers

分红送的股票份额无法卖出

分红送的股票份额无法卖出,跟送股的日期也没有关系,过了一段时间还是无法卖出。如下:

我在2020年6月10日账户中有15600股:
图片

当日下单买入补仓500股到16100股,并且下单成功:
图片

在6月17日查询账户中该股分红154股,总股数为16254股:
图片

然后在6月17日清仓该股票的时候,下单卖出全部16254股,返回的成交信息中,只卖出非分红送股的16100股:
图片

在成交完之后查询该股票仓位,账户中显示该股票仓位为(分红送股的股票份额无法卖出):
图片

available_shares返回值为0

回测中,在交易日‘2019-01-14’中查询当前仓位信息,返回:
图片

当随后添加查询仓位信息的代码a = client.available_shares([‘300682.XSHE’,‘000567.XSHE’,‘600184.XSHG’,‘300034.XSHE’,‘002534.XSHE’])时,打印返回值a得到None, 并红框提示:
图片

随机更改代码为a = client.available_shares('300682.XSHE'),返回值a为0.0,并且在随后的调仓日中使用该API查询当前可用数量始终为0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.