龙听期货论坛's Archiver

龙听 发表于 2018-5-8 16:32

MultiCharts编程-PowerLanguage概述

PowerLanguage为MultiCharts交易平台创建技术分析指标和交易策略信号提供了高级的程序编程环境。
PowerLanguage为用户提供了多种复杂功能,同时也为初学者保留了简单的学习方法。
在支持TradeStation的EasyLanguage功能时,PowerLanguage最大程度的兼容了EL的语法。
PowerLanguage程序可以在MultiCharts平台上使用编辑器(PowerLanguage Editor)很容易的创建和修改。

龙听 发表于 2018-5-8 16:32

[b]一、PowerLanguage语言要素[/b]
PowerLanguage是一个可以由计算机执行的,较为系统的、有逻辑的表达金融工具交易规则的系统。
一个深思熟虑的交易策略,正确的在PowerLanguage中表达,将会用一个更大的速度、准确性和持久性来执行,可以程序化的代替人的交易。
在PowerLanguage实施交易策略,要求熟悉基本的规则和结构的语言,下面所列以及关键词描述的关键字部分可作为参考指南。

龙听 发表于 2018-5-8 16:33

1.PowerLanguage公式和语句
一个完整的PowerLanguage程序叫做一个脚本。一个脚本将是一个策略(一个交易委托事件)、一个指标(一个画在图表上的指标线,来辅助做出交易决定)或一个函数(可以是一个独立的程序或子程序,可以被其他脚本调用)。
PowerLanguage脚本至少要包含一个语句,通常会更多。一个语句是一个完整的陈述式,并以分号(;)结束。下面是一个语句(一行的脚本)的例子:
Buy Next Bar At Open;
语句的执行从左到右,脚本的执行从最开始的行到最底行。

龙听 发表于 2018-5-8 16:33

2.价格图表
一个数据系列包括一组价格数据点、基于特定周期和日期范围的顺序排列。
最常用的视觉呈现数据系列的方法是一个K线图。基于一组价格数据点的每根K线,是一个连续的最高价和最低价的垂直线,代表一个商品价格根据特定周期变动的范围。K线所基于的第一个价格和最后一个价格,在线上会以开盘价和收盘价标识。
PowerLanguage在背景图上将价格点以K线形式形成。K线可以基于不同的周期。例如,下面的语句将会在下一个K线(或Bar)的开盘价买入委托,如果前一个K线的最高价小于当前K线的收盘价:
If High 1 Bar Ago < Close Then Buy Next Bar At Open;
以上语句中的时间和价格均基于Bar的计算或表达。

龙听 发表于 2018-5-8 16:36

3.格图表在PowerLanguage公式的执行
一个PowerLanguage脚本在价格图表上每根Bar都执行,并从图上第一根Bar开始。全部的程序脚本在第一根Bar执行后,第二根bar就进入待执行状态,直到图上的最后一根bar执行完毕。公式在当前执行的Bar定义为当前Bar,前面的bar为前一根Bar(1 Bar Ago)。公式向后一根Bar运行时,当前bar就会变成前一根Bar。
图1 对每根bar,公式的全部脚本从最顶端的行执行到最底端
[img]http://p.qhlt.cn/filestores/2018/05/08/82936851b22db4f786fadb4239d6e78d.png[/img]
图2 公式的执行是一根bar接着一根,并始于图上(1,2,3,…n)第一根
[img]http://p.qhlt.cn/filestores/2018/05/08/794c7cedda60dae158b925945d3ed21a.png[/img]
这里是一个基本概述,可以给出PowerLanguage如何工作的最初始的理解。更详细的一个图表¬¬如何执行程序,可以参看“脚本如何执行”的部分。

龙听 发表于 2018-5-8 16:38

4.PowerLanguage
PowerLanguage允许含关键字、常数、变量、数学或逻辑运算、表达交易规则的标点符号和条件或无条件下的行为和输出。
从最基本上,有很多工具来实现一个变化的任务,如:Print(“My name is Joe”);
全部的功能方式允许在高级的程序语言实现。
PowerLanguag组件的分类在如下段落阐述:
A.关键字
PL中大部分的关键字都是陈述语句、行为说明。关键字说明了买或卖、画线或删除线、比较或转换。一些关键字也可以返回指定的数值或字符串。关键字列表的详细说明和举例可以从正文中看到。
B.跳跃字
PL中的跳跃字像是语气词,它们什么行为都不会产生,脚本执行时会被忽略,但是它们可以使得PowerLanguage更易读懂。在公式编辑器中跳跃字以红色显示。可从正文跳跃字章节中看到。
C.运算
PL中有四种运算:数学运算、关系运算、逻辑运算和字符运算。
数学运算来完成数学操作,有5种可用的运算:

龙听 发表于 2018-5-8 16:40

