Giter Club home page Giter Club logo

openctp / openctp Goto Github PK

View Code? Open in Web Editor NEW
1.9K 50.0 431.0 461.78 MB

openctp提供中泰证券XTP、华鑫证券奇点TORA、东方证券OST、东方财富证券EMT、盈透证券TWS等各通道的CTPAPI兼容接口,CTP程序可以无缝对接各股票柜台。openctp也提供了一套基于TTS交易系统的模拟环境,同样提供了CTPAPI兼容接口,不仅支持国内期货与期权全品种,也支持A股股票、基金、债券以及股票期权模拟交易,可以替代Simnow,为CTP量化交易开发者提供7x24可用的模拟环境。

Home Page: http://www.openctp.cn

License: BSD 3-Clause "New" or "Revised" License

Batchfile 0.01% CMake 0.18% C++ 12.68% C 86.59% Python 0.41% JavaScript 0.06% HTML 0.01% Vue 0.07%
ctp futures quant simnow trader xtp stock options tts ctpapi

openctp's Introduction

openctp(Powered by TTS - Tick Trading System)

openctp是一个以CTP生态为基础的平台,既提供了华鑫证券奇点、中泰证券XTP、东方财富EMT、东方证券OST等柜台的CTPAPI兼容接口,也提供了一套与上期技术SimNow模拟环境类似的模拟环境,也支持CTPAPI接口,不仅提供国内各期货交易所的期货与期权品种模拟交易,还提供了A股的股票、基金、债券以及股票期权模拟交易,也支持港股、美股等市场模拟交易。

openctp还提供了CTPAPI的Python接口以及CTP股票期权API的Python接口,开源了CTP命令行交易客户端ViTrader,还有图形界面交易客户端TickTrader,以及Mini版的MiniTrader都支持openctp、CTP、CTP股票期权、中泰XTP、华鑫奇点股票与股票期权等柜台,MiniTrader采用openctp的CTPAPI兼容接口技术支持了CTP、TTS、华鑫证券股票与股票期权等柜台,无需自己再替换dll。

openctp还做了一套websocket接口的CTP服务,webctp,将CTP的服务以websocket+json形式对外提供服务,也开放了源码。

openctp还提供了CTP、华鑫奇点、中泰XTP等柜台接口的开发咨询和培训以及柜台系统等的开发培训服务。

ctp开放平台全景图

目录结构:

  • ctp2TTS:openctp模拟环境CTPAPI兼容接口。
  • ctpopt2TTS:openctp模拟环境CTP股票期权兼容接口。
  • ctp2XTP:中泰证券XTP柜台CTPAPI兼容接口(含源码)。
  • ctp2STP:华鑫证券TORA奇点股票柜台CTPAPI兼容接口(含源码)。
  • ctp2EMT:东方财富EMT柜台CTPAPI兼容接口(含源码)。
  • ctp2STPOPT:华鑫证券TORA奇点股票期权柜台CTPAPI兼容接口。
  • ctp2OST:东方证券OST柜台CTPAPI兼容接口。
  • ctp2YD:易达柜台CTPAPI兼容接口。(易达官方提供)
  • ctp2IB:盈透证券TWS平台CTPAPI兼容接口。
  • ctp2QDP:量投QDP柜台CTPAPI兼容接口。
  • ctp2TAP:易盛TAP启明星柜台CTPAPI兼容接口。
  • ctp2QQ:腾讯行情CTPAPI兼容接口(含源码)。
  • ctp2Sina:新浪行情CTPAPI兼容接口(含源码)。
  • demo:CTPAPI开发相关的demo及工具源码。
  • tools:生产力工具。
  • docs:开发文档及行业资料。
  • ctpapi-python:CTPAPI的Python接口(openctp官方开发)。
  • ctpapi-opt-python:CTP股票期权API的Python接口(openctp官方开发)。
  • ctpapi-java:CTPAPI的Java接口。
  • ctpapi-go:CTPAPI的Go接口。
  • ctpapi-c:CTPAPI的C语言接口。
  • ctpapi-rust:CTPAPI的Rust语言接口。
  • ctpapi-C#:CTPAPI的C#语言接口。
  • widgets:图形界面小应用。

openctp模拟环境

