打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
说人话之程序交易语言——Powerlanguage/Easylanguage语法(下)

Powerlanguage中的语句   声明语句   赋值语句   流程控制语句if ... then ...   输出语句写一个均线指标回顾

上一篇我们介绍了Powerlanguage的程序运行逻辑,使用到的时间序列数据以及Powerlanguage的语言基础。本篇我们将继续介绍:

  • Powerlanguage中的语句

  • 写一个简单的均线指标

Powerlanguage中的语句

在第二天的程序交易工具中我们已经学习了程序编辑器中用户可以创建三类不同程序,依次为函数、指标和信号。所有这三类程序都是由一条一条的语句(statements)构成。语句是组成程序的基本单位,每一个语句使用;来结束。典型的Powerlanguage语句有4类。

声明语句

声明包括了输入参数声明和变量声明。

inputs:price(close);

关键字inputs代表这是一条输入参数声明语句(使用input也可以),声明与具体参数间使用:分隔,参数名称为price,初始化值为close,即收盘价,当然这里也可以是数值,字符串。

var: ma1(0);

变量声明与输入参数声明类似,var是变量声明关键字,vars,variables也可以达到同样效果。ma1是变量名称,0为初始化值。MC为了方便预定义了数值变量value1~value99,逻辑变量condition1~condition99,不过我个人很少使用,因为这些变量取名没有意义,很难通过变量名知道这个变量的作用,这样写出的程序可读性不好。除了标准变量,MC中还可以使用数组变量

Arrays: WeeklyHighs[52](0), WeeklyLows[52](0);

Arrays声明数组,WeeklyHighs[52](0)定义了数组大小为52,初始值均设定为0。

赋值语句

赋值语句就是把一个值赋给另外一个变量。

ma1=AverageFC( price, lens);

上述语句将函数AverageFC的输出值赋给变量ma1。

流程控制语句if ... then ...

程序交易中存在大量的条件判断,它们都是通过流程控制语句来完成。

if close<low[1] then sell next bar at market;

上述语句代表如果收盘价跌破前一K线最低价就全部多单平仓。如下语句则是if...then...else组合。代表如果收盘在20均线上将编号plot1的绘图颜色设为红色,反之为绿色(后面我们会介绍绘图语句)。

if Close > Average(Close, 20) then
SetPlotColor(1, Red);
Else
SetPlotColor(1, Green);

如果满足条件时需要执行多条语句,那么此时需要使用begin...end关键字。所有begin...end中的每一个语句都需要用;结束,同时end之后也需要使用;来结束。

If marketposition=1 then begin
Buy next bar at entryprice+100 limit;
Buy next bar at entryprice-50 stop;
End;

接下来再看一个更复杂的例子,如果收盘价在20均线上,将均线(编号Plot1)颜色设为红色,同时发出Alert;反之收盘价没有在20均线以上,则均线(编号Plot1)颜色设为绿色,同时发出Alert。

if Close > Average(Close, 20) then begin
SetPlotColor(1, Red);
Alert('Close Above Average');
End Else begin
SetPlotColor(1, Green);
Alert(“Close Below Average”);
end;

这里的Alert是一个函数,发出警告时会在MC软件的右下方弹出一个警告窗口,窗口中显示内容为Alert函数的输入值。下面再来看一个常见的循环语句:

Value2=0;
for Value1=1 TO 5 begin
Value2=Value2+1;
end;

代码中for ... begin..end是典型的循环语句结构。具体执行时程序会Value1=1 TO 3代表变量Value1取值1执行一次begin...end中的代码,之后变量Value1取值2再执行一次begin...end中的代码,后面依次类推,直到5循环结束。

输出语句

最典型的输出语句就是绘图,其语法为PlotN(numeric expression, 'plot name');,例如

Plot1(High, 'The High');
Plot2(Low, 'The Low');

分别代表会最高价,最低价。如果想指定绘图颜色/线宽可以通过指定更多参数完成,语法为PlotN(numeric expression, 'plot name', foreground color, backgroundcolor, width);。如果程序中想动态修改绘图属性还可以通过函数SetPlotColor, SetPlotBGColor, SetPlotWidth来完成修改。除了绘图,程序编写过程中我们经常还会通过打印输出来进行程序验证,此时就需要使用打印语句。

Print(' Symbol ', Symbol, ' Date ', Date:7:0, ' Time ', Time:4:0, 'Close ', Close);

除了上面介绍的绘图,打印输出语句。MC里面还提供了画趋势线,输出文字的函数,后续的学习中遇到时我们会详细介绍。

写一个均线指标

掌握了Powerlanguage语言基础以及基本语句,接下来我们就可以来试着写一个双均线指标了,在PLE中新建一个“指标”,命名为#ST_Double_MA,输入代码:

inputs:Price(close),FastLength(10),SlowLength(30);
variables:ma1(0),ma2(0);

ma1=AverageFC(Price,FastLength);
ma2=AverageFC(Price,SlowLength);

condition1=close>ma1 and close>ma2;

plot1(ma1,'Slow MA',yellow);
plot2(ma2,'Fast MA',blue);

if condition1 then begin
SetPlotColor(1,red);
SetPlotColor(2,red);
end;

上面代码中AverageFC函数完成了均线的计算。condition1使用了系统内置变量,它是一个布尔变量在收盘价站在2条均线上方时为True。plot系列函数完成了长周期和短周期均线绘制,同时指定颜色。如果收盘价站在均线上方,那么我们使用SetPlotColor函数可以修改对应均线颜色,参数1,2对应的就是之前的绘图。完成代码选择编译,之后在Multicharts图表中,按下鼠标右键,选择插入指标/信号,选择之前创建的指标#ST_Double_MA,选择确定后可以看到如下图形:

此时我们发现均线没有和K线显示在一起,这是因为K线是在子图1里面,而均线显示在了子图2所导致。右键点击鼠标,选择设置指标,再选择设置,在属性标签栏中,修改子图为1。

此时我们可以看到如下图形。

看起来我们的指标好像已经可以了,不过如果我们在图表窗口中按一下键盘中的上下键移动图形,就会发现图形显示变成了这样。

均线指标似乎没有和K线一起移动,解决该问题需要再次在指标设置中的刻度标签栏修改刻度范围为“和商品相同”,这样K线和均线将使用同一坐标。

回顾

今天我们学习了Powerlanguage中的基本语句,并用学到的知识创建了一个指标,并应用到图表中。明天我们将介绍更多的指标编写方法,不见不散!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
公式求助1000例(17)
通达信指标公式编写教程 第二节公式编写规则
:《飞狐公式编写基础》和《通达信公式教程》--2-- 指标公...
VFP常用命令详解
巧用KDJ指标,这样选股赚钱翻倍
大智慧公式入门基础知识
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服