【MultiCharts(MC)程序化(量化)网上培训学习系列】第218节:Bar、tick与时间关系
[attach]28756[/attach]【MultiCharts(MC)程序化(量化)网上培训学习系列】第218节:Bar、tick与时间关系
1、注册论坛会员免费看公开课视频源码;升级至付费会员免回复查看策略源码、文档;升级至prime会员无阻碍畅游全站期货策略、源码、回测、优化、视频、教程、图书、文档,参考:[url]http://www.qhlt.cn/thread-37840-1-1.html[/url];
2、通过期货论坛推荐新开立期货账号,可免费获得付费会员或prime会员资格并享受账户特惠政策,参考:[url]http://www.qhlt.cn/thread-25049-1-1.html[/url];
3、通过期货论坛开立期货账号并绑定MC享受专属优惠政策:[url]http://www.qhlt.cn/thread-80442-1-1.html[/url];
4、PC购买/服务器托管如何选择及量化软件相关设置指导:[url]http://www.qhlt.cn/thread-105169-1-1.html[/url];
5、全网最大策略源码区:[url]http://www.qhlt.cn/forum-109-1.html[/url] ;策略精选推荐优化区:[url]http://www.qhlt.cn/forum-874-1.html[/url];
6、期货论坛官方MC量化策略群,对视频中策略有想法、建议、优化以结交量化好友,动动手,扫二维码加入微信群,跟一众量化好友切磋吧:[url]http://www.qhlt.cn/thread-262-1-1.html[/url] ; [img]http://www.qhlt.cn/attachments/month_2109/21090205470fa622c0d3daf19a.jpg[/img]
[img]http://p.qhlt.cn/filestores/2021/09/02/4de4690212cb853a223f7192b0882421.jpg[/img]
[img]http://p.qhlt.cn/filestores/2021/09/02/64a263da90bbdce306d5f6c975117474.jpg[/img] 关键词:
Bar
[table]
[tr][td]与 This, Next, 或 Ago联合使用,引用指定的 Bar。 [/td][/tr]
[/table]
[table]
[tr][td][b]用法[/b]
Bar [/td][/tr]
[/table]
[table]
[tr][td][b]范例[/b]
Close Of 1 Bar Ago 返回前一根bar的收盘价
以当根K线的收盘价做多开仓:
Buy This Bar On Close;
在下根K线以开盘价做多开仓:
Buy Next Bar On Open;[/td][/tr]
[/table] BarNumber
返回相对最大参考bar的的K线编号语法[p=30, 2, left][color=#800080]BarNumber[/color] [/p]返回(整数)
图形中每个柱状线的正数引用值。参数
无备注
MaxBarsBack 是图形开始时所需的参引历史柱状线最低数量,以开始计算交易策略、分析方法和函数。例如,10-柱状线移动平均线需要将 MaxBarsBack 设置为 9 开始计算,其中有 9 条历史柱状线和一条当前柱状线。
因为 [color=#800080]BarNumber[/color] 基于 [color=#0000ff]MaxBarsBack[/color],如果图形中有 500 条柱状线,[color=#0000ff]MaxBarsBack[/color] 设置为 50 的话,图形中第 50 条柱状线从左往右后一条将会是 [color=#800080]BarNumber[/color] [color=#800080]=[/color] 1。图上最后一条柱状线(最近)将会是 [color=#800080]BarNumber =[/color] 451。
BarNumber 通常因为某些要测试或纳入分析的特别事件或情况而用于识别特定柱状线或柱状线的数目。
BarNumber 函数类似于保留字 CurrentBar。但是,CurrentBar 并不允许引用前面的柱状线:BarNumber[b][5][/b](五条柱状线前的柱状线)是正确的,然而,Currentbar[b][5][/b] 却不正确,不起作用。示例
将每条柱状线的 [color=#800080]BarNumber[/color] 赋予 [color=#800000]Value1[/color],然后绘制 [color=#800000]Value1[/color]:[p=30, 2, left]Value1 = [color=#800080]BarNumber[/color][b];[/b][/p][p=30, 2, left]Plot1(Value1, "BarNum");[/p]
Condition1 为真时,将 [color=#800080]BarNumber[/color] 赋予 [color=#800000]Value1[/color],将 Condition1 发生后的柱状线数量赋予 [color=#800000]Value2[/color]:[p=30, 2, left]if [color=#800000]Condition1[/color] then
Value1 [color=#000000]=[/color] [color=#800080]BarNumber[/color][color=#000000];[/color]
if [color=#800080]BarNumber[/color] [color=#000000]>[/color] Value1 then
Value2 [color=#000000]=[/color] CurrentBar [color=#000000]–[/color] Value1[color=#000000];[/color][/p] BarsSinceEntry
[table]
[tr][td]
返回指定部位进场至今的k棒数量的数值。 [/td][/tr]
[/table]
[table]
[tr][td][b]用法[/b]
BarsSinceEntry([i]PosBack[/i])
参数说明: [i]PosBack[/i] —— 数值表达式,用来指定部位:
0 —— 未平仓部位;
1 —— 上一个平仓部位(最后一个平仓部位);
2 —— 上二个平仓部位,依次类推。
若 [i]PosBack[/i] 未指定,则预设为未平仓部位。 [/td][/tr]
[/table]
[table]
[tr][td][b]注意[/b]
此功能只能用于信号或函数中。无法取加仓的信息。 [/td][/tr]
[/table]
[table]
[tr][td][b]范例[/b]
取得目前仓位进场后的K棒数量,并存于变量 Value1:
Value1=BarsSinceEntry;
取得最近一笔平仓部位距今多少根K棒数量的,并存入变量Value1:
Value1=[color=blue]BarsSinceEntry[/color][color=black]([b]1[/b]);[/color][color=black][/color][/td][/tr]
[/table] BarsSinceExit
[table]
[tr][td]
返回指定部位出场至今的k棒数量的数值。 [/td][/tr]
[/table]
[table]
[tr][td][b]用法[/b]
BarsSinceExit([i]PosBack[/i])
参数说明: [i]PosBack[/i] —— 数值表达式,用来指定部位:
0 —— 未平仓部位;
1 —— 上一个平仓部位(最后一个平仓部位);
2 —— 上二个平仓部位,依次类推。
若 [i]PosBack[/i] 未指定,则预设为未平仓部位。 [/td][/tr]
[/table]
[table]
[tr][td][b]注意[/b]
此功能只能用于信号或函数中。无法取加仓的信息。 [/td][/tr]
[/table]
[table]
[tr][td][b]范例[/b]
取得最近一笔平仓部位距今多少根K棒数量的,并存入变量Value1:
Value1=[color=blue]BarsSinceExit[/color][color=black]([b]1[/b]);[/color][color=black][/color][/td][/tr]
[/table] BarStatus
[table]
[tr][td]返回一个数值,表示指定的数据中当前Bar的最近一个tick的状态。
BarStatus值为0表示最近tick是当前Bar的开盘tick,值为1表示最近tick是当前Bar内的一个tick,值为2表示最近tick是当前Bar的收盘tick。 [/td][/tr]
[/table]
[table]
[tr][td][b]语法[/b]
BarStatus([i]DataNum[/i])
参数说明: [i]DataNum[/i] —— 数值表达式,用来表明指定的数据。
如果 [i]DataNum[/i] 参数没有指定, 则返回当前数据的值。 [/td][/tr]
[/table]
[table]
[tr][td][b]范例[/b]
如果数据1中,最近一笔tick是当根Bar的收盘tick,则 BarStatus(1) 返回值为2。 [/td][/tr]
[/table] BarType
[table]
[tr][td]
返回一个数值,表明脚本所在数据的周期类型。 [/td][/tr]
[/table]
[table]
[tr][td][b]用法[/b]
BarType
不同的周期类型对应的Bartype返回值为:
0 —— Ticks &合约 (Ticks & Contracts)
1 —— 日内 (秒Seconds, 分Minutes & 时Hours)
2 —— 日Days
3 —— 周Weeks
4 —— 月,季,年(Months, Quarters & Years)
5 —— 点&变动(Points & Changes)
6 —— (保留以备将来使用)
7 —— (保留以备将来使用)
8 —— 卡吉图
9 —— (保留以备将来使用)
10 —— 新价线
11 —— (保留以备将来使用)
12 —— (保留以备将来使用)
13 —— 砖型图
256 —— Heikin Ashi
[/td][/tr]
[/table]
[table]
[tr][td][b]范例[/b]
取数据的周期类型值,赋给变量Value1:
Value1=BarType; [/td][/tr]
[/table] 一个bar在一个期货品种特定周期的技术图表上面的要素:
[img]http://p.qhlt.cn/filestores/2021/09/02/550248e175117574d7cf2f5c1b263f1a.jpg[/img] [b]什么是Tick 数据?[/b]
tick数据是指:每秒两条的快照,国内期货最细粒度就是每秒两次,时间带毫秒。
举例说明:
某天的市场一开始的时候苹果股票的order book(委托挂单)清空(这里不进行auction period的探讨):
[img]http://p.qhlt.cn/filestores/2021/09/02/2b4fd479ccd3c5b515eeecfec73570ef.png[/img]
1. 接着来了第一个卖家:1000@100 :
[img]http://p.qhlt.cn/filestores/2021/09/02/fc30e9b60f55abaabf96ee0279e151f6.png[/img]
这时候交易所会发给你一个message,告诉你是苹果股票有人想以100块钱卖出1000股,那么这个order就先挂在了order book上,成为卖一。
卖:
1000@100
2. 第二个卖家来了,他想卖得更高: 1000@101:
[img]http://p.qhlt.cn/filestores/2021/09/02/f139bf0468fcb3f62e9604c07923df79.png[/img]
这时候交易所会发给你另一个message,告诉你是苹果股票有人卖的价格比你差,于是排序在更上面,卖二。
卖:
1000@101
1000@100
3. 刚才的第一个卖家后悔了,cancel了他的order:1000@100撤消了,那么交易所会有message告诉你,现在只剩一个1000@101(卖一)。但是你可能需要自己编程处理这种remove掉一个tick的情况。
[img]http://p.qhlt.cn/filestores/2021/09/02/0f3e797c45e7104e3a831b52ec718386.png[/img]
卖:
1000@101
4. 终于有买家来了... 500@90 , 这个价格是不会成交的,因为买家低于现在的最佳卖价:101,那么order book里面会继续存着这个order,同时会发送一个tick告诉市场上的其他人,有买单了:
[img]http://p.qhlt.cn/filestores/2021/09/02/c4a46bea29e99ec337c78bea4f136d3c.png[/img]
卖:1000@101
买:500@90
5. 继续,接着有一位买家以101块钱买入1000股,等于要把目前的bestoffer 1000@101给match - 撮合了,那么你是不会收到这个最新的bid: 101@1000 的,因为它会进入matching engine的瞬间跟对面的best offer 撮合了,tick table的一个规则: bid offer 永远不会cross,否则要么是数据商的bug,要么是交易所的bug。现在,你只会收到一个告诉你delete the best offer的message,那么tick table长这样:
[img]http://p.qhlt.cn/filestores/2021/09/02/61bdd8ace08e2bf851fca9e30578f8a9.png[/img]
买:500@90
Tick数据就是这么简单,市场上会重复这个过程。
对于国外的高频tick数据,有完整的order数据的过程,因此你可以利用这些order数据来复原快照数据。
国内的两大股票和四大期货交易所理论上讲都是快照数据,国内是多少个milli second截取一个快照(snapshot),然后发送给你。比如说典型的数据字段包括
开盘价 最高价 最低价 最新价 成交量 成交额
这里的最高(低)价就从开盘到现在成交发生过的最高(低)价,假设你有详细的每笔成交的明细,其实这个数据是可以用max(min)推算的,所以国外的tick数据里面一般是没有这个字段的。
参考地址:[url=https://blog.csdn.net/weixin_42219751/article/details/98870005]https://blog.csdn.net/weixin_42219751/article/details/98870005[/url]
补充:
国内交易所的order book的数据维护都是实时进行的,但是和国外交易所不同,并不是每个动作都会实时推送到市场上来,而是根据指定的时间间隔进行一次检查,如果该时间段内有动作,则生成一次快照并且推送出来,数据的推送充其量只能算做OnTime,而不能叫做OnTick(被动触发还是主动检测对用户没有区别,此处为了方便说明而取前一种方式)
参考地址:[url]https://blog.csdn.net/weixin_42219751/article/details/96989218?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.control&[/url];spm=1001.2101.3001.4242 Ticks
[table]
[tr][td]图表设置[b]成交量[/b]基于[b]成交笔数[/b],则Ticks返回每根Bar的成交笔数。
图表设置[b]成交量[/b]基于[b]交易量[/b],则Ticks返回每根Bar的成交股数(成交手数)。
图表设置[b]成交量[/b]基于[b]成交笔数[/b]:
- 1-tick图表中,当前tick的Ticks返回值为1。
- 多tick、量、时间周期的图表中,当前Bar的Ticks返回值为当前Bar的成交笔数。
图表设置[b]成交量[/b]基于[b]交易量[/b]:
- 1-tick图表中,当前tick的Ticks返回值为当前tick的成交股数。
- 多tick,量,时间周期的图表中,当前Bar的Ticks返回值为当前Bar的成交股数。注意:许多历史数据源只提供有限的历史成交量和成交笔数的数据,实时存储数据可以确保成交量和成交笔数数据的有效性。 [/td][/tr]
[/table]
[table]
[tr][td][b]用法[/b]
Ticks [/td][/tr]
[/table]
[table]
[tr][td][b]范例[/b]
画出当前Bar的成交笔数 (图表设置[b]成交量[/b]基于[b]成交笔数[/b]):
Plot1(Ticks,"Ticks");
画出当前Bar的成交股数 (图表设置[b]成交量[/b]基于[b]交易量[/b]):
Plot1(Ticks,"Volume");[/td][/tr]
[/table] b站视频资源:
[mp4]http://mp4.qhlt.club/Rec%200218.mp4[/mp4]
【说明,一个bar的开始到延续直到结束的过程,从第一个tick开始,一直到最后一个tick,组装成一个bar的过程】
技术图表上面是有无数个bar组成的bar的序列,第一个bar和中间的bar都是提供如下要素(开,高,低,收,成交量,持仓量,bar的相对序列号),而最后一个bar,在交易时段除了开盘价和序列号是确定外,高,开,低,收,持仓,成交则都是不确定的,只有走完这个bar才能确定。在走的过程中收盘价与现价是同样的close来表示。 [size=14.4px]关注课程微信订阅号(每天上架新策略、跟着视频学编程)[/size]
[img=170,170]http://www.qhlt.cn/diypic/Public.png[/img]
页:
[1]