: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

MultiCharts编程-PowerLanguage脚本如何执行

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

  

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

多个同方向的委托被分配的相对于彼此的优先级,是基于委托语句在信号脚本中的列表顺序而顺序执行。当多个信号组合来创建一个策略时,由不同信号执行的、同方向的委托被分配的相对于彼此的优先级,是基于委托单所在信号出现在信号标签中的顺序。先插入到图表中的信号顺序靠前。

一旦委托单被排序后,优先级最高的先执行。有一个重要注意事项:与当前持仓部位方向相反的进场委托,不是简单的只平掉当前的持仓,而是会反向开仓。比如:当持有1手空头(Short)时,1手多头(Long)的进场委托,结果将会是平掉空头持仓,并且建立1手多头持仓。

考虑到持仓部位的变化、委托单执行的结果,余下的委托单将会再排序,最高优先级的委托仍然先执行。

这个过程一直重复,直到全部的委托单都已执行,或直到剩下的委托没有可以被执行的。比如:只剩出场委托单,而当前已经没有持仓。

如果所剩的进场委托方向和当前持仓部位相同,那么在部位限制启用(打勾)的状态下,这些委托单可以被执行。部位限制的设定可最多允许N笔与目前仓位同向的进场委托单(详细见策略属性->属性->部位限定)。

剩下的不可执行的委托单会被丢弃。

B.委托单执行优先级举例:

在如下委托中:空头出场(SX)、空头进场(SE)、多头进场(LE)、多头出场(LX)、多头进场(LE),当前持仓部位为空头,则多个委托单执行状况如下:

  

1.委托单的顺序根据优先级以降序排列:多头进场(LE)、多头进场(LE)、空头出场(SX)、空头进场(SE)(不可执行委托:多头出场(LX)

  
  
   

SX


   
   

SE


   
   

LE


   
   

LX


   
   

LE


   
  
  
  

2. 多头进场(LE)执行;当前持仓为多头

  
  
   

SX


   
   

SE


   
  
   
   

LX


   
   

LE


   
  
  
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

  

3.委托单的顺序根据优先级以降序排列:空头进场(SE)、多头进场(LE)、多头出场(LX)(不可执行委托:空头出场(SX)

  
  
  
  
  

4. 空头进场(SE)执行;当前持仓为空头

  
  
   

SX


   
   

   
   

   
   

LX

   
   

LE

   
  
  
  

5. 委托单的顺序根据优先级以降序排列:多头进场(LE)、空头出场(SX)(不可执行委托:多头出场(LX)

  
  
  
  

6. 多头进场(LE)执行;当前持仓为多头

  
  
   

SX


   
   

   
   

   
   

LX

   
   

   
  
  
  

7. 委托单的顺序根据优先级以降序排列:多头出场(LX)(不可执行委托:空头出场(SX)

  
  
  
  

8.多头出场(LX)执行;当前无持仓

  
  
   

SX


   
   

   
   

   
   

   
   

   
  
  
  

9.只剩一个空头出场(SX)的委托,不可执行,将被丢弃。

  
  
   

SX


   
   

   
   

   
   

   
   

   
  
  
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

以上委托单执行结果,将从一个空头持仓变成无持仓。
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

返回列表