openctp模拟环境与上期技术SimNow模拟环境类似,均为CTPAPI接口的测试与仿真平台,CTP是上期开发的,SimNow用的也是CTP柜台,所以SimNow是CTPAPI接口的官方测试平台,openctp是自己开发了兼容CTPAPI接口的柜台系统,由于CTP柜台业务非常多,我们openctp只是从一般投资者角度考虑,只实现了一般交易过程中需要使用的接口,完整版还需要到SimNow测试,其实SimNow也没多完整,毕竟是个模拟环境,很多业务也不支持,所以有些功能还是需要在实盘环境中测试的。

openctp模拟环境有三套,一套7x24环境,不间断循环播放最新交易日的一段行情,一套为仿真环境,交易时段与实盘一致,可以用来长期验证策略的运行效果,除期货外还支持A股的股票交易。第三套也是仿真环境,不过带宽较高,提供的品种也全,除期货、期权外还提供了A股的股票、基金、债券以及股票期权的仿真交易,收费也很便宜,只要300块一年,关注openctp公众号并回复注册vip即可。

支持品种:

  • 沪深交易所股票、债券、基金、股票期权等
  • 上期所、中金所等国内期货交易所全品种期货、期权
  • 港股、美股全部股票合约模拟交易
  • CME等外盘期货品种(即将上线)

相对Simnow优点:

  • 提供5档行情
  • 支持部分成交、部分撤消。
  • 支持负价交易(负价合约的合约号为MINUS,仅在7x24环境提供)。
  • 提供各交易所全商品模拟交易。
  • 关注“openctp”公众号即可自动得到一个7x24测试账号及仿真账号,无需提供手机号等隐私信息,回复“注册仿真”可再注册多个仿真账号,回复“注册24”可再注册多个7x24测试账号,且立即生效。
  • QQ群127235179有问必答,解答CTP及各交易相关问题。
  • openctp的7x24环境是真正的7x24,1秒钟都不停,完全独立的环境,与仿真环境没有任何关系,持仓、资金等交易数据不会被重置。
  • 除国内期货及期权外,还提供A股股票、债券、基金、股票期权、港美股以及外盘期货等全球市场模拟交易。
  • 支持市价单、FAK/FOK单。
  • 支持CTP股票期权接口。

撮合方式(同时支持做市与撮合):

  • 撮合:完全由用户之间撮合,按价格优先、时间优先撮合成交。撮合模式的合约只有三个,合约代码分别为TEST、BTC、MINUS,其它合约均为做市模式。
  • 做市:Simnow用的就是做市模式,以实盘行情盘口做市成交,即高于叫卖价的多单立即成交,低于叫买价的空单立即成交,否则挂在队列中等行情符合条件的时候成交。

部分成交、部分撤消:

  • 仿真环境的做市模式不会部分成交,要测试部分成交可在7x24环境交易TEST、BTC、MINUS这三个合约。

openctp模拟环境账号注册

关注openctp公众号,回复相应信息即可注册模拟账号,即时生效,初始资金1000万。

  • 7x24环境账号注册,回复注册24,每回复一次就多注册一个7x24账号,一个微信最多注册3个号。
  • 仿真环境账号注册,回复注册仿真,每回复一次就多注册一个仿真账号,一个微信最多注册3个号。
  • vip环境账号注册,回复注册vip,每回复一次就多注册一个vip账号,一个微信最多注册10个号。

BrokerID、AppID、AuthCode

openctp模拟环境不检查这几个字段,3项均可不填。

7x24模拟环境

  • 交易前置 - tcp://121.37.80.177:20002,或者使用域名tcp://openctp.cn:20002
  • 行情前置 - tcp://121.37.80.177:20004,或者使用域名tcp://openctp.cn:20004

仿真环境

仿真环境

openctp监控平台

openctp提供了一个集中监控SimNow、华鑫N视界、中泰XTP、东财EMT等模拟环境的监控平台,当然也包括openctp自己的模拟环境,有几个环境,有没开着,一眼就知道了,点这里看看:CTP接口模拟环境监控

openctp还提供了对几十家主流期货公司CTP柜台实盘环境的监控,并且标出了提供上期所免费5档行情支持的期货公司,点这里一看就知道了:CTP柜台实盘环境监控

monitor

CTPAPI及各柜台CTPAPI兼容接口下载:

CTP、TTS、XTP、TORA等柜台接口下载

已官方支持TTS通道(CTP开放平台)的产品:

MiniTrader

vnpy

mt5ctp

texttrader

WonderTrader

WonderTrader

通过自己替换dll可接入TTS通道(CTP开放平台)的产品:

快期V3

