LoadData From MT5 to MySQL(2)

今天基本上初步完成了。不过,还是有些问题。因为自己用的话,暂时不打算修改了。

稍微有几个通用的注意点:

1、MT5中按range取数据,是包括这个时间的。那么,我就增加1秒。我暂时不考虑取tick的数据,所以,这个可以操作。增加的方法用dt+timedelta处理。

last_date = (GetLastDate('XAUUSD','Day')+dt.timedelta(seconds=1)).strftime('%Y/%m/%d %H:%M:%S')
print(last_date)
to_date=datetime.now().strftime('%Y/%m/%d %H:%M:%S')
print(to_date)



data = Get_RangeFXData('XAUUSD','Day',last_date,to_date)

这个主要是用来做增量。否则,每次操作一下很麻烦。

2、我用大圣老师的mysql包做的。发现有个问题,就是插入好像批量插入写法有问题。最后改成单行插入。单行插入有一个地方就是做一下500条一次的commit。否则容易出错。

from mysql import connector
import numpy as np

Dura_dict={'Day':'1440','1H':'60'}

# fx_name:外汇类型比如XAUUSD
# fx_type: Day, 1H
def LoadFullData(fx_name,fx_type,fx_data):
    # 1. 创建链接
    params = dict(host='xxxxxxxxxxxx', port=xxxxx, user='xxxxx', password='xxxxx', database='xxxxxx',
                  auth_plugin='mysql_native_password')
    conn = connector.connect(**params)

    # 2. 创建游标cursor
    cursor = conn.cursor()

    TableName = fx_name+Dura_dict[fx_type]

    sqltemplate = 'insert into '+TableName+"""
     (date, open, low, high, close, tick_volume, spread, real_volume)
    values(%s,%s,%s,%s,%s,%s,%s,%s)
    """
    data=fx_data.copy()
    for i in range(len(data)):
        u1 = [data['time'][i].strftime("%Y-%m-%d %H:%M:%S"), str(data['open'][i]), str(data['low'][i]),
              str(data['high'][i]), str(data['close'][i]), str(data['tick_volume'][i]), str(data['spread'][i]),
              str(data['real_volume'][i])]
        cursor.execute(sqltemplate, u1)
        if np.mod(i, 500) == 0 or i == len(data) - 1:
            conn.commit()
            print(i)

    conn.commit()

    # 4. 关闭连接
    conn.close()

本来计划做小时级别的数据。后来因为本来用的一个策略是日线级别,就暂时没有打算用小时数据。所以,就先这样了。

 

有几个bug,暂时没有解决。

1、如果在初始化数据的时候,好像有个限制。不能输入一个极大值,把数据都取出。会提示IPC错误。这个我就缩小数据。因为从分析来看,太早的历史数据意义不大。从2011年左右取数据就足够了。早期样本不能反映当前的情况。

2、我对于sql取出null数据没有处理好。比如,一开始数据为空的情况下,怎么处理。应该是设置一个默认值。比如2010.1.1,后来就没弄。这个取空值,我对于MYSQL+python的模式用的不好,所以没打算用。因为数据都是自己用么。所以,就没做那么复杂。

我现在打算用数据做策略了。先出策略,看看效果先。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值