Powerlanguage中的语句 声明语句 赋值语句 流程控制语句if ... then ... 输出语句写一个均线指标回顾
上一篇我们介绍了Powerlanguage的程序运行逻辑,使用到的时间序列数据以及Powerlanguage的语言基础。本篇我们将继续介绍:
Powerlanguage中的语句
写一个简单的均线指标
在第二天的程序交易工具中我们已经学习了程序编辑器中用户可以创建三类不同程序,依次为函数、指标和信号。所有这三类程序都是由一条一条的语句(statements)构成。语句是组成程序的基本单位,每一个语句使用;
来结束。典型的Powerlanguage语句有4类。
声明包括了输入参数声明和变量声明。
关键字inputs
代表这是一条输入参数声明语句(使用input
也可以),声明与具体参数间使用:
分隔,参数名称为price
,初始化值为close
,即收盘价,当然这里也可以是数值,字符串。
var: ma1(0);
变量声明与输入参数声明类似,var
是变量声明关键字,vars,variables
也可以达到同样效果。ma1
是变量名称,0为初始化值。MC为了方便预定义了数值变量value1~value99
,逻辑变量condition1~condition99
,不过我个人很少使用,因为这些变量取名没有意义,很难通过变量名知道这个变量的作用,这样写出的程序可读性不好。除了标准变量,MC中还可以使用数组变量
Arrays
声明数组,WeeklyHighs[52](0)
定义了数组大小为52,初始值均设定为0。
赋值语句就是把一个值赋给另外一个变量。
ma1=AverageFC( price, lens);
上述语句将函数AverageFC
的输出值赋给变量ma1。
程序交易中存在大量的条件判断,它们都是通过流程控制语句来完成。
上述语句代表如果收盘价跌破前一K线最低价就全部多单平仓。如下语句则是if...then...else
组合。代表如果收盘在20均线上将编号plot1的绘图颜色设为红色,反之为绿色(后面我们会介绍绘图语句)。
if Close > Average(Close, 20) then
SetPlotColor(1, Red);
Else
SetPlotColor(1, Green);
如果满足条件时需要执行多条语句,那么此时需要使用begin...end
关键字。所有begin...end
中的每一个语句都需要用;
结束,同时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
函数的输入值。下面再来看一个常见的循环语句:
代码中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
来完成修改。除了绘图,程序编写过程中我们经常还会通过打印输出来进行程序验证,此时就需要使用打印语句。
除了上面介绍的绘图,打印输出语句。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中的基本语句,并用学到的知识创建了一个指标,并应用到图表中。明天我们将介绍更多的指标编写方法,不见不散!
联系客服