- [快期V2(CTP期货交易客户端)](https://zhuanlan.zhihu.com/p/432252376)

快期V2

- [TBTerminalCTP(交易开拓者)](https://zhuanlan.zhihu.com/p/437818698)

TBTerminal

粉丝交流QQ群:127235179

QQ群二维码

openctp培训服务

openctp提供证券期货交易开发方面的技术培训,也提供行业无关的基础技术培训,openctp的培训偏向于就业方向,比如想去私募或者科技公司从事量化或者柜台系统开发的比较适合,当然如果想自己学习一些技术帮助自己更好地做交易也是可以的。openctp的培训是迭代式的,会不断更新,补充更多的内容,同学可在相应课程的群内永久交流。所有课程的每节课在B站上都有试看视频,报培训只需要在openctp的公众号回复培训两个字即可获取联系方式。

openctp不定期组织同学进行技术交流,为大家创造一个好的学习氛围。

课程介绍

  • 第一期:C/C++高级编程,3000元,以krenx开发的C语言跨平台开发框架Think库为基准进行讲解,含socket网络编程、IPC进程通讯等,有众多实用的工具,可立即应用到工作中。另外还有boost.asio异步网络通讯框架等开发技术的讲解,也提供相应的实例源码。
  • 第二期:CTP、XTP等柜台接口开发技术,5000元,以openctp相关技术为基准进行讲解,含CTPAPI底层逻辑、CTPAPI各种注意事项、开源CTP客户端TextTrader源码讲解等。送高质量轻量级Tick级多策略交易框架源码(约三五千行),保持原汁原味的CTP数据结构,实时计算持仓、资金。
  • 第三期:交易系统开发,5000元,以TTS交易系统为基准进行讲解,含交易系统结构、架构技术、业务表结构设计、关键业务处理等。送一套完整的交易撮合系统源码,含下单、仓位与资金计算、委托回报、成交回报、撮合成交、行情推送等完整功能,正在开发中,开发完成后也将免费发给前面已报名的同学。
  • 第四期:金融交易业务与产品设计,3000元,通讲全球股票、期货、期权交易发展历程、交易规则、计算公式、风险控制及产品设计,提供一份CTP全部常用字段的详细说明。
  • 第五期:内存数据库架构交易系统总线开发技术,8000元,通过TTS的总线架构技术讲解CTP那样的总线开发技术,包括重演、热备、负载均衡、最短路由、分布式计算等技术,内存计算架构在各行业的高性能通讯方面都可以应用,远不止金融交易领域。

openctp公开课

openctp做了一些免费的0基础学习课程,帮助更多朋友进入到软件编程与证券期货交易行业。

  • C语言公开课:以生动有趣的方式讲C语言基础性编程技术,重在兴趣培养和信心建立。
  • C++语言公开课:以生动有趣的方式讲C++语言基础性编程技术,课程在准备中。
  • Linux环境编程公开课:介绍Unix&Linux的前世今世,讲Shell、VI编辑器等使用,讲netstat、traceroute、ifconfig、lsof等网络工具的使用,讲正则表达式等等,0基础,谁都能听得懂。

openctp公众号

微信公众号

精品文章:

注:openctp不对模拟交易及相关服务作任何保证,使用openctp产品进行实盘交易的后果完全由使用者自己承担。

openctp's People

Contributors

anyex-net avatar cherichy avatar dennisxie avatar gzj avatar jedore avatar krenx1983 avatar ytchhh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

openctp's Issues

centos登录成功后隔5秒左右报错KeyError: ('TTS',)

env: centos 8, vnpy_ctp==6.6.7, vnpy==3.3.0, openctp 7x24 env&account
报错信息:
···
/vnpy_ctp/gateway/ctp_gateway.py(602): onRspQryInstrument
KeyError: ('TTS',)
···
将vnpy_ctp中的两个lib*.so分别替换为openctp中lin64下的两个文件,vnpy显示结算信息查询成功,然后等待5秒左右出现报错内容,正常应该输出合约信息查询成功。
经过测试,simnow仿真和24小时都正常,openctp仿真也正常,就是7x24无论交易日的交易时段或非交易时段都报该错误。
感谢解答!

兼容性还是有问题啊,测试了6.3.19崩溃

我用官方的6.3.19编译以后,使用官方的6.3.19的动态链接库就不崩溃,用openctp的6.3.19的动态链接库,在调用Trader的Init函数就崩了。尴尬
难道是我使用方式不对?
根据openctp的原理说明,本质上是写了一个和官方一模一样接口的DLL,理论上应该是无缝替换,但是我这替换以后确实不行。

[bug]CMake无法编译.虚类不能实体化

您好,
我克隆了openctp sina 和openctp华鑫sfp目录。系统为linux64
对于每个目录,我操作如下:

  1. mkdir build && cd build
  2. cmake .. && cmake --build .

编译会出现如下错误:
/cpp-subscriber/ctp2huaxinSTP/FtdcMdApiImpl.cpp: In static member function ‘static CThostFtdcMdApi* CThostFtdcMdApi::CreateFtdcMdApi(const char*, bool, bool)’:
/cpp-subscriber/ctp2huaxinSTP/FtdcMdApiImpl.cpp:14:35: error: invalid new-expression of abstract class type ‘CFtdcMdApiImpl’
14 | return new CFtdcMdApiImpl();
| ^
In file included from /cpp-subscriber/ctp2huaxinSTP/FtdcMdApiImpl.cpp:1:
/cpp-subscriber/ctp2huaxinSTP/FtdcMdApiImpl.h:14:7: note: because the following virtual functions are pure within ‘CFtdcMdApiImpl’:
14 | class CFtdcMdApiImpl : public CThostFtdcMdApi, public CTORATstpXMdSpi
| ^~~~~~~~~~~~~~
In file included from /cpp-subscriber/ctp2huaxinSTP/FtdcMdApiImpl.h:9:
/cpp-subscriber/ctp2huaxinSTP/6.5.1_20200908/ThostFtdcMdApi.h:163:21: note: ‘virtual int CThostFtdcMdApi::ReqQryMulticastInstrument(CThostFtdcQryMulticastInstrumentField*, int)’
163 | *virtual int ReqQryMulticastInstrument(CThostFtdcQryMulticastInstrumentField pQryMulticastInstrument, int nRequestID) = 0;
| ^~~~~~~~~~~~~~~~~~~~~~~~~

这个编译错误貌似是合理的。不知道项目组有没有计划修复。
另外,如果我把上述return new CFtdcMdApiImpl(); 改为 return NULL; 则编译通过,但链接不通过,错误如下:
[root@7687c3c3c16c build]# cmake --build .
[ 8%] Building CXX object 6.3.15_20190220/CMakeFiles/thostmduserapi_se_6.3.15_20190220.dir//FtdcMdApiImpl.cpp.o
[ 16%] Linking CXX shared library /cpp-subscriber/ctp2huaxinSTP/6.3.15_20190220/libthostmduserapi_se.so
[ 16%] Built target thostmduserapi_se_6.3.15_20190220
[ 25%] Building CXX object 6.5.1_20200908/CMakeFiles/thostmduserapi_se_6.5.1_20200908.dir/
/FtdcMdApiImpl.cpp.o
[ 33%] Linking CXX shared library /cpp-subscriber/ctp2huaxinSTP/6.5.1_20200908/libthostmduserapi_se.so
[ 33%] Built target thostmduserapi_se_6.5.1_20200908
[ 41%] Building CXX object 6.3.19_P1_20200106/CMakeFiles/thostmduserapi_se_6.3.19_P1_20200106.dir/__/FtdcMdApiImpl.cpp.o
[ 50%] Linking CXX shared library /cpp-subscriber/ctp2huaxinSTP/6.3.19_P1_20200106/libthostmduserapi_se.so
/usr/bin/ld: cannot find -lxfastmdapi: No such file or directory
collect2: error: ld returned 1 exit status
gmake[2]: *** [6.3.19_P1_20200106/CMakeFiles/thostmduserapi_se_6.3.19_P1_20200106.dir/build.make:97: /cpp-subscriber/ctp2huaxinSTP/6.3.19_P1_20200106/libthostmduserapi_se.so] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:240: 6.3.19_P1_20200106/CMakeFiles/thostmduserapi_se_6.3.19_P1_20200106.dir/all] Error 2
gmake: *** [Makefile:91: all] Error 2

我看到动态库在那里,但cmake没看到。不知道能否改进一下?
谢谢

C#转编的无法兼容呀

自己用官方给的lib文件转成了C#用的动态链接库,用贵平台的覆盖出错。如图,麻烦提供一个lib文件或其他方式。
image

QQ行情UB

void
		query(char const* target)
	{
		// Set up an HTTP GET request message
		req_.version(11);
		req_.method(http::verb::get);
		req_.target(target); <---------------------------- 这里target在使用req_的cb里已经被销毁了吧
		req_.set(http::field::host, url_);
		req_.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);

		// Look up the domain name
		resolver_.async_resolve(
			url_,
			port_,
			beast::bind_front_handler(
				&CFtdcMdApiImpl::on_resolve,
				this));
	}

