Ptrade连接mysql数据库【福利】有免费mysql服务器哦

Ptrade连接mysql数据库【福利】有免费mysql服务器哦

虽然ptrade不能安装第三方库,意味着你无法使用pip install 随意安装想要的库。但是ptrade内置了很多第三方库。

API文档:

https://ptradeapi.com/#第三方库

随便截取部分图

ptrade内置第三方库

其实内置的很多库足以应付大部分量化场景的了。 本身就支持pandas,numpy数据分析库,股票指标计算库TA-Lib,机器学习必备库sklearn,神经网络的TensorFlow,第三方股票数据获库tushare等等。

如果内置的数据不满足,还可以接入自己的数据。比如mysql,excel等等。

内置第三方库

Excel数据需要自己上传,或者有开发能力的,自己写一个API接口给ptrade访问也行。不过最方便的还是使用SQL数据库。

注意,这里有一个前提,需要你的券商解除Ptrade访问外网限制功能。(这里的外网是指在ptrade里面可以连接外部数据,比如可以访问百度,腾讯官网),这样你的Ptrade就可以直接联通你的MySQL数据库了。经过笔者对市面上的大部分券商的Ptrade测试,目前只有国盛的Ptrade可以访问外部网络。如果使用的是其他券商的Ptrade,那么本文就不适用了哦。(广告:需要开通的读者,可以在公众号菜单找到开通联系人,费率万0.85,免五)

白嫖mysql数据库

首先你需要有一台Mysql的服务器。如果你有云服务器的话,可以docker pull快速部署一台。

如果没有云服务器也没关系,笔者提供一个白嫖渠道。

https://sqlpub.com/

免费的,填个邮箱就可以申请的了。默认有500MB的空间。

申请免费mysql

注册完成后会给你一个mysql的登录账号

数据库名称	db_name
数据库用户	your_username
数据库密码	your_password
数据库地址	mysql.sqlpub.com:3306
注册邮箱	your_email@xx.com

有了数据库就可以把数据库作为中间存储设备,让ptrade读取里面的数据,也可以把ptrade里面的数据写入到mysql。

比如ptrade缺少可转债的基础数据,那么就可以做一张可转债的表,让ptrade开盘前读取,然后根据此表的数据选股选债。

可转债mysql基础数据

字段要啥有啥,取决于你入库的时候写入的数据。

可转债数据表

比如Ptrade写入数据到mysql,可以把当天的tick数据,分笔数据保存到mysql,这样以后回测的时候就不需要到处找tick数据了。

可转债tick数据

编写程序代码

先创建一个新的策略

ptrade创建策略

命名随意。

整体框架是这样子的:其他没用的暂时不加入。

# 写入mysql数据的函数
def data_sync_up(context):
    pass

def initialize(context):
    # 初始化策略
    run_daily(context, data_sync_up, '09:55')  # 扫描

# 内置函数,一定要有,里面没有操作,放一个pass
def handle_data(context, data):
    pass

然后就往里面添加东西。主要就是data_sync_up这个函数里。记得要一个context形参,不用也要加。

先写一个mysql的连接函数,获取mysql的connection。 用户名密码就是上面你注册后拿到的账号和密码。

USER = '可转债量化分析'
PASSWORD = '123456'
MYSQL_HOST = 'mysql.sqlpub.com'
MYSQL_PORT = 3306
MYSQL_DB = 'ptrade'


def get_mysql_conn():
    import pymysql
    try:
        conn = pymysql.connect(host=MYSQL_HOST,
                               port=MYSQL_PORT,
                               user=USER,
                               password=PASSWORD,
                               db=MYSQL_DB,
                               charset='utf8')
    except Exception as e:
        log.error(e)
        raise ValueError('连接mysql失败')
    else:
        return conn

然后就可以建表,表名随意,这里我用的 ptrade_Tick_{当前日期} 的格式

def data_sync_up(context):
        # 同步到mysql

        conn = get_mysql_conn()
        mysql_cursor = conn.cursor()
        
        import datetime
        today_str = datetime.datetime.now().strftime("%Y%m%d")
        create_tb = 'create table ptrade_Tick_{} (id int auto_increment,code varchar(9),open float,current varchar(16), primary key(id)) engine=innoDB default charset=utf8mb4'.format(today_str)
        try:
            mysql_cursor.execute(create_tb)
        except Exception as e:
            log.info(e)
            conn.rollback()
        else:
            conn.commit()

接着就可以从ptrade的get_snapshot,get_gear_price 获取行情数据。这里我就用模拟数据替代。比如拿到14:23:01到14:23:05的tick数据。

my_data = [
('123164.SZ',125.174,'14:23:01'),
('123164.SZ',125.14,'14:23:02'),
('123164.SZ',126.14,'14:23:03'),
('123164.SZ',127.4,'14:23:04'),
('123164.SZ',127.0,'14:23:05'),
]
mysql_insert_cmd = 'insert into ptrade_Tick_{} (code,open,current) values(%s,%s,%s)'.format(today_str)

try:
    mysql_cursor.executemany(mysql_insert_cmd, my_data)
except Exception as e:
    log.info(e)
else:
    conn.commit()

然后用navicat或者mysql workbench这些工具链接上数据库,就可以看到数据就在里面啦。

navicat显示数据

上面的就是完整代码了。当然用dataframe的to_sql 也可以,更方便,条条大道通罗马。

欢迎关注!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值