回测是一个股票接口的最基础功能了,一般只要不是做的很差,基本上都靠谱,只不过有的比较难以理解罢了,但有的有一定的技术优势。比如第一报错:可能行情没有这么久,返回了None,直接引用就会出错。这些编程语言往往需要自己考虑好各种错误,而麦语言这种,语法简单,但可定制化的程度不强,有时候会编程的用着感觉会更麻烦。

当然,再好的工具也不及自己写,我们拿到数据接口以后,完全可以自己写回测函数,,定的策略是如果买入,则会购买半成仓位,如果卖出,同样是卖出半成仓位。对应的回测代码如下:

import datetimefrom quantitative.data_process import get_day_name_data
from quantitative.rsrs import sell_or_buyclass BackTrader:def __init__(self,cash: float = 50000,stock: str = "000001",reverso: float = 0):"""构造回测对象。根据输入的股票代码,然后给定资金池,模拟买入卖出。:param cash: 初始资金数量  float:param stock:  股票代码    str:param reverso: 每次交易手续费率 float"""# 利用数据,初始化交易所对象和策略对象。self.stock = stock  # 股票代码self.init_cash = cash  # 初始投入资金self.cash = cash  # 当前现金持有量self.lst = []  # 股票池self.buy_num = 0  # 总计买入的股票数量self.sell_num = 0  # 总计卖出的股票数量def sell(self, close, closeout=False):price = close * 100  # 一手的价格sell_num = len(self.lst) // 2if closeout:  # 强制平仓,self.cash += len(self.lst) * priceself.lst = []  # 股票池没有股票了self.sell_num += len(self.lst)elif len(self.lst) == 0:  # 这个表示没有持仓print(f'没有持仓哦,无法卖出股票')passelif len(self.lst) == 1:  # 只有一手股票self.cash += priceself.lst.pop()self.sell_num += 1else:  # 多于两手股票#for i in range(sell_num):self.cash += priceself.lst.pop()self.sell_num += 1print(f'卖出了{sell_num}手股票,当前持有股票量{len(self.lst)},当前现金持有量{self.cash}')def buy(self, close):price = close * 100  # 一手的价格try:num = int(self.cash // price)if num == 0:print("Oh,sorry,没有现金了")passif num == 1:self.buy_num += 1self.lst.append(price)print(f'现金不多了,仅可以买入1手哦')else:buy_num = num // 2print(f'金主,你可以买入{num}手,买入了{buy_num}手')for i in range(buy_num):self.lst.append(price)self.cash -= priceself.buy_num += buy_numprint(f'当前现金持有量{self.cash},股票持有量{len(self.lst)}')except:print(f'{price} 是不可以运算的')def run(self, begin, end):"""运行回测,迭代历史数据,执行模拟交易并返回回测结果。"""begin_date = datetime.datetime.strptime(begin, "%Y-%m-%d")end_date = datetime.datetime.strptime(end, "%Y-%m-%d")days = (end_date - begin_date).daysclose = 0for i in range(days):date_str = (begin_date + datetime.timedelta(days=i)).strftime("%Y-%m-%d")flag = sell_or_buy(self.stock, date_str)close = get_day_name_data(self.stock, date_str, "收盘价")if isinstance(close, str):continueif flag == "BUY":self.buy(close)elif flag == "SELL":self.sell(close)if i == days - 1: # 最后一天强制平仓self.sell(close)# print(self.cash)self.cash += len(self.lst) * closeprint(self.cash)print("收益率", (self.cash - self.init_cash) / self.init_cash)print(self.lst)print("购买次数", self.sell_num)print("出售次数", self.buy_num)# 每日数据更新,寻找股票数据,需要判断当日的数据是否已经写入到数据库中了
def get_stock_code():from database import MGfrom database import MONGO_STOCKclient = MG(MONGO_STOCK)stock_code = client.db['stock_code']# 查找整个中国所有的股票res = stock_code.find({})for i, item in enumerate(res):yield item['证券简称'], item['code']if __name__ == '__main__':for item in get_stock_code():bt = BackTrader(cash=50000, stock=item[1])begin = "2022-01-10"end = "2022-06-30"bt.run(begin, end)print(item)

好了,所以什么样数据接口适合使用呢?这里有一个大家可以了解一下的:获取比较简单,https://gitee.com/l2gogogo就可以找到,也支持Python语言,拿到账号就可以订阅,然后我们自己再做二次开发就可以对接写策略了,