[align=center][table=62%]
[tr]  [td=1,1,50%]  [p=30, 2, center][font=宋体]运算符[/font][/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]含义[/font][/p]  [/td] [/tr]
[tr]  [td=1,1,50%]  [p=30, 2, center]+[/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]加法[/font][/p]  [/td] [/tr]
[tr]  [td=1,1,50%]  [p=30, 2, center]-[/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]减法[/font][/p]  [/td] [/tr]
[tr]  [td=1,1,50%]  [p=30, 2, center]*[/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]乘法[/font][/p]  [/td] [/tr]
[tr]  [td=1,1,50%]  [p=30, 2, center]/[/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]除法[/font][/p]  [/td] [/tr]
[tr]  [td=1,1,50%]  [p=30, 2, center]()[/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]括号[/font][/p]  [/td] [/tr]
[/table][/align][p=30, 2, left][font=宋体]关系运算用来进行比较,有[/font]6[font=宋体]种:[/font][/p][align=center][table=62%]
[tr]  [td=1,1,50%]  [p=30, 2, center][font=宋体]运算符[/font][/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]含义[/font][/p]  [/td] [/tr]
[tr]  [td=1,1,50%]  [p=30, 2, center]< [/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]小于[/font][/p]  [/td] [/tr]
[tr]  [td=1,1,50%]  [p=30, 2, center]> [/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]大于[/font][/p]  [/td] [/tr]
[tr]  [td=1,1,50%]  [p=30, 2, center]<=[/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]小于或等于[/font][/p]  [/td] [/tr]
[tr]  [td=1,1,50%]  [p=30, 2, center]>=[/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]大于或等于[/font][/p]  [/td] [/tr]
[tr]  [td=1,1,50%]  [p=30, 2, center]=[/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]等于[/font][/p]  [/td] [/tr]
[tr]  [td=1,1,50%]  [p=30, 2, center]<> [/p]  [/td]  [td=1,1,50%]  [p=30, 2, center][font=宋体]不等于[/font][/p]  [/td] [/tr]
[/table]
[/align][align=center][p=30, 2, left][font=宋体]逻辑运算用来完成逻辑(布林)操作,有两种可用的:[/font]And[font=宋体]和[/font]Or[font=宋体]。[/font][/p][p=30, 2, left][font=宋体]字符运算只有一种,即加法[/font](+)[font=宋体],用来将多个字符表达式合并成为一个:[/font][/p][p=30, 2, left]String expression one + string expression two[/p][p=30, 2, left][font=宋体]结果将会是:[/font][/p][p=30, 2, left]String expression one and string expressiontwo[/p][p=30, 2, left][b]D.[/b][b][font=宋体]向前引用[/font]Bars[/b][/p][p=30, 2, left][font=宋体]前面[/font]bar[font=宋体]的值可以用语句[/font] N Bars Ago [font=宋体]来引用,或者在值的后面用中括号括住一个数值表达式作为引用的偏移[/font]bar[font=宋体],如当前[/font]bar[font=宋体]的前面第[/font]2[font=宋体]根[/font]bar[font=宋体]的最高价,可表述为:[/font][/p][p=30, 2, left]High 2 Bars Ago[font=宋体]或[/font]High[2][/p][p=30, 2, left][b]E.[/b][b][font=宋体]时间和日期[/font][/b][/p][font=宋体][size=14.0pt][align=left][align=left][size=14pt]在[/size][/align][align=left][font=Calibri][size=14pt]PL[/size][/font][/align][align=left][size=14pt]中的时间值是以[/size][/align][align=left][font=Calibri][size=14pt]24[/size][/font][/align][align=left][size=14pt]小时制的[/size][/align][align=left][font=Calibri][size=14pt]HHmm[/size][/font][/align][align=left][size=14pt]或[/size][/align][align=left][font=Calibri][size=14pt]HHmmss[/size][/font][/align][align=left][size=14pt]格式,如[/size][/align][/align]
[align=left][p=30, 2, left]1300=1:00PM、130000=1:00:00PM。[/p][p=30, 2, left]在PL中的日期是以YYYMMdd格式,其中YYY表示自1900至今的年份,MM表示月,dd表示日。这种格式又叫EL格式。如2013年1月4日的EL格式为1130104。[/p][p=30, 2, left][b]F.[/b][b]变量[/b][/p][p=30, 2, left]变量用来存储数值、字符串或逻辑值(true/false)。存在变量中的值可在整个脚本中通过变量名称来引用,并可用在任何时间有脚本改变。变量使用前需要先声明。更多信息,请看关键字Variable[/p][p=30, 2, left][b]G.[/b][b]数组[/b][/p][p=30, 2, left]数组是多元素的变量,更多信息,请看关键字Array[/p][/align]
[/size][/font][/align]

页: [1]