我看了下beast::http::request用的是stringview,async的回调里引用的std::string和内存可能已经释放了。

腾讯云ubuntu系统安装openctp失败?

ubuntu@VM-8-2-ubuntu:~/work$ pip install openctp-ctp

Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: http://mirrors.tencentyun.com/pypi/simple
Collecting openctp-ctp
Downloading http://mirrors.tencentyun.com/pypi/packages/4e/5b/64e21da08e3c8930cde90e2b407cde65cf8a449fa9143db088e500f1f961/openctp_ctp-6.6.9-cp310-cp310-manylinux_2_35_x86_64.whl (7.9 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.9/7.9 MB 4.6 MB/s eta 0:00:00
Installing collected packages: openctp-ctp
Successfully installed openctp-ctp-6.6.9

ubuntu@VM-8-2-ubuntu:~/work$ python3

Python 3.10.6 (main, Nov 2 2022, 18:53:38) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

>>> from openctp_ctp import mdapi, tdapi

terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
Aborted (core dumped)

ubuntu@VM-8-2-ubuntu:~/work$

感谢openctp无私提供的一个很好的开发测试平台, 反馈一个问题,希望能改进

感谢openctp无私提供的一个很好的开发测试平台,
反馈一个问题,希望能改进,
以rb2305合约为例,
行情大概一直在价格3500-4100之间循环,
可是 行情会突然从3500多 直接跳空到 4000,
形成爆盈 或 爆亏,不太利于验证策略在真实行情下的效果,
希望能将行情循环周期加大,变为实际的1月或1年的行情,越长当然越好,
谢谢🙏

