MultiCharts编程-PowerLanguage脚本如何执行
- UID
- 2
- 积分
- 2874674
- 威望
- 1387366 布
- 龙e币
- 1487308 刀
- 在线时间
- 13156 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
MultiCharts编程-PowerLanguage脚本如何执行
二、脚本如何执行
PowerLanguage公式可用在由MultiCharts创建的图表和投资组合回测(Portfolio Backtester)中。
可用的PL公式分为两个主要类型:指标(Indicators)和信号(Signals)。
一个指标是一个可视的技术分析工具,用来分析市场条件、定义和预测趋势以及市场模式。指标即是一个可视化的数学公式,包含一个或多个画线、直方图、一系列点或穿越状态、高价和低价、左右的tick或在一个图上包含以上全部的信息。指标的计算只能用价格、成交量数据。
一个信号是一个机械的技术分析工具,用来系统地根据一系列交易规则指定进场或出场点位。交易点位在图表上以文字和箭头标示。策略可以容易地由多个信号组合。由信号指定的进出场点位,可以用来发送委托单到交易商,完成全自动的交易执行。
根据它们不同的使用目的,指标和信号对于价格数据的计算有不同的方式。下面分别阐述两者。
在阐述前,需要先了解两个基本概念:完成bar和指标运算参考的最大bars数量。
A.完成bar
当一个bar已经收盘并且无法加入额外的tick时,可认为此bar是一个完成bar。
*基于时间的图表,一旦设定的bar周期的时间间隔已过,下一个时间戳的第一笔tick已接收到,那么这个bar为已收盘;或者三秒内没有再收到额外的tick,也视为这个bar已经结束。
*基于tick的图表,一旦定义的bar数量已经到来,则这个bar视为已结束。
*基于范围的图表,一旦接收的新tick的价格超出原始的价格范围,则这个bar视为已结束。
*基于量的图表,一旦接收到的tick为当前bar所带来的成交量达到定义的合约数目,则这个bar视为已结束。
*基于变动的图表,一旦接收到的tick为当前bar所带来的的价格达到定义的价格变动数,则这个bar视为已结束。
B.指标运算参考的最大Bars数量
一个公式脚本可以参考前面bars的值来用于当前bar的计算。当在脚本中参考了前面N根bar,则公式可以从第N+1根bar开始可以看到绘图或委托行为。为了能让脚本开始执行计算, 前面预留了bars数目,叫做指标运算参考的最大Bars数量,或MaxBarsBack。MaxBarsBack的值可以选择「自动检测」或「用户指定」(可在设置指标->属性中设定)。
当选择为「自动检测」时,MaxBarsBack将会初始化为指标中引用的最大数据偏移量(即最大的N Bars Ago中的N值)。然而,脚本中引用的数据偏移如果是变量,MaxBarsBack的初始值可能会太小;在这种情形下,MaxBarsBack的值将自动增加5或乘以1.618,产生一个较高的值,在重新计算指标。
MaxBarsBack自动检测的过程可能会导致:在指标第一次应用到图表上时,某些函数在图上最开始的一些bar的计算重复。为了避免这种情况,MaxBarsBack可以设定为「用户指定」。
选择最小的MaxBarsBack来满足一个特定的指标或信号的计算,可手动设定这个值。推荐的初始值为50。
1.指标执行方式
指标的目的是在图表上绘出可视的数学公式,绘图的创建基于一个或多个价格数据系列。
当指标被插入到图表中时,第一次的计算是对于完成bar一个接着一个的计算,并从图上第一个bar开始。整个脚本对于每个完成bar都执行一次。在每个bar上,依据计算结果,指标脚本可以向外输出图形、文字、改变绘图颜色、音频警报等。如果指标脚本中含有前面bar的引用值,那么指标执行输出的第一个Bar将跟随“指标参考运算的最大Bars数量”的不同而不同。
一旦图上所有的完成bar都执行完成,一个指标将继续执行图上最后一个bar,以tick by tick的运算,不等待这根bar的形成。一个未完成bar是自上一个bar完成以来,接收到的所有tick的总和。新的一笔tick接收时,整个脚本将会在那根Bar执行,直到此bar已完
全形成并且下一个Bar已开始。指标脚本对于未完成bar的方式和已完成bar相同,并可以在基于未完成bar的计算结果上做出行动。
请注意只有最后的未完成bar在每一个新的tick收到时会重新计算,并非整个数据系列。
指标在一个bar的执行过程叫做重新计算或更新。默认指标更新是基于每笔tick资料的。但是,在某些情形下,它可能出现不良状况;
每笔tick更新大量的复杂指标需要更多实质性的系统资源。每笔tick资料都更新的操作可以在MultiCharts的设置中关闭。
2.信号执行方式
信号是策略的基本组件。信号实质上比指标更复杂,需要考虑大量的因素。信号支持回测和自动交易执行。
当信号被插入到图表中时,第一次的计算是对于完成bar一个接着一个的计算,并从图上第一个bar开始。整个脚本对于每个完成bar都执行一次。在每个bar上,依据计算结果,信号脚本可以执行一个或多个交易委托。委托单会在图上标记箭头或其他标识,可伴有弹出框或音频警报等。如果信号脚本中含有前面bar的引用值,那么信号执行输出的第一个Bar将跟随“指标参考运算的最大Bars数量”的不同而不同。
默认,一旦图上所有的完成bar都执行完成,一个信号将中断执行,直到新的完成bar已形成,然后全部脚本会在新的bar再次执行。
信号执行方式可以选择启用bar内交易来调整。当开启bar内交易执行状态为已启用时,信号对于最新的bar计算不用等到它的完成。而是,每当新的一笔tick接收到时,最新的bar就会重新计算一次,直到这根bar的完成并且下一根bar已经开始。一个未完成bar是自上一个bar完成以来,接收到的所有tick的总和。启用bar内模式,信号脚本对于未完成bar的方式和已完成bar相同,并可以在基于未完成bar的计算结果上做出行动。
请注意只有最后的未完成bar在每一个新的tick收到时会重新计算,并非整个数据系列。
A.委托单执行优先级
一个信号可以在一个bar中执行多个委托单。委托单可以由相同或不同的语句执行。
根据执行语句类型的不同,委托单的执行分为3组:
1.由 This Bar [On] Close语句执行
2.由 Next Bar [At] Market和Next Bar [At] Open语句执行
3.由Next Bar [At] Price Limit和Next Bar [At] Price Stop语句执行
在一个委托组内,委托单执行的优先级排序是基于当前部位(持仓)的: 委托单执行优先级表 | 数值高者优先级高 | 持仓部位 | 无持仓(Flat) | 多头(Long) | 空头(Short) | 多头进场(Long Entry) | 1 | 1 | 2 | 空头进场(Short Entry) | 1 | 2 | 1 | 多头出场(Long Exit) | - | 1 | - | 空头出场(Short Exit) | - | - | 1 |
|
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|
|
|
|
|
|
- UID
- 2
- 积分
- 2874674
- 威望
- 1387366 布
- 龙e币
- 1487308 刀
- 在线时间
- 13156 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
多个同方向的委托被分配的相对于彼此的优先级,是基于委托语句在信号脚本中的列表顺序而顺序执行。当多个信号组合来创建一个策略时,由不同信号执行的、同方向的委托被分配的相对于彼此的优先级,是基于委托单所在信号出现在信号标签中的顺序。先插入到图表中的信号顺序靠前。 一旦委托单被排序后,优先级最高的先执行。有一个重要注意事项:与当前持仓部位方向相反的进场委托,不是简单的只平掉当前的持仓,而是会反向开仓。比如:当持有1手空头(Short)时,1手多头(Long)的进场委托,结果将会是平掉空头持仓,并且建立1手多头持仓。 考虑到持仓部位的变化、委托单执行的结果,余下的委托单将会再排序,最高优先级的委托仍然先执行。 这个过程一直重复,直到全部的委托单都已执行,或直到剩下的委托没有可以被执行的。比如:只剩出场委托单,而当前已经没有持仓。 如果所剩的进场委托方向和当前持仓部位相同,那么在部位限制启用(打勾)的状态下,这些委托单可以被执行。部位限制的设定可最多允许N笔与目前仓位同向的进场委托单(详细见策略属性->属性->部位限定)。 剩下的不可执行的委托单会被丢弃。 B.委托单执行优先级举例: 在如下委托中:空头出场(SX)、空头进场(SE)、多头进场(LE)、多头出场(LX)、多头进场(LE),当前持仓部位为空头,则多个委托单执行状况如下: 1.委托单的顺序根据优先级以降序排列:多头进场(LE)、多头进场(LE)、空头出场(SX)、空头进场(SE)(不可执行委托:多头出场(LX)) |
| 2. 多头进场(LE)执行;当前持仓为多头 |
|
|
|
|
|
|
|
|
- UID
- 2
- 积分
- 2874674
- 威望
- 1387366 布
- 龙e币
- 1487308 刀
- 在线时间
- 13156 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
3.委托单的顺序根据优先级以降序排列:空头进场(SE)、多头进场(LE)、多头出场(LX)(不可执行委托:空头出场(SX)) |
| 4. 空头进场(SE)执行;当前持仓为空头 |
| 5. 委托单的顺序根据优先级以降序排列:多头进场(LE)、空头出场(SX)(不可执行委托:多头出场(LX)) |
| 6. 多头进场(LE)执行;当前持仓为多头 |
| 7. 委托单的顺序根据优先级以降序排列:多头出场(LX)(不可执行委托:空头出场(SX)) |
| 8.多头出场(LX)执行;当前无持仓 |
| 9.只剩一个空头出场(SX)的委托,不可执行,将被丢弃。 |
|
|
|
|
|
|
|
|
- UID
- 2
- 积分
- 2874674
- 威望
- 1387366 布
- 龙e币
- 1487308 刀
- 在线时间
- 13156 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
|
|
|
|
|
|