帮助自己的唯一办法就是帮助别人
The only way to help yourself is to help others
Hi,请  登录  或  注册

文章合集 第17页

[打卡“一天一文” 001]从流浪儿到茶饮巨头:张俊杰的创业奇迹

今天上了周静老师的“创业创新管理”课,收获颇多,先说说一些大概内容内容吧。

一是小组作业,就是在课程上完之前,小组成员筛选出来日常生活中具有商业价值的20个痛点例子并说明为什么是痛点,这个希望在后面的一天一文中发表。

二是当别人,你的领导、同事、朋友、家人问你是否问题,你应该做出回应,就是要表达、发声,比较标准的回答是:暂时没有。这是一个相当精妙的回答,给自己留了一个再次提问的机会。

三是我们应该要有AI思维,现在是AI时代,周老师举了猎豹公司傅盛,要求员工每天要跟AI至少对话100条,我听到这个例子的时候实属比较触动,心里想了一下自己的工作,暗暗有了一个想法,就是至少要让自己的部门同事从下周一开始就要每天跟AI对话至少10次,在这之前已经让部门同事在使用AI工具了,当时也告诉他们,以后淘汰我们的不是公司,而是你身边会使用AI的同事!今天周老师的这个案例,让我更加确信了一定要积极拥抱AI!目前我自己用的是ChatAi(大家可以点击这个链接去查看https://www.chatgptok.com/?extendCode=kmfsKuOdcTY),可能你看到这篇文章的时候它已经不存在了,这个就是商业发展,不可能一直存在,今天周老师也讲了,最终这一切终将归零,你我应该怎么去度过,怎么去面对。

四是关于做决策,当这件事跟你没有关系的时候决策才能更加正确,听到反对的意见的时候才开始决策,这里周老师举了一个她原来的女学生计划考博,这个女学生的父母、亲戚朋友都支持,但是周老师这里就提出了反对意见,当时这个女学生就说不考了,但是今年又跑到学校里面来说又想继续考,又被周老师暂时说服了,至少目前这个位同学要去考博的计划,她自己会再三思考,不会做出冲动的决定。

五是关于抱怨社会、抱怨同事,不应该出现这种情况,而是应该自我反思,就是技不如人!

还有一些其他知识点,就暂时不给大家说了,总之收获满满!

接下来说说关于这个系列的文章,也是周老师发起的,她从今天开始在群里面陪伴我们1000天,每天会发一篇她认为比较好的文章,我们来读并打卡,自己这么多年能够坚持1000天的可能就是读书、睡觉和活到现在,自己也想通过这个项目来检测一下自己的毅力,以写文章的形式来打卡吧,如果真的能坚持下来,我相信这个收获应该是非常大的,也提前感谢周老师!

今天这篇文章写的霸王茶姬创始人张俊杰的情况,他非常坦然地说“我抄全世界。但我抄出了逻辑,抄出了方法论,我能抄出我自己的东西。”,我觉得是非常自信的表达,我能够在这么卷的赛道做出我的特色,这也是告诉我们有很多事情看似不可能,其实是可以的。这里面我还看到了,在一个行业的长期深耕还是非常重要的,张俊杰17岁的时候进入一家台湾茶饮公司谋生,不断往上发展,后来又在上海的一家智能硬件公司担任要职,拥有产品和技术的双重经验,这个换行为后来的创业也是积累了不可磨灭的功劳!

今天老师讲的霸王茶姬我只喝过一次,还不是自己去买的,是被人送的,那个口味已经不怎么记得了,只是感觉还好喝,不过今天听了这个案例,计划明天就去买一杯试试!

好了,今天洋洋洒洒就写这么多吧!

AI图片:

工具:midjourney

指令:打卡“一天一文” 001,不包含英文。

打卡“一天一文” 001
赞(0)xiaowanxiaowan阅读(253)

QMT自带策略解析系列之网格交易(期货)回测示例

本期为本系列第1篇,网格交易(期货)回测示例,我们首先来看看示例策略的说明。

#在期货的1min线下运行'''回测模型示例(非实盘交易策略)​本策略首先计算了过去300个价格数据的均值和标准差并根据均值加减标准差得到网格的区间分界线,并分别配以0.3和0.5的仓位权重然后根据价格所在的区间来配置仓位(+/-40为上下界,无实际意义):(-40,-3],(-3,-2],(-2,2],(2,3],(3,40](具体价格等于均值+数字倍标准差)[0.25, 0.15, 0.0, 0.15, 0.25](资金比例)''' 

注意这里是回测模型示例,非实盘交易策略。

import numpy as np
import pandas as pd
import time
import datetime
# 上面是导入相关库,如果这里还有不清楚的可以学习下基础知识

def init(ContextInfo):
#设置图为标的
ContextInfo.tradefuture = ContextInfo.stockcode+"."+ContextInfo.market
# 将 ContextInfo 中的 stockcode 和 market 属性拼接在一起,
# 中间用一个点号 . 分隔,结果赋值给 ContextInfo.tradefuture。
ContextInfo.set_universe([ContextInfo.tradefuture])
# 这里首先说下set_universe这个函数
# 释义:设定股票池
# 用法:
# ContextInfo.set_universe(stocklist)
# 参数:
# list
# 返回:
# 无
# 示例:
# def init(ContextInfo):
# stocklist = ['000300.SH','000004.SZ']
# ContextInfo.set_universe(stocklist)
# 上面函数是在qmt界面函数库查询出来,大家可以按照此方法去研究
# 调用 ContextInfo 的 set_universe 方法,
# 并将包含 ContextInfo.tradefuture 的列表作为参数传递给该方法。
# 这通常用于设置交易环境中的目标标的。
print(ContextInfo.get_universe())
# 调用 ContextInfo 的 get_universe 方法,并打印返回的结果。
# 这里用于验证当前的目标标的设置是否正确。
ContextInfo.timeseries = pd.DataFrame()
# 创建一个空的 Pandas 数据框,并将其赋值给
# ContextInfo.timeseries。用于存储时间序列数据。
ContextInfo.band = np.zeros(5)
# 创建一个包含 5 个元素的 NumPy 零数组,并将其赋值给 ContextInfo.band。

# 设置网格的仓位
ContextInfo.weight = [0.25, 0.15, 0.0, 0.15, 0.25]
# 这行代码为网格交易策略设置了仓位权重。ContextInfo.weight 是一个列表,
# 包含五个浮点数,分别为 0.25, 0.15, 0.0, 0.15, 0.25,
# 表示每个网格区间的仓位比例。
# 这些比例通常用于确定每个区间在交易策略中的资金分配。

# 获取多仓仓位
ContextInfo.position_long = 0
# 这行代码初始化了多头仓位,ContextInfo.position_long
# 被设置为 0,表示初始状态下没有多头仓位。
# 获取空仓仓位
ContextInfo.position_short = 0
# 这行代码初始化了空头仓位,ContextInfo.position_short
# 被设置为 0,表示初始状态下没有空头仓位。

#剩余资金
ContextInfo.surpluscapital = ContextInfo.capital
# 这行代码将 ContextInfo.capital 的值赋给
# ContextInfo.surpluscapital,表示当前剩余的可用资金与初始资金相同。这通常是在交易开始前设置的。
#保证金比率
comdict = ContextInfo.get_commission()
ContextInfo.marginratio = comdict['margin_ratio']
# 这两行代码用于获取保证金比率。
# 首先,调用 ContextInfo.get_commission() 方法,
# 返回一个包含佣金和保证金比率等信息的字典 comdict,
# 然后从字典中提取 margin_ratio 键对应的值,
# 并将其赋值给 ContextInfo.marginratio。
#合约乘数
ContextInfo.multiplier = ContextInfo.get_contract_multiplier(ContextInfo.tradefuture)
# 这行代码获取了合约乘数。
# 调用 ContextInfo.get_contract_multiplier() 方法,
# 并传入 ContextInfo.tradefuture 作为参数,返回该合约的乘数值,
# 并将其赋值给 ContextInfo.multiplier。
# 合约乘数通常用于计算期货合约的实际交易价值。
#账号
ContextInfo.accountid='testF'
# 这行代码为 ContextInfo 设置了一个账户 ID,赋值为 'testF'。
# 按照实际情况是可以修改成自己的。
ContextInfo.now_timestamp = time.time()
# 这行代码获取当前的时间戳,并将其赋值给 ContextInfo.now_timestamp。
# time.time() 返回的是当前时间的秒数,
# 从1970年1月1日 00:00:00 UTC以来的秒数,
# 用于记录操作的时间或用于时间相关的计算。
def handlebar(ContextInfo):
index = ContextInfo.barpos
# 将 ContextInfo.barpos 的值赋给 index。barpos 通常表示当前K线的位置索引。
realtimetag = ContextInfo.get_bar_timetag(index)
# 调用 ContextInfo.get_bar_timetag(index) 获取当前K线的时间戳,并将其赋值给 realtimetag。这个时间戳表示当前K线的时间。
lasttimetag = ContextInfo.get_bar_timetag(index - 1)
# 获取上一根K线的时间戳,并将其赋值给 lasttimetag。通过索引 index - 1 来访问上一根K线。
print(timetag_to_datetime(realtimetag, '%Y-%m-%d %H:%M:%S'))
# 将当前K线的时间戳转换为我们习惯的日期时间格式,并打印出来。timetag_to_datetime 函数将时间戳转换为指定格式的字符串,这里使用了格式 '%Y-%m-%d %H:%M:%S'。
if ContextInfo.period in ['1m','3m','5m','15m','30m'] and not ContextInfo.do_back_test:
# 判断当前的交易周期 ContextInfo.period 是否在给定的列表 ['1m','3m','5m','15m','30m'] 中,并且 ContextInfo.do_back_test 不为真(即不在进行回测)。如果两个条件都满足,则进入下一步的判断。
if (datetime.datetime.fromtimestamp(ContextInfo.now_timestamp) - datetime.datetime.fromtimestamp(realtimetag / 1000)).days > 7:
return
# 进一步检查当前时间与K线时间的差异。如果差异超过7天,则函数返回 None,即不执行后续操作。realtimetag / 1000 是将毫秒级时间戳转换为秒级时间戳,以便与 now_timestamp 进行比较。
starttime = timetag_to_datetime(realtimetag-86400000 * 10, '%Y%m%d%H%M%S')
# 计算开始时间。这里从当前时间戳 realtimetag 减去 86400000 * 10 毫秒(即10天),然后将结果转换为指定格式的日期时间字符串,并赋值给 starttime。
endtime = timetag_to_datetime(realtimetag-86400000, '%Y%m%d%H%M%S')
# 计算结束时间。这里从当前时间戳 realtimetag 减去 86400000 毫秒(即1天),然后将结果转换为指定格式的日期时间字符串,并赋值给 endtime。
Result=ContextInfo.get_market_data(['close'],stock_code=[ContextInfo.tradefuture],start_time=starttime,end_time=endtime,skip_paused=False,period=ContextInfo.period,dividend_type='front')
# 调用 ContextInfo.get_market_data() 获取市场数据。
# 请求的参数包括数据类型(这里是 ['close'] 表示收盘价)、
# 标的代码(ContextInfo.tradefuture)、开始时间 starttime、
# 结束时间 endtime、是否跳过停牌数据(skip_paused=False)、
# 周期 ContextInfo.period 和分红类型(dividend_type='front')。
# 返回的数据保存在 Result 变量中。
close_sort = Result['close'].sort_index(axis = 0,ascending = True)
# 对获取的收盘价数据 Result['close'] 按照索引进行升序排序,
# 并将排序后的结果赋值给 close_sort。sort_index(axis=0, ascending=True)
# 表示按照行(即时间顺序)进行排序,升序排列。
#过去300个价格数据的均值和标准差
Result_mean = close_sort.tail(300).mean()
# 计算 close_sort 中最后300个数据(即最近300个时间点的收盘价数据)的
# 均值,并将其赋值给 Result_mean。tail(300) 方法用于获取最后300个数据点,
# 而 mean() 方法则用于计算这些数据点的平均值。
Result_std = close_sort.tail(300).std()
# 计算 close_sort 中最后300个数据的标准差,
# 并将其赋值给 Result_std。std() 方法用于计算标准差,
# 它表示这些价格数据的波动程度。
ContextInfo.band = Result_mean + np.array([-40, -3, -2, 2, 3, 40]) * Result_std
# 这行代码用于计算并设置交易策略中的价格区间(或称为“网格”)。
# 首先,创建一个包含 [-40, -3, -2, 2, 3, 40] 的数组,
# 然后将这个数组与 Result_std 相乘,得到一个新的数组,
# 其中每个元素都表示一个标准差的倍数。
# 接着,将这些标准差的倍数加到 Result_mean 上,
# 形成一组带有不同偏差的价格带。
# 最终结果赋值给 ContextInfo.band,
# 用于定义不同价格区间的上下限,以便在网格交易策略中使用。
#print 'ContextInfo.band',ContextInfo.band
if np.isnan(ContextInfo.band).any() or Result_std==0:
return
if index > 0:
lasttimetag = ContextInfo.get_bar_timetag(index - 1)
#前一根bar收盘价
close_lastbar = ContextInfo.get_market_data (['close'],stock_code=[ContextInfo.tradefuture],period=ContextInfo.period,dividend_type='front')
#当前开盘价
open_currentbar = ContextInfo.get_market_data (['open'],stock_code=[ContextInfo.tradefuture],period=ContextInfo.period,dividend_type='front')
#划分网格
#print close_lastbar,ContextInfo.band
grid = pd.cut([close_lastbar], ContextInfo.band, labels=[0, 1, 2, 3, 4])[0]
#print 'grid ',grid
if not ContextInfo.do_back_test:
ContextInfo.paint('grid',float(grid),-1,0)
# 若无仓位且价格突破则按照设置好的区间开仓
if ContextInfo.position_long == 0 and ContextInfo.position_short == 0 and grid != 2:
# 大于3为在中间网格的上方,做多
if grid >= 3 and ContextInfo.surpluscapital > 0 :
long_num = int(ContextInfo.weight[grid]*ContextInfo.surpluscapital/(ContextInfo.marginratio*close_lastbar*ContextInfo.multiplier))
ContextInfo.position_long = long_num
buy_open(ContextInfo.tradefuture,long_num,'fix',close_lastbar,ContextInfo,ContextInfo.accountid)
ContextInfo.surpluscapital -= long_num * ContextInfo.marginratio * close_lastbar * ContextInfo.multiplier
#print '开多'
elif grid <= 1 and ContextInfo.surpluscapital > 0 :
short_num = int(ContextInfo.weight[grid]*ContextInfo.surpluscapital/(ContextInfo.marginratio*close_lastbar*ContextInfo.multiplier))
ContextInfo.position_short = short_num
sell_open(ContextInfo.tradefuture,short_num,'fix',close_lastbar,ContextInfo,ContextInfo.accountid)
ContextInfo.surpluscapital -= short_num * ContextInfo.marginratio * close_lastbar * ContextInfo.multiplier
#print '开空'
# 持有多仓的处理
elif ContextInfo.position_long > 0 :
if grid >= 3 and ContextInfo.surpluscapital > 0 :
targetlong_num = int(ContextInfo.weight[grid] * (ContextInfo.surpluscapital + ContextInfo.multiplier * close_lastbar * ContextInfo.position_long*ContextInfo.marginratio)/ (ContextInfo.marginratio*close_lastbar * ContextInfo.multiplier))
if targetlong_num > ContextInfo.position_long :
trade_num = targetlong_num - ContextInfo.position_long
ContextInfo.position_long = targetlong_num
buy_open(ContextInfo.tradefuture,trade_num,'fix',close_lastbar,ContextInfo,ContextInfo.accountid)
ContextInfo.surpluscapital -= trade_num * close_lastbar * ContextInfo.marginratio * ContextInfo.multiplier
elif targetlong_num < ContextInfo.position_long:
trade_num = ContextInfo.position_long - targetlong_num
ContextInfo.position_long = targetlong_num
sell_close_tdayfirst(ContextInfo.tradefuture,trade_num,'fix',close_lastbar,ContextInfo,ContextInfo.accountid)
ContextInfo.surpluscapital += trade_num * close_lastbar * ContextInfo.marginratio * ContextInfo.multiplier
#print '调多仓到仓位'
# 等于2为在中间网格,平仓
elif grid == 2:
sell_close_tdayfirst(ContextInfo.tradefuture,ContextInfo.position_long,'fix',close_lastbar,ContextInfo,ContextInfo.accountid)
ContextInfo.surpluscapital += ContextInfo.position_long * close_lastbar * ContextInfo.marginratio * ContextInfo.multiplier
ContextInfo.position_long = 0
#print '平多'
# 小于1为在中间网格的下方,做空
elif grid <= 1:
sell_close_tdayfirst(ContextInfo.tradefuture,ContextInfo.position_long,'fix',close_lastbar,ContextInfo,ContextInfo.accountid)
ContextInfo.surpluscapital += ContextInfo.position_long * close_lastbar * ContextInfo.marginratio * ContextInfo.multiplier
ContextInfo.position_long = 0
#print '全平多仓'
if ContextInfo.surpluscapital > 0 :
short_num = int(ContextInfo.weight[grid]*ContextInfo.surpluscapital/(ContextInfo.multiplier * ContextInfo.marginratio * close_lastbar))
ContextInfo.position_short = short_num
sell_open(ContextInfo.tradefuture,short_num,'fix',close_lastbar,ContextInfo,ContextInfo.accountid)
ContextInfo.surpluscapital -= short_num * close_lastbar * ContextInfo.marginratio * ContextInfo.multiplier
#print '开空仓到仓位'

# 持有空仓的处理
elif ContextInfo.position_short> 0 :
# 小于1为在中间网格的下方,做空
if grid <= 1:
targetlshort_num = int(ContextInfo.weight[grid]*(ContextInfo.surpluscapital + ContextInfo.multiplier*close_lastbar*ContextInfo.position_short*ContextInfo.marginratio)/(ContextInfo.multiplier * ContextInfo.marginratio * close_lastbar))
if targetlshort_num > ContextInfo.position_short:
trade_num = targetlshort_num - ContextInfo.position_short
ContextInfo.position_short = targetlshort_num
sell_open(ContextInfo.tradefuture,trade_num,'fix',close_lastbar,ContextInfo,ContextInfo.accountid)
ContextInfo.surpluscapital -= trade_num * close_lastbar * ContextInfo.marginratio * ContextInfo.multiplier
#print '开空仓到仓位' ,targetlshort_num
elif targetlshort_num < ContextInfo.position_short:
trade_num = ContextInfo.position_short - targetlshort_num
ContextInfo.position_short = targetlshort_num
buy_close_tdayfirst(ContextInfo.tradefuture,trade_num,'fix',close_lastbar,ContextInfo,ContextInfo.accountid)
ContextInfo.surpluscapital += trade_num * close_lastbar * ContextInfo.marginratio * ContextInfo.multiplier
#print '平空仓到仓位' ,targetlshort_num
# 等于2为在中间网格,平仓
elif grid == 2:
buy_close_tdayfirst(ContextInfo.tradefuture,ContextInfo.position_short,'fix',close_lastbar,ContextInfo,ContextInfo.accountid)
ContextInfo.surpluscapital += ContextInfo.position_short * close_lastbar * ContextInfo.marginratio * ContextInfo.multiplier
ContextInfo.position_short = 0
#print '全平空仓'
# 大于3为在中间网格的上方,做多
elif grid >= 3:
buy_close_tdayfirst(ContextInfo.tradefuture,ContextInfo.position_short,'fix',close_lastbar,ContextInfo,ContextInfo.accountid)
ContextInfo.surpluscapital += ContextInfo.position_short * close_lastbar * ContextInfo.marginratio * ContextInfo.multiplier
ContextInfo.position_short = 0
#print '全平空仓'
if ContextInfo.surpluscapital > 0 :
trade_num = int(ContextInfo.weight[grid]*ContextInfo.surpluscapital / (ContextInfo.marginratio * close_lastbar * ContextInfo.multiplier))
ContextInfo.position_long = trade_num
buy_open(ContextInfo.tradefuture,trade_num,'fix',close_lastbar,ContextInfo,ContextInfo.accountid)
ContextInfo.surpluscapital -= trade_num * close_lastbar * ContextInfo.marginratio * ContextInfo.multiplier
#print ' 开多仓到仓位'
# 获取多仓仓位
#print 'ContextInfo.position_long',ContextInfo.position_long
# 获取空仓仓位
#print 'ContextInfo.position_short',ContextInfo.position_short
# 获取剩余资金
#print 'ContextInfo.surpluscapital',ContextInfo.surpluscapital

这一篇就先解释这些代码,后面再给大家做剩余部分解释。

赞(0)xiaowanxiaowan阅读(710)去评论

QMT的优势

QMT软件,一款专注于高频交易策略开发的软件,它支持本地运行。投资者可以通过本地运行,实时获取行情信息并进行逻辑判断,生成交易信号,再通过终端发送至券商主机进行交易。这意味着所有的计算都在本地执行,而平台更多的是提供接口,如下单接口等。

QMT软件支持Python和VBA编程语言,这意味着策略代码的配置完全取决于投资者自己。此外,QMT支持多种投资品种,包括股票、两融、ETF申赎、可转债、期权、期货等。这意味着投资者可以根据自己的需求选择合适的投资品种进行交易。

在回测方面,QMT支持不同级别的回测,如Tick级、分钟级、五分钟级、十分钟级、日线、周线、月线等。这意味着投资者可以根据自己的需要选择合适的回测级别,以便更好地了解自己的交易策略的效果。总的来说,QMT软件是一款功能强大、性能卓越的高频交易软件,投资者可以根据自己的需求进行配置和选择,以实现最佳的交易效果。

想要获得QMT模拟测试安装可以联系我,实盘开户也可以联系我。

赞(0)xiaowanxiaowan阅读(657)去评论

QMT安装步骤

前面介绍了QMT诸多好处,那它究竟怎么使用呢?今天就以国金证券的模拟版QMT来做演示。

首先下载安装包,需要的朋友请联系加微信联系我,我发给你链接或安装。

安装图片如下:

解压缩安装

运行软件,输入模拟测试的账号,请联系我获取测试账号。

这里打红框的地方,为了方便大家使用最开始使用的时候建议不要选择独立交易,独立交易属于miniQMT,我们以后再去做介绍,目前最开始建议用行情+交易客户端,等到后期想使用原生的Python环境时再去使用独立交易端。

这里还要特别说明下,国金的QMT是可以集合股票和期货二合一终端的,意思就是一个软件股票和期货都可以交易,具体的请联系我。

上面是一个大概的界面,后面慢慢介绍各个界面,这里要重点说一下QMT软件Python环境使用及相关的库,大家看下面的图片。

点击这个 下载Python库

正在下载,就等待下载完成。

下载成功的界面

这里面有就很多测试代码,可以点进去进行测试,今天就先给大家展示这些内容,后面再给大家展示其他功能。

赞(0)xiaowanxiaowan阅读(588)去评论

QMT软件介绍

一、基本介绍

QMT软件是一款专注于高频交易策略开发与管理的软件系统。它的全称是“快速多维算法交易系统”,以其高效的算法交易、快速的执行速度和强大的策略管理功能而闻名于市场。无论是个人交易者还是专业交易机构,QMT都是一个值得信赖的交易伙伴。

二、软件功能

  1. 算法交易:QMT提供了丰富的算法交易功能,包括但不限于市场中性策略、多因子模型、套利策略等,满足不同交易者的需求。
  2. 高速执行:QMT具有极快的执行速度,能够快速响应市场变化,确保交易的及时性和准确性。
  3. 策略管理:QMT支持多种策略的创建、修改和回溯,方便交易者管理自己的交易策略。
  4. 数据分析:QMT提供了丰富的数据分析和统计功能,帮助交易者更好地理解市场动态,制定更有效的交易策略。
  5. 风险管理:QMT内置的风险管理系统能够实时监控市场风险,为交易者提供及时的风险提示和风险管理建议。

三、软件特色

  1. 高效算法交易:QMT的算法交易功能强大,能够快速、准确地执行交易策略,降低交易成本,提高收益。
  2. 智能风险管理:QMT的风险管理系统能够实时监控市场风险,为交易者提供个性化的风险管理工具和建议,帮助交易者更好地控制风险。
  3. 策略灵活可定制:QMT支持多种策略的创建、修改和回溯,满足不同交易者的个性化需求。
  4. 用户友好界面:QMT的用户界面简洁明了,易于操作,即使是初入市场的交易者也能轻松上手。
  5. 持续更新优化:QMT团队不断优化软件功能和性能,确保软件始终保持领先地位,为交易者提供最佳的交易体验。

四、使用效果

使用QMT软件后,交易者的交易效率大大提高,策略执行速度加快。同时,QMT的风险管理系统为交易者提供了及时、准确的风险提示和风险管理建议,帮助交易者更好地控制风险。

五、总结

总的来说,QMT软件是一款功能强大、性能卓越的高频交易软件。它提供了丰富的算法交易功能、高速的执行速度、灵活的策略管理、强大的数据分析能力和实时风险管理功能,为交易者提供了良好的交易环境和可靠的交易保障。无论是个人交易者还是专业交易机构,QMT都是一个值得信赖的伙伴。

赞(0)xiaowanxiaowan阅读(603)去评论

backtrader介绍

backtrader是基于Python语言编写的量化投资框架,使用非常方便,让大家更加专注于策略的开发。

它的逻辑就是数据准备、策略编写、执行回测/交易。

它适用于各类资产的回测,包括股票、期货、外汇、期权等。

一个很想给您提供帮助的陌生人!

赞(0)xiaowanxiaowan阅读(234)去评论

登录

找回密码

注册