为何一秒内两个tick的时间一样?缺毫秒部分。有时两个tick成交量一样

您好,我使用openctp api,打印了tick时间,价格,成交量信息,如下
bee tick time ag2206.SHFE 2022-04-29 10:54:24 4944.0 322397
bee tick time ag2206.SHFE 2022-04-29 10:54:25 4943.0 322400
bee tick time ag2206.SHFE 2022-04-29 10:54:25 4943.0 322400
bee tick time ag2206.SHFE 2022-04-29 10:54:26 4943.0 322468
bee tick time ag2206.SHFE 2022-04-29 10:54:26 4943.0 322471
发现两个问题;
1 一秒内两个tick的时间一样,缺毫秒部分。比如2022-04-29 10:54:25的两个tick。好像simnow里的tick不会出现这种现象。
2 有时1秒内的两个tick累积成交量一样,比如2022-04-29 10:54:25的两个tick,我理解其中第二个tick是0.5秒处的tick,其累积成交量应该变大。
any idea?

tts支持合约的状态信息推送接口onRtnInstrumentStatus()吗?

我是vnpy会员,从TtsTdApi的C++源代码可以找到onRtnInstrumentStatus这个库函数接口的,于是我在tts网关的TtsTdApi增加onRtnInstrumentStatus来输出合约的状态信息,可是我发现连接tts网关成功后并没有收到任何一个合约的状态信息。
难道tts不支持这个接口吗?

C#尝试读取或写入受保护的内存,这通常指示其他内存已损坏

1、下载代码后,运行\openctp-master\ctpapi-csharp\Example\CTP6_5_1ReleaseDemo下的解决方案
2、成功启动应用程序后,点击连接行情
111
3、在调用CTPMD.CreateMDApi();时,报异常“尝试读取或写入受保护的内存,这通常指示其他内存已损坏”
XZIT3P7Q8JX)D($B UN~WGK
O_LW%@6P~HOGXTDNP@NIRJ
4、调试后发现应该是CTPWrapper.dll报错
)_@ M5B`E4XVUX 20~ _VNT
请问,我的问题是出在哪里了呢?

mac M1下编译失败

Undefined symbols for architecture arm64:
  "CThostFtdcMdApi::GetApiVersion()", referenced from:
      _main in ctpping-f31e69.o
  "CThostFtdcMdApi::CreateFtdcMdApi(char const*, bool, bool)", referenced from:
      _main in ctpping-f31e69.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Makefile:

all: ctpping
ctpping:
	g++ -v -std=c++11 -I. -o ctpping ctpping.cpp -L../../shared/macos.arm64/

进程退出

编译了mac版的vnpy_tts,启动vnpy一段时间后,软件崩溃退出

libc++abi: terminating with uncaught exception of type std::range_error: wstring_convert: to_bytes error

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.