有什么好用的股票回测接口?相关推荐

  1. 导致股票回测接口回测效果差的原因有哪些?

    股票回测接口实盘回测效果就很差,这算是量化界当中比较常见的现象,可能的原因咱来从头到尾捋一下. 一.回测是否正确 首先,回测效果非常好,实盘要复现出八九不离十的收益,那就要首先评估自己的回测是不是正确 ...

  2. 用Python徒手撸一个股票回测框架

    通过纯Python完成股票回测框架的搭建. 什么是回测框架? 无论是传统股票交易还是量化交易,无法避免的一个问题是我们需要检验自己的交易策略是否可行,而最简单的方式就是利用历史数据检验交易策略,而回测 ...

  3. 【聚宽本地数据JQData】一个简单的股票回测策略

    点击查看jqdata sdk 详细内容 打开聚宽,https://www.joinquant.com/ 注册登录 策略 新建股票策略 填入下面代码: 利用凯利公式进行投资测试,基准为沪深300 def ...

  4. 基于MT5的沪深股票回测四--回测

    1.首先在菜单-查看里面找到 策略回测 或者快捷键ctrl+R 打开回测界面 选择指定策略--系统自带Moving average.ex5 选择合约 002594 选择测试周期,起始时间 然后点击开始 ...

  5. python 股票回测书籍推荐_python实现马丁策略回测3000只股票

    python实现马丁策略回测3000只股票 批量爬取股票数据 这里爬取数据继续使用tushare,根据股票代码来遍历,因为爬取数据需要一定时间,不妨使用多线程来爬取,这里要注意tushare规定每分钟 ...

  6. python股票回测_Python量化交易-回测简单的交易策略

    这篇文章主要介绍如何使用Python对一些简单的交易策略进行回测,对这块比较感兴趣的朋友可以看一看. 1.获取证券数据 本文以A股市场为例,先获取A股近10年的数据并保存到数据库. 1.1.安装数据库 ...

  7. 基于MT5的沪深股票回测三 自动化加载历史数据

    历史数据来源大概分为几类: 1. 券商股票API,获取tick数据,数据需要经过清洗,剔除了无效数据,生成不同周期的K线数据,整理后放入数据库或者文件,供导入MT5历史.缺点,需要自己清洗数据,存储, ...

  8. python tushare backtrader股票回测双均线策略

    前言: 在前面学了点机器学习知识后,发现自己还没有一个回测框架,找了短时间学习资料,还是决定使用backtrader,至于聚宽优米那些平台感觉使用起来好像没那么自由,还是先学习下backtrader, ...

  9. python股票回测源码_Python爬虫回测股票的实例讲解

    股票和基金一直是热门的话题,很多周围的人都选择不同种类的理财方式.就股票而言,肯定是短时间内收益最大化,这里我们需要用python爬虫的方法,来帮助我们获取一些股票的数据,这样才能更好的买到相应的股票 ...

最新文章

  1. 思念水饺吃成泡沫水饺(图)思念质量门
  2. jdbc链接oracle报错ORA-12505解决办法
  3. centos7修改密码
  4. JAVA虚拟机运行数据区
  5. 对于 APM 用户的一次真实调查分析(下)
  6. enumerate_Java Thread类的static int enumerate(Thread [] th)方法与示例
  7. Linux学习-RPM 软件管理程序: rpm
  8. Confluence(wiki)配置数据库及修改数据库地址
  9. Fantastic-Matplotlib 第一回
  10. GitHub数据库榜单第一:Redis核心原理实践PDF,点赞已过百万+
  11. 强推Markdown神器,一秒钟拯救微信公众号排版
  12. 点乘/内积/数量积;叉乘/向量积;矩阵乘法;哈达马积;克罗内克积;卷积
  13. DiskGenius 5.4.6.1441 Portable
  14. Chromium for mac(谷歌浏览器)V89.0.4336.0官方最新版
  15. 理想低通滤波器、Butterworth滤波器和高斯滤波器(matlab)
  16. python程序设计丁亚涛版_Scribus(出版设计软件)中文免费版
  17. 计算机制作表格英语怎么说,表格用英语怎么说
  18. Latex中的狄拉克算符
  19. 跳楼梯--递归--动态规划--过渡
  20. IAP_1_几种下载程序的方式

热门文章

  1. 暨南大学计算机专业考研录取目录,21考研必备 暨南大学2020计算机类研究生招生情况汇总...
  2. 小程序创业会有哪些坑
  3. gh-ost封装脚本
  4. 建立基于IP地址访问的网站
  5. QT 怎么获取linux本机的IP地址?
  6. ESD(静电释放)上半部分
  7. 老毛挑U盘系统工具——ghost系统安装教程
  8. cdlinux 0.9.8_Cdlinux的GNU / Linux发行版0.9.6.1版
  9. C++/MFC 面试题(一)
  10. 项目配置不当引发了数据泄露,人已裂开!!(建议收藏)