今天我开始讲easy language
要开始编程,要先对编程有正确的认识,作为大学里面教高级语言编程的专业教师我一直对我的学生们说:只要会说话,就一定会编程。这话的来源是即使是大学里面的计算机软件专业的学生,有相当大的比例对编程心存恐惧,并且真的有相当的比例在大学毕业的时候无法独立编程。
大学的软件专业学生尚且如此,对于非专业的各位读者来说,编程仿佛是更加遥不可及的事情。
只要会说话,就一定会编程。不要把编程想像为繁多的术语和语法,编程就是人和计算机之间沟通的语言而已,区别是计算机相对于人要弱智的太多太多,你不妨把计算机当作4岁的孩子,用一些简单的明确而非模糊复杂的语句跟他沟通就好。
而每一种计算机语言,我都把它分为两个部分,第一是逻辑控制,第二是功能库。
用类比让大家更明白
自然语言:玩累了咱就去吃饭
简单明确的语言:如果孩子玩得累了,那么我们就带着孩子去吃饭。
简单明确的英语:if the kid feels tired then we take him to dinner.
easy language: if kidfeeling>=tired then kid.eat();
在这个最简单的语句里面
if then 就是逻辑控制语句 kidfeeling 和kid.eat()是easy languge提供的返回孩子状态和提供孩子功能的功能库。
事实上编程就是不断的用逻辑控制语句来左右这种语言所提供的所有功能而已。而这种语言提供的功能和对功能的控制能力决定了你能共同过他让你的计算机做到哪些事情,做多大的事情。
每一种计算机语言都有自己的设计目的,比如说VB是用来快速开发,VC用来进行系统底层的编程,ASP.net用来快速构建WEB应用,为了实现他们的设计目的,每种语言配备完整这种目的的丰富的功能库。
easy language的设计目的是为交易策略开发者提供将自己的思想和算法转化为交易策略的人机接口,因此easy language的功能库全是围绕着交易策略开发者的策略开发、数据处理、数学运算、测试、显示绘图、下单等跟交易直接相关的功能设计,提供了交易者和交易策略开发者所需的绝大多数功能。
我一直认为,对每种语言功能库我们只需要有纲要性的了解,知道大致都存在那些功能可为我所用即可,一旦需要用到再做深入了解。而学习的开始内容,要选择从逻辑控制开始。第一个easy language程序
easy language可以调动几乎所有的tradestation平台资源和功能,可以生成指标、策略、扫描和交易系统等等。
但是根据我对ts的认识,我认为我们应该从这些之外开始,从数据统计开始。
所以我们的第一个程序将是这样的:这个程序的功能是对某个特定的图表数据进行统计,将以下信息在图标上以数字的形式返回给我们的眼睛,这些数据是当前图标有多少根k线,多少是阳线,多少是阴线,阴阳的比例各占多少,在当前图表上,每根k线的涨幅之和的累积是多少?1 当前图标有多少根k线
这个指标简单,重要的是思路:当我们面临一个问题的时候,解决问题的思路。比如说我们在进行蓝球赛你拿到了球,球赛是以分数记输赢,因此得分是关键目标,因此,拿到球的你应该根据自己所处的位置,队友所处的的位置,你和队友面临的防守等因素作出判断,是你自己带球突破上篮,还是传给有更好机会的队友。在编程世界里,软件的工业化已经很发达,因此只要是大家都会遇到的问题,大家都会会存在的需求,在一个成熟的软件中应该早已经存在解决方法。所以,我在们tradestation里面面临一个问题的时候,首先要想这个问题是我独有的,还是已经大家都会遇到的,如果是大家都会遇到的,那么就应该选去看一看tradestation平台的easylaguage里面是不是已经给出相应的解决方案。
那么,针对要查看当前图表有多少根k线这个基本问题的时候,我们要先去查看easylaguage的文档,而文档用我们专业的描述实际上应该叫做专家系统,熟练使用一个成熟软件的帮助文档就相当于有一个专家团队在你身边一样。
文章最初级的应用是在帮助文档的索引和搜索中输入简单的关键词,因为当前我们要查看图表中的k线数,因此关键词可以归纳为bar(价格线/条) number(数量) count(计数)
很容易我们可以找到barnumber函数
他的说明如下
BarNumber (Function)
Disclaimer
The BarNumber series function assigns a reference number to each bar after MaxBarsBack is satisfied.
Syntax
BarNumber
Returns (Integer)
A positive numeric reference value for each bar on the chart.
Parameters
None
Remarks
MaxBarsBack is the minimum number of referenced historical bars required at the beginning of a chart to begin calculating trading strategies, analysis techniques, and functions. For example, a 10-bar moving average would require a MaxBarsBack setting of 9 to calculate, which is 9 historical bars and the current bar.
Since BarNumber is based on MaxBarsBack, if there are 500 bars in a chart, with a MaxBarsBack setting of 50, the next bar after the 50th bar on the chart moving left to right, will be BarNumber = 1. The last bar on the chart (most recent) will be BarNumber = 451.
BarNumber is often used to identify a particular bar or number of bars because of some special occurrence or situation that you want to test or factor into your analysis.
The BarNumber function is similar to the reserved word CurrentBar. However, CurrentBar does not allow previous bar references: BarNumber[5](of five bars ago) is correct, however, Currentbar[5] is incorrect and does not work.
Examples
Assigns the BarNumber for each bar to Value1, then plots Value1:
Value1 = BarNumber;
Plot1(Value1, "BarNum");
Assigns the BarNumber to Value1 when Condition1 is true, and assigns the number of bars since Condition1 occurred to Value2:
if Condition1 then
Value1 = BarNumber;
if BarNumber > Value1 then
Value2 = CurrentBar – Value1;
我们可以看到在这个帮助系统里面,对每一个函数,都给出了拼写,参数定义,注意事项和使用实例
ok现在我们知道barnumber代表了当前图表中的k线数-maxbarback(这个运算运算向前引用的k线数)
所以barnumber+maxbarback就可以得出当前图表中的k线数
那么下一个问题是如何把这个数字显示出来,在tradestation中,有足够的方式来显示信息,可以是文字,也可以是图形和线条,对于当前的例子,我们希望他返回的是一个数字,因此我们还需要去找在ts中如何显示数字。除了使用帮助系统,还有一个更方便的工具,ts辞典,当你打开或者新建一个easylanguage文档,你可以看到工具栏上的这个图标,点击之后打开辞典,可以看着常用的分类来查看,按照例子的情况,我们要查看text_drawing分类。 很快我们可以根据英文字面意思找到text_new()方法,并且通过文档了解他的拼写规则
ID = Text_New(Date, Time, Low, "Key");
所以我们的程序就是这样子
value1=barnumber+maxbarsback;//这是将我们要求的的结果赋值给value1,以便于后面的引用
id=text_new(date,time,value1,"barnumber");
我们把这段代码放进编译器看看,我们要在ts菜单file-new-window-easylanguage-indicator或者默认的左侧快捷工具栏
但是编译会出错“word not recognized be easylanguage” 原因是id没有事先声明,在easylanguage里面value1 condition1是特殊的变量,不需要声明就可以使用,其他任何变量需要事先声明
而且数据类型的转换需要显式执行,也就是不需要用转换语句而不能希望编译器帮你转换执行的意思。
因此修改过的程序如下
var:id(-1),str("");//事先定义两个变量id代表画出的字符的编号默认值为-1,str为字符型参数默认值为空格。
value1=barnumber+maxbarsback;//这是将我们要求的的结果赋值给value1,以便于后面的引用
str=numtostr(value1,0);//numtostr是将数字转化为字符串,0是保留小数点后0位。
id=text_new(date,time,close,str);//在收盘价上画出k线数。
编译成功
打开一个图表显示行情,然后插入这个indicator,效果如下 2145这个数就是当前打开的图表中的k线数,这里面有一个重点,就是正如大家所看到的,easylanguage程序在默认状态下是每一根k线运算一次!
程序虽小,但是涉及到了参数声明,如何找到所需函数,如何在图表中显示
下面我们再进一步
统计一下这2000多k线中,阴线和阳线的数量
我们只需做一点点修改
var:id(-1),idyang(-1),idyin(-1),str(""),stryang(""),stryin("");//事先定义两个变量id代表画出的字符的编号默认值为-1,str为字符型参数默认值为空格。增加了几个变量
value1=barnumber+maxbarsback;//这是将我们要求的的结果赋值给value1,以便于后面的引用
if close>open then value2=value2+1 else value3=value3+1;//根据收盘价与开盘价的比较累加阳线和阴线的数量,
str=numtostr(value1,0);//numtostr是将数字转化为字符串,0是保留小数点后0位。
id=text_new(date,time,(high+low)/2,str);//在收盘价上画出k线数。
idyang=text_new(date,time,high,numtostr(value2,0));//在最高价显示阳线数量
text_setcolor(idyang,red);//设置阳线数量为红色
idyin=text_new(date,time,low,numtostr(value3,0));//在最低价显示阳线数量
text_setcolor(idyin,green);//设置阴线数量为绿色,便于查看
想了解更多请登录:http://www.hylt.net/vb/showthread.php?t=14711 |