137
国信证券交易服务团队翻译 联系邮箱:[email protected] 0 EasyLanguage 学习课程() 重要信息及披露 TradeStation 致力于服务机构和量化投资者。请知晓,量化交易一般不适用 于资源受限、投资受限、交易经验受限、低风险承受力或者无法承受低于 50,000 美元资本风险的投资者。 本书细致地讨论 TradeStation 如何帮助用户开发、测试以及优化交易策略。 但是 TradeStation 并不提供或推荐交易策略。我们只是为您提供设计策略、观察 策略历史表现的工具。我们相信这是重要信息,因此我们提醒您注意,一个交易 策略的历史仿真交易并不能保证它的未来交易成果。我们更没有推荐或招揽任何 外汇、期货、股票以及其他衍生品。本书所述仅限于举例,并不是推荐。 最后,本书涉及自动买入、卖出预警以及电子订单的处理、执行,请注意尽 TradeStation 用于交易策略的自动化并及时提交、发送、执行订单,但是偶尔 也会出现延迟,甚至由于市场波动、报价延迟、系统和软件出错、网络堵塞、电 力中断和其他因素导致失败。 TradeStation 所有权归属于 TradeStation 证券公司的子公司——TradeStation 技术有限公司所有。其他专题和 TradeStation 功能直接由 TradeStation 技术提供。 TradeStation® EasyLanguage®TradeStation 技术有限公司注册商标。文中提 到的“TradeStation”需联系上下文理解。 本书的价格图表仅用于举例,图表中的符号、分析并不代表推荐或担保。 历史表现并不代表未来结果! TradeStation 技术有限责任公司版权所有,保留所有权。

EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

  • Upload
    others

  • View
    21

  • Download
    0

Embed Size (px)

Citation preview

Page 1: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

国信证券交易服务团队翻译 联系邮箱:[email protected] 0

EasyLanguage 学习课程(译)

重要信息及披露

TradeStation 致力于服务机构和量化投资者。请知晓,量化交易一般不适用

于资源受限、投资受限、交易经验受限、低风险承受力或者无法承受低于

50,000 美元资本风险的投资者。

本书细致地讨论 TradeStation 如何帮助用户开发、测试以及优化交易策略。

但是 TradeStation 并不提供或推荐交易策略。我们只是为您提供设计策略、观察

策略历史表现的工具。我们相信这是重要信息,因此我们提醒您注意,一个交易

策略的历史仿真交易并不能保证它的未来交易成果。我们更没有推荐或招揽任何

外汇、期货、股票以及其他衍生品。本书所述仅限于举例,并不是推荐。

最后,本书涉及自动买入、卖出预警以及电子订单的处理、执行,请注意尽

管 TradeStation 用于交易策略的自动化并及时提交、发送、执行订单,但是偶尔

也会出现延迟,甚至由于市场波动、报价延迟、系统和软件出错、网络堵塞、电

力中断和其他因素导致失败。

TradeStation 所有权归属于 TradeStation 证券公司的子公司——TradeStation

技术有限公司所有。其他专题和 TradeStation 功能直接由 TradeStation 技术提供。

TradeStation® 和 EasyLanguage®为 TradeStation 技术有限公司注册商标。文中提

到的“TradeStation”需联系上下文理解。

本书的价格图表仅用于举例,图表中的符号、分析并不代表推荐或担保。

历史表现并不代表未来结果!

TradeStation 技术有限责任公司版权所有,保留所有权。

Page 2: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

国信证券交易服务团队翻译 联系邮箱:[email protected] I

目录

关于本书 ........................................................................................................................................... 1

1. EasyLanguage 是什么? .............................................................................................................. 2

2. TradeStation 开发环境(TDE) .................................................................................................. 3

TradeStation 开发环境构成 ............................................................................................. 3

编辑器 ............................................................................................................................... 4

字典 ................................................................................................................................... 4

输出栏 ............................................................................................................................... 5

语法着色器 ....................................................................................................................... 5

默认属性设置 ................................................................................................................... 6

3. 图表中 Bars 的理解 .................................................................................................................... 7

4. EasyLanguage 元素——单词,语句,表达式及标点 .............................................................. 8

单词 ................................................................................................................................... 8

语句及表达式 ................................................................................................................... 8

标点 ................................................................................................................................... 9

5. 绘图语句 .................................................................................................................................... 10

6. 指标 ............................................................................................................................................ 12

练习题:*01 The Close.................................................................................................. 13

7. EasyLanguage 文件属性设置 ................................................................................................. 16

练习题:*02 Volume ..................................................................................................... 18

挑战题 1:*03 High and Low ........................................................................................ 20

8. 数学运算 .................................................................................................................................... 21

练习题:*04 Real Body ................................................................................................. 22

9. 数学运算顺序 ............................................................................................................................ 23

练习题:*05 MidPrice ................................................................................................... 24

练习题:*06 VolWtdRange ........................................................................................... 26

10. 引用历史数据 .......................................................................................................................... 27

练习题:*07 NetChangeOsc .......................................................................................... 28

挑战题 2:*08 Bands ..................................................................................................... 29

11. 数值变量 .................................................................................................................................. 30

用户定义的数值变量 ..................................................................................................... 30

练习题:*09 Bands2 ...................................................................................................... 31

练习题:*10 NetChangeOsc2 ........................................................................................ 33

内置数值变量 ................................................................................................................. 34

12. 函数使用 .................................................................................................................................. 35

练习题:*11 Momentum ............................................................................................... 36

练习题:*12 RealBodyAvg ........................................................................................... 38

挑战题 3:*13 Envelope ................................................................................................ 40

Page 3: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] II

13. 输入值 ...................................................................................................................................... 41

练习题:*14 Envelope2 ................................................................................................. 43

练习题:*15 Trailing Hi Lo ........................................................................................... 46

14. 关系运算符 .............................................................................................................................. 49

15. 条件语句 .................................................................................................................................. 51

16. 编写预警语句 .......................................................................................................................... 52

练习题:*16 Envelope2 Alert ........................................................................................ 53

练习题:*17 Mov Avg & Bands .................................................................................... 55

17. 标示点 ...................................................................................................................................... 58

18. 批条件语句 .............................................................................................................................. 59

练习题:*18 Wide Range .............................................................................................. 60

19. If…Then…Else 及 NoPlot 语句 .............................................................................................. 62

挑战题 4:*19 Weak Close ............................................................................................ 63

20. 着色条 ...................................................................................................................................... 64

练习题:*20 MomentumPositive .................................................................................. 65

21. 引用日期 .................................................................................................................................. 67

练习题:*21 MyDay...................................................................................................... 68

22. 引用时间 .................................................................................................................................. 69

23. 逻辑运算符 .............................................................................................................................. 70

挑战题 5:*22 Parts Of Day .......................................................................................... 71

24. 策略 .......................................................................................................................................... 72

策略的下单语句 ............................................................................................................. 72

练习题:*23 Breakout ................................................................................................... 74

练习题:*24 Mov Avg Cross ......................................................................................... 79

25. 逻辑变量 .................................................................................................................................. 82

用户定义的逻辑变量 ..................................................................................................... 82

练习题:*25 Momentum Cross ..................................................................................... 84

挑战题 6:*26 Key Reversal ......................................................................................... 87

内置逻辑变量 ................................................................................................................. 88

26. 内置止损止盈 .......................................................................................................................... 89

练习题:*27 Breakout2 ................................................................................................. 90

练习题:*28 RSI OB OS ............................................................................................... 92

27. 多数据:引用多个数据集 ...................................................................................................... 94

练习题:*29 Multidata MA ........................................................................................... 95

28. 动态格式 .................................................................................................................................. 97

练习题:*30 High Volume Bars .................................................................................... 98

29. 颜色渐变 ................................................................................................................................ 100

30. 雷达屏绘图语句 .................................................................................................................... 101

练习题:*31 Real Body Avg RS .................................................................................. 102

31. 变量:获取值 ........................................................................................................................ 105

练习题:*32 Intraday H and L .................................................................................... 106

32. 变量:事件计数 .................................................................................................................... 108

练习题:*33 Streak...................................................................................................... 109

Page 4: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] III

练习题:*34 Trade Highs Lows .................................................................................. 112

33. 查看输出:打印日志 ............................................................................................................ 114

34. 查看输出:分析注释 ............................................................................................................ 115

练习题:*35 Momentum Cross2 ................................................................................. 116

附录 A ........................................................................................................................................... 119

TradeStation 开发环境 ................................................................................................. 119

附录 B ........................................................................................................................................... 123

成交量及笔数 ............................................................................................................... 123

附录 C ........................................................................................................................................... 126

参加 TradeStation 面对面现场培训课程 .................................................................... 126

附录 D ........................................................................................................................................... 127

导入本课程的实例 ....................................................................................................... 127

附录 E:挑战题答案 ................................................................................................................... 128

挑战题 1:*03High and Low ....................................................................................... 128

挑战题 2:*08 Bands ................................................................................................... 129

挑战题 3:*13 Envelope .............................................................................................. 130

挑战题 4:*19 Weak Close .......................................................................................... 131

挑战题 5:*22 Parts Of Day ........................................................................................ 132

挑战题 6:*26 Key Reversal ....................................................................................... 133

Page 5: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 1

关于本书

感谢您购买 EasyLanguage 学习课程。该自学课程以 TradeStation 两天学习、

实训课程、EasyLanguage 入门为基础。

学习目标是熟练掌握 TradeStation 革命性的交易语言——EasyLanguage。熟

练掌握不仅仅意味着可以将您的交易想法转换为 EasyLanguage 编写的分析技术

和策略,也意味着能够阅读、理解并学习其他人编写的语言。通过 35 个独立

EasyLanguage 课程的创建和修改完成学习,包括指标、标示点、着色条以及基于

规则的交易策略研究,达到这一目标。

全书的格式为:首先解释 EasyLanguage 的元素及其实现的功能,然后将根

据章节的主题详细讲述一些练习题例子。你将会被分配一些相关的挑战题,要求

您自己完成。如同实训课程,本书要求实践学习,所以希望您可以在电脑上通过

TradeStation 完成练习题和挑战题。

一般而言,EasyLanguage 全部的练习题对股票、期权以及外汇都是适用的,

与本书中的展示无关。您随时可以将您完成的练习题插入到图形分析中,尤其是

您最熟悉的领域。这将会增加熟悉 EasyLanguage 的价值,给您的新想法提供机

会。

挑战题的答案在附录中提供。我们为您提供额外的福利:每一个挑战题答案

都要可以在 http://www.tradestation.com/ELHSC 网站上以视频形式观看。

上述网站也包括了所有学习课程中创建的 EasyLanguage 文件,您可以直接

导入到您电脑上的 TradeStation。

需要强调的是,本书并不是教你如何使用 TradeStation,而是在开始课程

之前已经理解并熟悉 TradeStation,包括能够创建、管理图形分析窗口、一般的

文件、窗口、工作区和桌面管理技能。TradeStation 帮助中心的在线教程是一个

好的开端。您可以从 TradeStation 平台的帮助菜单进入或者通过网址

https://www.tradestation.com/support。

您可能购买本书作为 EasyLanguage 在线教程的辅助材料,或者因为您无法

亲自参加在线课程。无论什么原因,您现在拥有了一个教您如何使用

EasyLanguage编写您自己的一般分析技术和交易策略,并回测、自动化的教程。

再次感谢您!

TradeStation 团队

Page 6: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 2

1. EasyLanguage 是什么?

EasyLanguage 是面向交易者的程序语言,用于根据市场数据以及规则、指引

创建指标和交易策略的单词和标点符号的组合。

EasyLanguage 使用简单的、类似于英语的语言供一位交易者将交易想法描

述给另一位交易者,但是它仍然是编程语言。我们必须遵守某些规则和指南以确

保 TradeStation 能够理解并应用我们所创建的 EasyLanguage 研究。

小贴士:不要试图与 EasyLanguage 的规则抗争。

如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

标点符号的规则,将会让您在学习过程中少走弯路,极大地促进手头上的工作。

此外,从一开始形成好的语言使用习惯,将更容易理解本书所展示的练习题。

上图为在 TradeStation 开发环境中编写的交易策略。

Page 7: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 3

2. TradeStation 开发环境(TDE)

用户在 TradeStation 中创建或修改 EasyLanguage 研究时,将进入 TradeStation

开发环境(以下简称开发环境或 TDE)。TDE 运行时是一个独立的应用程序。用

户可以从 TradeStation 平台点击工具栏中的 EasyLanguage 图标进入 TDE。TDE

包括 EasyLanguage 编辑器以及其他辅助功能。

TradeStation 开发环境构成

程序编辑器:用于创建和修改 EasyLanguage 指令的全功能文字编辑器,

实现交易想法与 TradeStation 的交互。您可以创建新分析技术或者修改现有技术,

包括指标、标示点、着色条及交易策略。编辑器还包括语法检查。

字典:EasyLanguage 单词、函数等的字典;

输出栏:返回当前 EasyLanguage 文件的信息;

语法着色器:EasyLanguage 的预留单词及函数将会被自动着色;

默认属性设置:设置分析技术、策略的默认属性,如显示的颜色和风格

设置;

自动完成:EasyLanguage 编辑器的,监控您的输入,并弹出窗口显示预

留单词和函数的列表,提示您完成输入。

大纲:可以展开和折叠代码。

小贴士:您可以为开发环境创建一个快捷方式,把它放在桌面上。

Page 8: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 4

编辑器

EasyLanguage 编辑器打开已保存的 EasyLanguage 文件供您查看、修改,也

允许用户创建分析和策略。每个研究在开发环境的上方以选项卡的方式排列,用

户可以在窗口的菜单栏上点击切换窗口展示的研究。

为便于编程,用户可以通过窗口工具栏→选项打开对话框,选择“常规”选

项卡,勾选“行号”,即可在工具栏的旁边显示行号。

EasyLanguage 研究和策略在 TradeStation 平台使用之前必须要通过验证,检

查研究的语法是否符合要求。点击研究菜单栏的验证按钮或者按 F3。验证的同

时也保存研究。用户可以在状态栏查看研究验证的结果。

注意:工具栏和属性滑条主要针对高级 EasyLanguage,本书不做讨论。

字典

字典包含了所有预留单词和函数。用户可以点击右边栏的字典选项卡,或者

通过勾选菜单栏的视图→字典,或点击

工具栏的字典按钮,让字典悬停在窗口

右侧。字典中丰富的资源帮助用户记住

成千上百的预留单词和函数。

字典分为三个窗格,左侧的对象窗

格按照功能分类方便您查找。点击某个

类别,它的下属成员将会出现在成员窗

格;在对象窗格点击某个类别或在成员

窗格点击某成员,信息将会在右下方的

描述窗格中展示。描述窗格通常会有链

接到其他信息。

例如,右图所示的是在对象窗格中

选择 dataaccess.ell 类,在右侧成员窗格

中选择 loadProvider,右下方的描述窗格

将显示 loadProvider 的相关信息。

Page 9: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 5

此外,用户可以使用能够搜索框

查找某个单词,然后将它直接拖到编

辑器中。使用搜索框,只需输入完整

的单词或部分,单击搜索框右边的“转

到”按钮,结果会显示在对象窗格中。

输出栏

点击开发环境底部的输出标签可

激活输出栏。输出栏在验证时显示语

法错误,帮助用户快速找到错误。验

证确保用于创建分析技术或策略的语

法格式与 EasyLanguage 的要求一致。

如果没有发现错误,将显示“0 错误,0 警告”,分析技术或策略验证成功。在

验证过程中,分析技术或策略会被保存。如果被验证的分析技术或策略在

TradeStation 应用,如在图形分析窗口或雷达窗口显示,分析技术或策略将会

被重新计算。

语法着色器

语法着色器用于识别特定单词分类,如预留单词、函数、文本和其他使用特

定颜色设置的类型。该功能有助于实现识别验证出现的拼写或语法错误等问题。

EasyLanguage 默认使用内置的颜色规则。默认规则如下:

EasyLanguage 类型 默认颜色

属性 深灰色

注释 绿色

函数 紫色

一般语句和指令 黑色

引用字段 蓝色

预留单词 蓝色

非执行单词 绿色

文本字符串 深红色

Page 10: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 6

默认属性设置

默认属性设置用于设置已保存或

新建的研究显示方式或元素计算的

一般属性。

右图所示为指标的属性设置对

话框。在已经验证过的研究编辑器窗

口点击右键,选择“属性”;或菜单

栏的“文件”,选择“属性”,打开

属性设置对话框。如图所示,对话框

提供了样式、颜色、预警等的选项卡。

后文在练习题中,我们将进一步探讨

属性设置对话框。

注意:在设置新分析技术或策略

的属性前,需要进行验证。

属性设置可以在开发环境中打

开,也可以在其应用窗口中打开,如图形分析或雷达屏窗口。

Page 11: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 7

3. 图表中 Bars 的理解

我们在使用 EasyLanguage 时,需要记住一个基本的原则是 TradeStation 以

Bars 为基本单位(而不是成交量,分,天),即以图表上的 Bars 为分析基础。

TradeStation 从上至下执行 EasyLanguage 指令,从左至右逐个 Bar 处理,直

到最大索引数(MaxBarBack)。

注意:MaxBarBack,所有引用历史数据的分析技术在计算之前需要设定初

始值,限定最大的数据获取量,这个值叫做 MaxBarBack,即在初次计算时引用

的最多历史数据量。

图表中每个 Bar 包含一系列可被用于 EasyLanguage 研究的数据点。以下是

Bar 包含数据点列表:

Open(开盘价)

High(最高价)

Low(最低价)

Close(收盘价)

Date(日期)

Time(时间)

Volume(成交量)

上涨成交量 (Volume on Up Ticks)

下跌成交量 (Volume on Down Ticks)

Ticks(成交笔数)

上涨笔数 (Number of UP Ticks)

下跌笔数 (Number of Down Ticks)

持仓

EasyLanguage 中可用的还有:

期权相关数据:

隐含波动率

期权成交量(买权、卖权)

期权持仓

基本面数据

交易委托

Page 12: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 8

4. EasyLanguage 元素——单词,语句,表达式及标点

单词

同其他语言一样,EasyLanguage 由单词组成,EasyLanguage 单词一般分为

五类:

预留单词:由 EasyLanguage 预先定义的单词,如 Open, Close, Plot1 及

Buy,预留单词 High 表示 Bar 的最高价

函数:由单词指定访问 EasyLanguage 研究存储的公式,如 Average, RSI

以及 Lowest 均为 EasyLanguage 的函数

用户定义单词:用户在编写过程中创建的,此类单词可用于图形命名、

输出、变量名

非执行单词:此类单词为了提高可读性,在执行过程中将会被跳过,如

of, the, at 等

属性:用于设置分析技术或策略的执行、计算规则,如 LegacyColorValue

及 IntraBarOrderGeneration 均为属性词。

注意:EasyLanguage 不区分大小写。但是请记住,编写时区分大小写将增强

可读性。

语句及表达式

单词是所有语言的基本组成部分。但是,熟练一门语言需要正确使用词组,

形成表达式及语句。所有的 EasyLanguage 语言工具和规则类似于英文口语的句

式表达。

语句可以表达一个简单的想法和一系列的想法。下面是两个最常用表达类型:

数值表达式:指向或计算出数值。如,预留单词 High 为数值表达式,它

代表一系列数值;此外,Volume * 2 和 (High–Low) * .5 也属于数值表达式。

逻辑表达式:即比较两个数值,得出真/假的结论。例如:

Close = Open 收盘价等于开盘价;

High > High[1] 最高价大于一个 K 线的最高价;

Page 13: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 9

Date <> Date[1] 日期不等于前一个 K线的日期。

四个常用语句为:

Input declaration(输入声明) 语句;

Variable declaration(变量声明)语句;

Variable assignment(变量赋值)语句;

面向分析技术:Plot (图形)语句

语句顺序

EL 要求在验证前进行如下顺序的声明,这是一个普适的原则。

Input declaration 语句;

Variable declaration 语句;

Variable assignment 语句;

面向分析技术:Plot 语句

面向策略:Buy and Sell 语句

注意:在编程过程中,也有使用顺序时的实例。

标点

熟练掌握 EL 的关键一步在于通盘理解标点使用方法,以下是 EL 常用标点

的使用方法(开始 EL 学习,这些标点在全书中都将会用到):

; 分号,单个语句结束;

( ) 小括号,设置初始值;

, 逗号,分隔项目;

[ ] 中括号,用于指向 K 线历史去数据,或替换图形,或用于从数组中提取

数据;.

“ ” 引号,文本或标签(如,”plot name”);

: 冒号,用于声明;

{ } 大括号,多行注释,大括号中间的语句不执行;

// 双斜线,单行注释,其后的语言不执行,仅供注释;

注意:回车、空格、段落缩进不影响执行,一般仅为提升可读性。

Page 14: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 10

5. 绘图语句

绘图语句指导 TradeStation 在图形分析窗口绘图或在雷达屏、下单栏的单

元内放置图形,可用于 TradeStation 指标、标示点、着色条研究,但在策略中不

使用。一个分析最多可同时包含 99 个绘图语句。

例如,如果你想创建指标并希望这个指标在图表上绘制一条线,你如何告诉

TS 画这条线?你不能简单地输入“ TradeStation, please plot this line.”,使用

EasyLanguage 会有些许不同。

单指标的绘图语句结构为:

PlotN(数据表达式, “图形名称”);

其中,N=1,2,…,99

简单绘图语句的示例:

Plot1(Open, “The Open”);

Plot1 表示画出此分析技术的第一个图形。

数据表达式是图形的数据源,上述示例中 open 是图形的值,或图形 y 轴上

呈现的数据,实例绘制每一个 Bar 的开盘价。The Open 是图形的名称,在写绘图

语句时是非必需的,但是我们建议在每个图形创建时,给出图形名字。为什么呢?

当修改有多个绘图语句的分析技术时,如修改图形形式、颜色,如果命名图形,

将更容易找到这个图形。下图为指标属性对话框,包含一个指标、两个已命名的

图形。注意对话框中图形区域的 Hi 和 Lo。

下图显示了同样的指标属性对话框,但图形没命名。图中图形的名字显示为

Page 15: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 11

plot1, plot2,而不是上面的 Hi,Lo。

在图形分析数据端和数据窗口,图表命名将更容易找到其对应的数据。

Page 16: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 12

6. 指标

TradeStation 由一系列分析技术、策略组成,包括指标、标示点、着色条。这

些均是 EasyLanguage 编写。此外,TradeStation 是一个开放的开发平台,允许用

户通过开发环境来查看、修改内置的分析技术,用户可以通过查看他人的成果来

学习。查看 TradeStation 内置的研究,用户可以:

对研究如何以及为什么执行有大致的了解;

学习中少走弯路;

获得新的分析思路。

小贴士:如果修改内置的分析技术,您可以用不同的名称保存研究,这样您

可以保留并使用原先的文件以及修改后的文件。

在课程学习中,我们将从指标开始创建案例。TradeStation 中的指标是使用

Bar 中的数据进行数值计算,并在图形上画出计算值。指标一般画成线性图、直

方图或二者的结合。

首先,打开 TradeStation 平台,在交易应用程序中点击 EasyLanguage 图标,

打开开发环境。点击文件→新建→指标,或直接点击工具栏的新建按钮,选择“指

标”,来创建新的指标。

Page 17: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 13

练习题:*01 The Close

学习内容:在指标中使用作图语句。

描述:该指标将使用图表中 Bars 的收盘价作线图。

在新建指标对话框中,在名称栏输入#01 The Close 以命名指标。

注意:本课程中创建的 EasyLanguage 研究以#加数字开头,再加一两个描述

词语,如#01 The Close。注意相应的研究以*开头,而不是#,本书中的所有研究

都可以在 http://www.tradestation.com/ELHSC 找到。

如前所述, 研究存储在同一个文件中,这些研究可以从 TradeStation 平台上

直接导入;在学习中创建的研究以#开头,与*开头的导入文件区别开来。

在课程结束后,用户可以自行编写分析技术和策略,我们建议用户创建自己

的桌面、工作区,便于连续使用。用户可以使用名字的首字母加一些强调词来命

名这些研究,以将用户创建的文件与第三方提供的研究区别开。

在选择模板下拉菜单中,选择 None,如下图所示:

小贴士:在创建分析技术时,开发环境提供一系列模板来辅助理解分析技术

的格式和结构。我们建议您在空闲时间实验,但是为了本课程的需要,我们从空

的编辑窗口开始。

点击“确认”按钮,创建新指标。在编辑窗口输入

Plot1(Close,”Close”);

Page 18: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 14

在用户输入时屏幕会出现一些提示。在输入 Plot 时,编辑器的自动完成将会

出现与用户输入匹配的单词列表;用户可以自行输入单词,或在自动完成框中找

到并双击对应的单词或按 enter 键,实现自动完成。

另外,当输入左边括号时,自动完成会展示工具浮窗,提示用户预留单词或

函数的规则信息。这个功能在后文我们会进一步探讨。

分析这个指标:

Plot1 告知 TradeStation 这是此分析技术的第一个图形。记住,一个研究可以

同时容纳 99 个图表。

Close 是作图的数据表达式,直到 TradeStation 使用图表上每个 Bar 的收盘

价作图。

“Close”是图形的名称,通过双引号将其与数据表达式 Close 区分开来。数据

表达式和图形名称在括号中,整个绘图语句以分号结束,这就是标准的

EasyLanguage 表述。

检查编写的程序,然后验证该程序。点击工具栏的验证按钮 ;或在编辑

器窗口点击右键,选择验证;或按 F3,打开验证功能。如果编写的程序正确,将

会在状态栏出现蓝字“已验证”。在图形上加载指标之前要查看新建或修改的研

究是否已经通过验证。状态栏也包含蓝字“保存”。无论研究中是否存在错误,

都会在验证时进行保存。

此外,如果验证无误,将会弹出如下提示信息。

上图用于提示用户此研究正在被图表(雷达屏或期权窗口)使用,修改此研

究将自动重新计算并应用于图表。提示框下方可以选择此条信息是否在以后不再

显示。

Page 19: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 15

如果出现语法错误,在输出栏中会有显示。修正这些错误然后再验证这些修

改。

小贴士:输出栏可以设定自动隐藏。如果选择自动影藏,用户可以在输出栏

上点击输出选项卡使它保持可见。用户也可以点击视图→工具栏→输出,或在右

上方的空白处点击右键,选择是否隐藏输出栏。

小贴士:文件可以不验证而保存。如果因为当前工作文件尚未完成,您不打

算进行验证,您可以点击菜单栏的文件→保存或另存为,文件将以现有状态进行

保存,您可以在之后继续完成。

在加载指标#01 The Close 前,用户应该熟悉如何修改属性设置。

Page 20: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 16

7. EasyLanguage 文件属性设置

创建 EasyLanguage 研究时,用户可以设置默认属性,如颜色、样式和预警。

在 TradeStation 平台上,被称为分析技术或策略的属性修改。

在编辑器窗口点击右键,在快捷菜单中选择“属性”,打开属性设置对话框。

对话框包含了 8 个选项卡,在此作出的修改将会被保存并应用。我们尝试修

改#01 The Close 指标。在图形式样选项卡,选择更粗的线条;在图形颜色选项卡

将图形的颜色由红色改为蓝色;刻度线选项卡中将刻度位置修改为“与标的物数

据相同”;点击确认按钮,再次验证指标。

注意:指标默认属性为右侧坐标轴,将指标绘出的图形放置在现有图形的下

方,以右侧坐标轴为刻度。在练习中,我们将其修改为“与标的物数据相同”,

绘制的图形将会与现有图形叠加。

学习重点:在创建 EasyLanguage 文件时,记住一下顺序:

验证→属性设置→验证

创建并验证分析技术后,用户可以设置属性。分析技术经过修改后,必须再

次验证。如果没有再次验证,修改将不会被应用。

现在回到 TradeStation 平台,打开图形并插入指标#01 The Close 绘图。用

户在雷达屏、图形分析、期权窗口修改属性。点击右键,选择“设置分析技术”,

Page 21: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 17

在弹出的对话框中点击“设置”,在图形颜色标签卡,可以将图形从蓝色修改为

红色。用户可以点击选项卡下方的“默认值”,设置#01 The Close 的默认属性,

在此我们不作讨论。

小贴士:TradeStation 的不同分析技术有其不同的属性设置对话框,策略也

有专属对话框。用户可以通过开发环境的编辑器或者 TradeStation 平台的分析技

术应用窗口打开属性设置对话框。

#01 The Close

Page 22: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 18

练习题:*02 Volume

学习内容:在指标中使用作图语句。

描述:该指标作出成交量(份额或合约数)或 tick 数(交易)的图形,具体

取决于图形的格式或属性设置。

在开发环境,点击文件→新建→指标,或直接点击工具栏的新建按钮,选择

“指标”,来创建指标#02Volume。

在编辑器窗口输入

Plot1(ticks,”Volume”);

注意:大部分情况下,预留单词“ticks”将返回期望交易量或交易笔数。

用户使用的图形类型或符号的不同,其他成交量相关的预留单词可能更加合适。

详情请查阅附录 A-成交量与。

验证指标,然后打开属性设置对话框(在文件窗口点击右键,选择属性),

点击刻度选项卡。与#01The Close 不同,#02Volume 的默认属性仍为“右侧坐标

轴”,如果您需要以子图形式绘制,此处我们不作修改。将图形样式修改为“直

方图”,图形的粗细调到更粗。在字体、颜色选项卡中的“绘图”窗格,显示图

形名称“Volume”,这是命名的好处。

如果指标中包括多个绘图语句,在“绘图”窗格将会显示每个图形的名称。

再次强调,虽然图形的名称并非不可缺,但是命名图形将带来很大便利,尤其是

在指标中存在多图形的情况。

点击对话框的“确认”按钮,退出对话框。再次验证指标以保存修改。

返回到 TradeStation 平台,在之前创建的图形分析窗口,插入新建的

#02Volume 指标。现在图形中应该包含了#01 The Close 及#02Volume 两个图形,

#02Volume 以子图形式显示在图形的下方。

Page 23: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 19

#02Volume

现在您已经准备好接受第一个挑战题了,记住在挑战题中自己尝试。

Page 24: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 20

挑战题 1:*03 High and Low

学习内容:在指标中使用作图语句。

描述:该指标作出成交量(份额或合约数)或 tick 数(交易)的图形,具体

取决于图形的格式或属性设置。

属性设置为:

图形为线性,显示与价格数据相同的子图。

提示:这个指标需要两个绘图语句,最高价的预留单词为 High,最低

价的预留单词为 Low。

小贴士:如果图形分析窗口在插入指标后太拥挤,您可以从图表中删除一些。

记住,您验证和保存之后,这些从图表中删除的图形仍然存在。

注意:挑战题的答案参见本书的附录,视频详见网站:

http://www.tradestation.com/ELHSC

Page 25: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 21

8. 数学运算

EasyLanguage 可以计算加减乘除,数学运算符如下:

加 +

减 -

乘 *

除 /

下一个练习题为 Real Body,在绘图语句的数据表达式中使用数学运算符。如

果您熟悉 K 线图,您将会理解开盘价和收盘价的关系。如下图所示,在 K 线图

中,开盘价、收盘价以箱体(称为“real body”)形式表现。练习题将展示,如

何使用 EasyLanguage 将分析可视化,例如将 K线图分析转换为数学运算。

Page 26: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 22

练习题:*04 Real Body

学习内容:在绘图语句的数据表达式中使用数学运算符。

描述:该指标绘制出收盘价、开盘价的差值。若收盘价大于开盘价,差值为

正;反之为负。这与 K 线图“real body”的绿色、红色一致。

在开发环境中,创建新指标#04 Real Body,输入下列语句:

Plot1(Close-Open,"RealBody");

如果 K线图为上涨(收盘价高于开盘价),公式将会返回正值;若为下跌(收

盘价低于开盘价),结果为负值。指标绘制出的图形会有振荡趋势。因此,在图

形绘制中加入“零线”作为基准会更加便利。我们称基准线为“Doji”。

Plot1(Close-Open,"RealBody");

Plot2(0,"Doji");

验证指标,然后设置指标的属性(在编辑器窗口点击右键,从快捷菜单中选

择属性)。该指标绘制出的是振荡图形,默认刻度为右边坐标轴,将图形绘制在

价格数据的下方,这是合适的。

点击图形颜色选项卡修改图形的颜色。指标绘制两个图形,RealBody 和 Doji,

修改这两个图形的颜色,点击“确认”按钮,关闭对话框。再次验证指标,并将

指标插入图表中。结果如下:

#04 Real Body

Page 27: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 23

9. 数学运算顺序

编写 EasyLanguage 研究时,在一个表达式中可能用到多个数学运算。因此,

理解数学运算顺序很好总要。在包括加减乘除的数学表达式中,EasyLanguage 的

运算顺序为:

先乘除,后加减;同级运算从左往右。

顺序也可以包含括号。括号内的运算先计算,再计算括号外。

1+5*3+4=20

(1+5)*(3+4)=42

1+(5*(3+4))=36

如上所述,括号的使用将改变结果。

我们来看两个解释运算顺序的练习题。

Page 28: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 24

练习题:*05 MidPrice

学习内容:在数学表达式中正确使用括号。

描述:该指标绘制每个 Bar 的中间价格。

数学公式可以用于找到每个 bar的中间价格吗?我们来看一个例子。

如果某个 Bar的最高价为 10,最低价为 4,中间价是多少?答案是 10加 4,

再除以 2,即数值 7.语句为:

High+Low /2

这样会得出正确的数值吗?我们试试。这个数值包含两个数学表达式,加和

除。尽管是从左往右进行计算,但是乘除运算先于加减运算。

按照这些规则,计算的结果为 12,这是错误的结果,因为在这个表达式中

Low将会被先除以 2,得到 2,再加上 High得到 12,即

10+4/2=10+2=12

返回正确的值,High 及 Low 必须首先进行求和运算,然后再除以 2.我们需

要在公式中增加括号:

(High+Low)/2

(10+4)/2

14/2=7

在求和运算加上括号得到我们预期的答案。

注意:使用乘法运算代替除法运算,结果是一样的。我们更推荐使用乘法运

算,因为 TradeStation 在处理除法运算时,会检查“是否被 0除错误”,这回导

致除法运算速度低于乘法运算。在上述例子中,我们可以用“*0.5”代替。但是,

如果使用“*0.33”来代替“/3”是不建议的,精度的要求要高于运算速度的要

求。

下面,我们开始编写指标。

在开发环境中,创建指标#05 MidPrice,输入:

Plot1((High+Low)*0.5,”MidPrice”);

验证指标,并在属性设置对话框中将刻度位置改为“与标的物数据相同”,

再次验证指标,并将指标加载到图形上,结果如下图所示:

Page 29: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 25

#05 MidPrice

Page 30: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 26

练习题:*06 VolWtdRange

学习内容:在数学表达式中正确使用括号。

描述:该指标计算每个 Bar 的波动范围与其成交量的乘值,形成成交量加权

的波动范围(volume-weighted range)指标。

在开发环境中,新建指标#06 VolWtdRange,输入:

Plot1((High-Low)*Ticks,”VWR”);

在上个练习题中,在表达式中使用了括号来达到预期效果。本练习题中,我

们使用括号先计算出 High 与 Low 的差值,再计算乘积。

验证指标,再设置指标属性(若需要,本练习题中不作修改),再次验证,

并将其加载到图表中。结果如下:

#06 VolWtdRange

Page 31: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 27

10. 引用历史数据

前述可能出现过,以中括号形式的引用,在引用的指标名称后加中括号[ ]。

例如:

往前 5 个 Bars 的收盘价

Close[5]

往前 12 个 Bars 的波动范围

High[12]-Low[12]

(High-Low)[12]

但不能写为

High-Low[12]

该命令将会计算当前 Bar 的最高价与往前 12 个 Bar 的最低价。

下面,我们来看一个练习题。

Page 32: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 28

练习题:*07 NetChangeOsc

学习内容:引用历史数据。

描述:该指标绘制收盘价与其往前 5 个 Bars 的波动。

在开发环境中,新建指标#07 NetChangeOsc,输入:

Plot1(Close-Close[5],”NCO”);

上述语句将计算当前收盘价与往前 5 个 Bars 的收盘价差值,并将图形命名

为“NCO”。

我们在图形中加一条基准线,命名为“0”。

Plot1(Close-Close[5],”NCO”);

Plot2(0,”0”);

验证指标,再设置指标属性(若需要,本练习题中不作修改),再次验证,

并将其加载到图表中。结果如下:

#07 NetChangeOsc

Page 33: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 29

挑战题 2:*08 Bands

学习内容:使用中括号引用历史数据。

描述:编写指标在价格数据附近画出两个带状图。

一个带状图在当前 bar 的开盘价上加以前 bar 波动范围的 50%;

另一个带状图在当前 bar 的开盘价上加以前 bar 波动范围的 50%。

记住:一个 Bar 的波动范围是最高价减去最低价,那么如何描述以前 Bar 的

波动范围?

指标绘制的图形应该叠加在价格数据上,因此刻度位置应该设置为与“标的

物数据相同”。

Page 34: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 30

11. 数值变量

数值变量是指经命名、便于查找的变量或函数。名称可用于多次调用变量或

函数,而不需要再重新编写。在前述的学习中,我们已经在绘图语句中直接使用

公式。但是,EasyLanguage 允许用户在绘图语句中不使用公式,而直接引用名称。

创建分析技术或策略过程中,经常使用一系列复杂的公式时,引用名称会很方便。

引用名称会提高编程的效率,因为命名的公式在每个 bar 中只需要被计算一次。

数值变量可以被用于:

提高运算效率;

减少输入错误;

提升可读性

注意:变量仅在其被定义的 EasyLanguage 文件中可被引用。

EasyLanguage 中有两种数值变量:内置数值变量,用户定义的数值变量。

用户定义的数值变量

EasyLanguage 允许用户定义数值变量的规则和名称。用户可以将自己的单

词添加到内置语言中。用户定义数值变量后,名称是赋予变量的描述语言。首先,

用户需要声明数值变量,然后给数值变量赋值。

变量声明语句

以下语句是定义一个名为 NetChange 的数值变量,初始值为 0:

Variables: NetChange(0);

变量赋值语句

下列语句将数值表达式赋值给变量 NetChange:

NetChange = Close – Close[1];

下面,我们来看一个有关数值变量的练习题。

Page 35: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 31

练习题:*09 Bands2

学习内容:使用用户定义的数值变量,编写变量声明语句和变量赋值语句。

描述:使用用户定义的数值变量,重新编写挑战题*08 Bands。

新建指标#09 Bands2。#08 Bands 的代码为:

Plot1(Open + (High[1] - Low[1]) * 0.5, ”HighBand”);

Plot2(Open - (High[1] - Low[1]) * 0.5, ”LowBand”);

这个指标在价格附近画出两条带状图,一条在当前 bar 的开盘价上加前一个

bar 波动幅度的 50%,另一条在当前 bar 的开盘上减前一个 bar 波动幅度的 50%。

问题:在上述语句中,哪部分是完全一样的?

答:计算前一个 bar 波动幅度的公式是完全一样的

(High[1] - Low[1]) * 0.5

因而,为了提高效率,这个公式可以从语句中删除,用一个数值变量代替。

首先,在文件窗口对变量进行声明,我们将添加一些变量。用户在声明变量时,

Var, Vars, Variable 或 Variables 都是可行的。

Vars: HalfPreRange(0), HiBand(0), LoBand(0);

上述语句声明了三个变量,并将其初始值设为 0。下一步,输入赋值语句,

给上述声明的变量赋予公式:

Vars: HalfPreRange(0), HiBand(0), LoBand(0);

HalfPreRange = (High[1] - Low[1]) * 0.5;

HiBand = Open + HalfPreRange;

LoBand = Open - HalfPreRange;

变量 HalfPreRange 在其他两个变量的计算中被引用。

现在我们来编写之前绘制图形的语句:

Vars: HalfPreRange(0), HiBand(0), LoBand(0);

HalfPreRange = (High[1] - Low[1]) * 0.5;

HiBand = Open + HalfPreRange;

LoBand = Open - HalfPreRange;

Plot1(HiBand, “HighBand”);

Page 36: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 32

Plot2(LoBand, “LowBand”);

Plot1 绘制用户定义的 HiBand 变量,即在当前 bar 的开盘价上加前一个 bar

波动幅度的 50%;Plot2 绘制用户定义的 LoBand 变量,即在当前 bar 的开盘价上

减前一个 bar 波动幅度的 50%。

验证指标,结果如下:

#09 Bands2

Page 37: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 33

练习题:*10 NetChangeOsc2

学习内容:使用用户定义的数值变量,编写变量声明语句和变量赋值语句。

描述:使用用户定义的数值变量,重新编写练习题*07 NetChangeOsc。

在开发环境打开#07 NetChangeOsc 的编辑器,如果该指标当前不是打开状态,

通过菜单栏文件→打开,选择#07 NetChangeOsc,打开编辑器。

在本练习题中我们重新编写指标,在修改之前将文件另存一份。保持#07

NetChangeOsc 为当前活动窗口,点击菜单栏文件→另存为,打开另存对话框。

将文件重命名为#10 NetChangeOsc2,然后点击确认按钮。系统将保存原来的

指标并以新名称创建一份原指标的复本。

原先的练习题语言如下:

Plot1(Close - Close[5], ”NCO”);

Plot2(0,”0”);

公式 Close-Close[5]将分两步赋值给数值变量:数值变量声明,并赋予初始

值:

Vars: NCO(0);

然后将公式赋值给变量,引用变量绘图:

NCO = Close – Close[5];

Plot1(NCO, “NCO”);

Plot2(0, “0”);

验证指标,结果如下:

Page 38: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 34

#10 NetChangeOsc2

内置数值变量

内置数值变量是在系统中已经被命名的变量。用户只需要给这些变量赋值。

系统内置 100 个数值变量,分别为:

Value0 至 Value99

Value0 至 Value99 可以被系统自动识别为数值变量,只需要赋值:

Value0 = 数值表达式;

例如,在分析技术或策略中使用 Value1 作为净波动,输入:

Value1 = Close – Close[1] ;

内置变量提供便利,但是缺乏可读性,尤其是在文件中存在多个变量的情况。

Page 39: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 35

12. 函数使用

函数是经常使用的公式(或逻辑公式),能够返回数值(或字符串、文本或

真假值)。函数可以在任何的分析技术或策略中被调用,减少了重复输入复杂公

式。

函数在所有的 EasyLanguage 规则或指令中可用

系统内置了大多数数学或统计公式,如均值、标准差

系统同样内置了很多技术分析指标,如 RSI 和 ADX

很多函数需要用户提供参数

用户可以创建函数

EasyLanguage 字典涵盖了成千上百的函数、预留单词,编写中将会节省很多

时间。例如,用户计算 20 个 Bar 的移动平均值,输入:

Value1 = (Close + Close[1] + Close[2] + Close[3] + Close [4] + Close[5] + Close[6]

+ Close[7] + Close[8] + Close [9] + Close[10] + Close[11] + Close[12] + Close[13] +

Close [14] + Close[15] + Close[16] + Close[17] + Close[18] + Close [19])/20;

是否有更简洁的方法呢?输入 average,或者将字典中的 average 拖入编辑器

中。实际上,字典中可以找到很多有用的预留单词、函数,如 RSI, ADX, DMI,随

机数等。

使用字典的另一个好处在于,字典的描述窗格提供了描述信息、参数以及返

回值。对于需要参数的函数、预留单词,名称后面的括号内注明了参数使用方法。

例如,average 函数可以用于计算移动平均,包含 price 和 length 两个参数:

Average (Price, Length)

使用 average 函数时,用户需要提供参数值。如果需要计算 14 个 Bars 的收

盘价均值,输入:

Average( Close, 14)

函数可以直接从字典中拖到编辑器窗口,在接下来的两个练习题中我们将会

使用这种方法。

Page 40: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 36

练习题:*11 Momentum

学习内容:使用用户定义的数值变量,并调用函数。

描述:该指标将绘制 10 个 bar 收盘价的动量。

新建指标#11 Momentum,本练习题将创建一个用户定义的数值变量 Mom,设

其初始值为 0:

Vars: Mom(0);

Mom=

在我们使用字典插入函数之前,我们进一步看字典。在开发环境的右侧点击

字典,也可以在工具栏点击字典按钮 。正如本书开头所述,字典的左边是对象

窗格,点击 easylanguage.ell 前

面的“+”标示,打开子分类,

查看该分类列表下的预留单

词、函数。点击此分类的任意

一个子分类,它的成员将会出

现在成员窗格。例如,点击

Date and Time ,成员窗格会

出现 CurrentTime, Dayofweek

以及 Time 等成员。再点击其

中一个成员,如 Date,在描述

窗格将会出现相关信息。

我们也可以使用搜索框

来寻找 Momentum 函数。在

搜索框中输入”Momentum”,

点击箭头开始搜索。在对象窗格汇总会出现 Momentum 函数,点击这个函数,描

述窗格将展示相关信息,包括需要提供的参数。

将 Momentum 函数拖到编辑器中。

现在,在函数 Momentum 的括号内输入参数。当我们从字典中将函数拖入编

辑器时,左边的括号由系统自动完成,同时出现浮窗提示输入价格、长度两个参

Page 41: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 37

数。完成变量赋值:

Vars: Mom(0);

Mom = Momentum(Close, 10);

添加绘图语句,将 Mom 以及零线绘制在图表中:

Vars: Mom(0);

Mom = Momentum(Close, 10);

Plot1(Mom, “Momentum”);

Plot2(0, “0”);

验证指标后,结果如下:

#11 Momentum

Page 42: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 38

练习题:*12 RealBodyAvg

学习内容:使用用户定义的数值变量,并调用函数。

描述:该指标将绘制 10 个 bar 收盘价与开盘价差值的移动平均,正如之前

绘制的*04 RealBody。

新建指标#12 RealBodyAvg,声明两个变量 RB(realbody)及 AvgRB(realbody

average):

Vars: RB(0), AvgRB(0);

第一个赋值语句计算 Close – Open:

Vars: RB(0), AvgRB(0);

RB = Close – Open;

第二个赋值语句用到 average 函数,可在字典中找到,然后拖入编辑器中。

在输入第二个变量的赋值语句 AvgRB=,将字典中搜索结果拖入编辑器中。浮窗

提示输入参数值,输入:

Vars: RB(0), AvgRB(0);

RB = Close – Open;

AvgRB = Average(RB,10);

Average 函数的 Price 参数支持任意的数值变量。在本练习题中我们使用变

量 RB,即被赋值 Close – Open 的数值变量。

添加两个绘图语句,其中一个绘制箱体均值,另一个是零线。完整的语句为:

Vars: RB(0), AvgRB(0);

RB = Close – Open;

AvgRB = Average(RB,10);

Plot1(AvgRB, “AvgRB”);

Plot2(0, “Doji”);

无需改变默认的属性设置,验证指标,结果如下:

Page 43: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 39

#12 RealBodyAvg

Page 44: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 40

挑战题 3:*13 Envelope

学习内容:使用用户定义的数值变量,并调用函数。

描述:编写一个指标,绘制 20 个 bar 最高价与最低价的移动平均。

为两个移动平均值选择名称并声明变量,然后进行变量赋值。

这个指标应该在价格数据的同一个区域绘图。

提示:Average 函数可以从字典中直接拖入编辑器中。

Page 45: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 41

13. 输入值

输入值是在分析技术、策略中用户定义的变量。输入提供一个允许用户在设

置的“输入值”选项卡修改变量,为修改分析技术、策略提供便捷。

下图为内置的 RSI 指标,“设置指标”对话框的“输入值”选项卡,对话框

显示有 6 个输入值。

Page 46: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 42

如果用户需要修改 RSI 指标计算的参数 length,或者超买、超卖的条件

OverBought, OverSell,可以直接修改,而不需要返回到开发环境的编辑器界面。

点击“默认值”按钮,更改指标的输入值默认设置。

小贴士:输入值选项卡的“值”窗格为数值形式(颜色的单词以其对应的数

值代替)。但是,数字输入值可以包括公式,甚至函数;逻辑输入值包含逻辑表

达式或返回真假值的函数。

输入值的好处:

每个输入值可携带用户声明的名称以及默认值

输入值的取值可以在设置窗口修改,无需返回到开发环境

输入值是策略优化的托管

输入值允许一个分析技术或策略的多个实例使用不同的计算值

输入值需要变量声明,且赋默认值:

Input: 输入值名称(默认值);

下面的语句定义 Factor 输入值,并设其初始值为 1.005:

Input: Factor(1.005);

注意:每个输入值仅在其定义的分析技术或策略中可用。

Page 47: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 43

练习题:*14 Envelope2

学习内容:使用输入值,代替固定变量。

描述:重新编写挑战题 *13 Envelope,将移动平均的长度作为输入值。

在开发环境打开#13 Envelope 的编辑器,如果该指标当前不是打开状态,通

过菜单栏文件→打开,来打开指标。

在本练习题中我们重新编写指标,在修改前另存一份文件。保持#13 Envelope

为当前活动窗口,点击菜单栏文件→另存为,打开对话框。输入新的指标名称#14

Envelope2,点击确认按钮。

将长度这个参数从赋值声明语句改至输入值语句中,变量声明、赋值的语句

从:

UpperLine = Average (High, 20);

LowerLine = Average ( Low, 20);

改为:

UpperLine = Average (High, UpperLength );

LowerLine = Average ( Low, LowLength);

当然,输入值需要声明,如下所示:

Input : UpperLength (20), LowerLength (20);

完整的语句如下:

Input : UpperLength (20), LowerLength (20);

Vars: UpperLine (0) , LowerLine (0) ;

UpperLine = Average (High, UpperLength );

LowerLine = Average ( Low, LowerLength);

Plot1 (UpperLine, “UpperLine”);

Plot2 (LowerLine, “LowerLine”);

验证指标,在图形分析窗口中加载#14 Envelope2,点击确认按钮之前,确保

“提示设置”的复选框被勾选,如下图所示。

Page 48: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 44

点击确认按钮,弹出指标属性设置的对话框,在输入值选项卡中将会看到我

们建立的 UpperLength,LowerLength 输入值,再次点击确认按钮,指标成功加载

到图形分析中,结果如下:

#14 Envelope2

语句顺序的经验法则:

从完成的所有练习题来看,语句顺序基本是一致的。语句顺序的经验法则为:

Page 49: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 45

输入值声明语句

变量声明语句

变量赋值语句

面向分析技术:绘图语句

面向策略:买卖语句(后文介绍)

但是在创建 EasyLanguage 文件时,尤其是在创建复杂的文件时,通常从后

面开始编程,完成整个程序的框架,然后再逐渐补充。根据经验法则,语句需要

按照上述的顺序验证、执行,没必要在编写的开始就按照这个顺序来。

例如,如果需要绘制两个图形,可以先编写绘图语句:

Plot1( UpperLine, “UpperLine”);

Plot2( LowerLine, “LowerLine”)

然后再给两个变量赋值:

UpperLine = Average (High, UpperLength );

LowerLine = Average ( Low, LowerLength);

Plot1 (UpperLine, “UpperLine”);

Plot2 (LowerLine, “LowerLine”);

再对赋值的变量进行声明:

Vars: UpperLine (0) , LowerLine (0) ;

UpperLine = Average (High, UpperLength );

LowerLine = Average ( Low, LowerLength);

Plot1 (UpperLine, “UpperLine”);

Plot2 (LowerLine, “LowerLine”);

最后,声明输入值:

Input : UpperLength (20), LowerLength (20);

Vars: UpperLine (0) , LowerLine (0) ;

UpperLine = Average (High, UpperLength );

LowerLine = Average ( Low, LowerLength);

Plot1 (UpperLine, “UpperLine”);

Plot2 (LowerLine, “LowerLine”);

Page 50: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 46

练习题:*15 Trailing Hi Lo

学习内容:使用输入值,使用函数 Highest 及 Lowest。

描述:该指标绘制输入值 n 个 Bars 之前的最高价、最低价的线图。

新建指标#15 Trailing Hi Lo,正如描述中所述的,该指标绘制两条线图,在

图形上方绘制价格通道。因此,指标需要绘制两个线图,一个是 n 个 Bars 之前

的最高价线图(在本练习题中取 n 为 8,并将其在输入值中声明),另一个为最

低价。

首先,声明并给变量 HighLine, LowLine 赋值(将会在绘图时计算):

Vars : HighLine (0), LowLine(0) ;

HIghLine =

LowLine =

下一步,使用字典查找函数 Highest, Lowest,并将其拖入编辑器中。这两个

函数需要提供两个参数:Price(价格)、Length(长度):

Vars : HighLine (0), LowLine(0) ;

HIghLine = Highest (

LowLine = Lowest (

在输入值中声明两个参数变量。对于参数 Price,用 HighPx 及 LowPx 来表

示,取 High,Low 作为初始值;参数 Length,以 TrlgBars 来表示,初始值取 8:

Input: HiPx (High) , LoPx (Low), TrlgBars (8) ;

Vars : HighLine (0), LowLine(0) ;

HighLine = Highest ( HiPx, TrlgBars);

LowLine = Lowest (LoPx, TrlgBars);

最后,编写绘图语句:

Input: HiPx (High) , LoPx (Low), TrlgBars (8) ;

Vars : HighLine (0), LowLine(0) ;

HighLine = Highest ( HiPx, TrlgBars);

LowLine = Lowest (LoPx, TrlgBars);

Plot1 (HighLine, “TrlgHigh”);

Page 51: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 47

Plot2 (LowLine, “TrlgLow”);

验证指标,在属性设置对话框中将刻度位置修改为“与标的物数据一样”,

退出属性设置对话框,再次验证指标。

使用默认的取值,指标绘制 n 取值为 8 的图形。将指标加载到 30 分钟图表

中,如下图所示:

#15 Trailing Hi Lo

问题:图中有没有价格穿过两条线图的?答案是没有,我们来看看原因。

以绘制变量 HighLine 的红色线图 TrlgHigh 为例。变量 HighLine 绘制前 8 个

Bars 的最高价,包括当前 Bar 的价格。

问题:当前 Bar 是否会比其最高价高?显然答案是不会。这就是 Bars 不会

穿过线图的原因。蓝色的线图 TrlgLow 同理。

使用该指标计算的最新价格的高点和低点。对于大部分交易者而言,“市场

前 8 个 Bars 的高点”意味着不包括当前 Bar。我们之前编写的指标包含当前 Bar,

但是我们希望当前数据不包含在内。我们可以修正指标变量的赋值:

HighLine = Highest ( HiPx, TrlgBars) [1];

LowLine = Lowest (LoPx, TrlgBars) [1];

重新验证指标,结果如下图所示。

Page 52: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 48

#15 Trailing Hi Lo

注意:这个概念需要明确,并且正确理解是非常重要的。如果编写的是基于

价格上穿、下穿线图的买卖策略,如果使用未修改前的变量,策略不会产生买卖。

将变量改变为一个 Bar 之前的计算方式,就能够产生预期的效果。

Page 53: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 49

14. 关系运算符

逻辑表达式需要关系运算符来比较数值,比较返回真或假。EasyLanguage 在

分析技术或策略中均有八个关系运算符,以下的六个运算符是常见的:

< 小于

<= 小于等于

> 大于

>= 大于等于

= 等于

<> 不等于

除了上述六个运算符外,EasyLanguage 还有两个特定的关系运算符用于比

较连续 Bar:

Crosses Over (上穿),与 Cross over , Crosses above, Cross above 通用;如果

X>Y(当前 Bar)或 X<Y(以前),返回真。

Crosses Under (下穿),与 Cross under , Crosses below, Cross below 通用;

如果 X<Y(当前 Bar)或 X>Y(以前),返回真。

下图中箭头所指位置即为价格上穿的信号。

Page 54: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 50

逻辑表达式使用关系运算符比较两个值,返回真或假的值。看几个例子。

Close = Open

收盘价等于开盘价,结果为真;反之,则为假。

High > High [1]

当前 Bar 的最高价高于前一个 Bar 的最高价,结果为真;反之,则为假。

Date <> Date [1]

日期不等于前一个 Bar 的日期,结果为真;反之,则为假。

Close crosses over Average (Close ,20 )

收盘价上穿 20 个 Bar 的均价,则为真;若没有上穿,则为假。

Page 55: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 51

15. 条件语句

条件语句允许用户构建仅在特定条件下执行的指令。这些条件以逻辑表达式

的方式出现。

条件语句包含一个或多个逻辑表达式以及执行的动作。

If True/False Expression (逻辑表达式) Then

Action to be taken (执行的动作);

例如:

If Close > Close [1] then

Plot1(High, “High”);

因此,如果收盘价比前一个 Bar 的收盘价高,则绘制图形;如果结果非真,

则不执行(在本例中,不执行绘制图形指令)。

Page 56: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 52

16. 编写预警语句

预警是在用户定义的特定市场事件发生时,发出音频或者电子通知。

指标、标示点、着色条可以包含预警指令,策略中不能包含预警,但是

可以以其他方法给用户提供买卖的信号。

预警仅在图表中最后一个 Bar 的事件发生时才会被触发。

分析技术必须包含预警规则。

分析技术的预警必须,可以使用默认设置,也可以在属性设置对话框中

修改。

上述最后两点很重要,尤其是在自己编写程序时。思考以下两点:

1. 在插座上放一个电灯泡,就像在 EasyLanguage 文件中编写预警规则;

2. 打开墙上的电灯开关,就像触发预警。

由于预警是基于事件发生与否的,因此预警指令需要用到条件语句。

If true/false expression then

Alert;

例如:

If Close > Highest (Close, 10) [1] then

Alert;

翻译成中文即,如果收盘价大于从上个 bar 往前十个 bar 的最高价,预警。

此外,在后文的第二个练习题中,将在文件中插入默认预警消息。默认预警

消息,可能包含预警事件出发时显示的标志。

Page 57: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 53

练习题:*16 Envelope2 Alert

学习内容:使用条件语句设置预警规则。

描述:该指标是重新编写*14 Envelope2,当整个价格 K 线图上穿顶部线或

下穿底部线。

找到并打开指标#14 Envelope2,并另存一份文件#16 Envelope2 Alert。指标

的程序如下:

Input: UpperLength (20) , LowerLength (20) ;

Vars : UpperLine (0) , LowerLine (0) ;

UpperLine = Average (High, UpperLength) ;

LowerLine = Average (Low, LowerLength);

Plot1 (UpperLine, “UpperLine” );

Plot2 (LowerLine, “LowerLine”)’

现在在文件中插入预警语句:

Input: UpperLength (20) , LowerLength (20) ;

Vars : UpperLine (0) , LowerLine (0) ;

UpperLine = Average (High, UpperLength) ;

LowerLine = Average (Low, LowerLength);

Plot1 (UpperLine, “UpperLine” );

Plot2 (LowerLine, “LowerLine”)’;

If Low > UpperLine then

Alert;

If High < LowerLine then

Alert;

验证指标,并设置属性。在属性设置对话

框中,选择预警选项卡,勾选“启用预警”,并

选择“预警一次”,将预警设置为出现一次之后

即关闭。

在使用 TradeStation 时有多种预警选择和

Page 58: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 54

设置。详情可参见 TradeStation 平台帮助。

点击确认按钮,再次验证指标以保存修改,并将指标加载到图表上。

如果价格上穿顶部线或者下穿底部线,将会触发预警。如果没有预警发生,

您可以修改指标的一些参数。下图是价格上穿触发预警。

#16 Envelope2 Alert

Page 59: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 55

练习题:*17 Mov Avg & Bands

学习内容:使用条件语句设置预警规则,复习输入值、变量、函数的内容。

描述:指标绘制三条线图:移动平均线、在价格基础上加标准差的移动平均

线、在价格基础上减标准差的移动平均线。

在价格穿过任何一条线,将会触发预警。

创建新指标#17 Mov Avg & Bands。首先开始编写绘图语句。第一个图形是

简单移动平均,第二个图是移动平均加标准差,第三个图形是移动平均减标准差。

图形语句不仅包括图形的名称,也要包括变量。

Plot1 (MAvg, “Avg”);

Plot2 (HiBand, “HighBand”);

Plot3 (LoBand, “LowBand”);

上述绘图语句中所用到的变量需要声明、赋值。MAvg 的赋值要用到 Average

函数。同样地,也需要定义标准差的变量 StDv,在后面我们会对其赋值。HiBand

等于 MAvg 加 StDv ;LoBand 等于 MAvg 减 StDv。

Vars : MAvg (0), StDv (0), HiBand (0), LoBand (0) ;

MAvg = Average (Price, Length) ;

StDv =

HiBand = MAvg + StDv;

LoBand = MAvg - StDv;

Plot1 (MAvg, “Avg”);

Plot2 (HiBand, “HighBand”);

Plot3 (LoBand, “LowBand”):

关于变量 StDv 的赋值,要用到标准差函数。在字典中找到 StdDev 函数,将

它拖入编辑器中。

Vars : MAvg (0), StDv (0), HiBand (0), LoBand (0) ;

MAvg = Average (Price, Length) ;

StDv = StdDev ( Price, Length);

HiBand = MAvg + StDv;

Page 60: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 56

LoBand = MAvg - StDv;

Plot1 (MAvg, “Avg”);

Plot2 (HiBand, “HighBand”);

Plot3 (LoBand, “LowBand”):

对参数 Price, Length 进行声明,并将其初始值分别设为 Close, 18:

Inputs : Price (Close), Length (18) ;

Vars : MAvg (0), StDv (0), HiBand (0), LoBand (0) ;

MAvg = Average (Price, Length) ;

StDv = StdDev ( Price, Length);

HiBand = MAvg + StDv;

LoBand = MAvg - StDv;

Plot1 (MAvg, “Avg”);

Plot2 (HiBand, “HighBand”);

Plot3 (LoBand, “LowBand”):

现在可以插入预警语句。TradeStation 将会在收盘价上穿 HiBand 或者下穿

LoBand 的时候,触发预警。语句如下:

Inputs : Price (Close), Length (18) ;

Vars : MAvg (0), StDv (0), HiBand (0), LoBand (0) ;

MAvg = Average (Price, Length) ;

StDv = StdDev ( Price, Length);

HiBand = MAvg + StDv;

LoBand = MAvg - StDv;

Plot1 (MAvg, “Avg”);

Plot2 (HiBand, “HighBand”);

Plot3 (LoBand, “LowBand”):

If Close crosses over HiBand

then Alert (“Close has crossed over HiBand” + Description ) ;

If Close crosses under LoBand

then Alert (“Close has crossed under LoBand” + Description ) ;

Page 61: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 57

注意到上述两个预警语句在 Alert 后包含了预警信息,引号内的文字加上标

致描述将会出现在预警信息窗口。

验证指标,右键点击属性设置打开对话框,选择预警选项卡。勾选“启动预

警”,并设置“预警一次”,系统将会在首次预警之后关闭预警,并清空“启动预

警”前的勾选。

点击刻度轴选项卡,将刻度位置设置为“与标的物数据一致”。重新验证指

标,并将指标加载到图表中。

#17 Mov Avg & Bands

Page 62: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 58

17. 标示点

标示点在图表 Bar 中标记出符合用户定义规则的点,用于识别历史事件,并

监控当前事件。一般而言,标示点能够有效地识别、标记突发事件;例如,发生

在独立的 bar 上的事件。着色点(在后文将接触到)在一系列 Bar 中识别条件事

件,通常非常有效。

由于标示点并不在图表的所有 Bar 上都标记,仅在满足一定条件或某情况为

真时才会标记。因此,标示点一般会用到条件语句来识别需要标记的 Bar。

注意:标示点研究的绘图语句与编写指标所用的绘图语句一样。

PlotN (数值表达式, “图形名称”);

N=1,2,…,99

一个简单的例子:

Plot1( High, “MomentumUp”);

在例子中,单词 Plot1 表示绘制的图形在标示点研究中为第一个图形;用于

绘图的数值表达式是 High,例子语句将 Bar 的最高价标记出来;“MomentumUp”

为图形名称。

Page 63: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 59

18. 批条件语句

批条件语句与单个的条件语句相似,但在条件为真或假时执行的动作不止一

个。这些动作是成批的,以 begin 开始,end 结束;即条件语句的条件为真时,

从 begin 开始执行动作,直到 end 为止(动作之间用分号隔开)。

If 逻辑表达式 then begin

执行的动作;

执行的动作;

执行的动作;

End

在以下的示例标示点语句中,用户可以增加条件语句来增加执行的动作,如:

If Open > High [1] then

Plot1( Low, “GapUp”);

If Open > High [1] then

Alert;

或者使用批条件语句,用户可以使用一个条件语句,跟随多个执行动作,如:

If Open > High [1] then begin

Plot1( Low, “GapUp”);

Alert;

End;

以上语句告诉 TradeStation,如果当前 Bar 的收盘价大于前一个 Bar 的最高

价,在当前 Bar 的最低价绘制出标示点并预警。

批条件语句提高了效率。上述第一个例子使用单独的条件语句执行多次,每

次执行前都要进行真假的计算;批条件语句计算一次真假,执行多个动作。

Page 64: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 60

练习题:*18 Wide Range

学习内容:使用批条件语句、Range 及 Highest 函数,编写标示点语句。

描述:标示点将会给全距(Range,即 High - Low)大于前十个 Bars 全距的

Bar 进行标示。

创建标示点#18 Wide Range(记住标示点的模板选择 None)。在练习题中,

由于我们已经知道如何使用函数,我们将使用 Range 函数来计算全距,以及

Highest 函数。

输入:

If Range >

现在使用字典来寻找 Highest 函数,并将其拖入编辑器中。在搜索框中输入

Highest,然后单击搜索按钮。从搜索结果中选择 Highest 函数,拖入编辑器中:

If Range > Highest (

Highest 函数需要提供两个参数,价格 Price 及长度 Length。由于我们需要寻

找 10 个 Bars 的全距最大值,Prcie 选择 Range,Length 取 10。但是,将 Length

作为输入值将会更好。

Input : TrlgBars (10) ;

If Range > Highest (Range, TrlgBars) [1]

现在在批条件中加入执行的动作,记住要使用 begin 及 end。

Input : TrlgBars (10) ;

If Range > Highest (Range, TrlgBars) [1] then begin

Plot1 (Close, “Wide Range” );

Alert;

End;

验证标示点,将其加载到图表中。标示点会将图表中全距大于前十个 Bars 全

距的 Bar 标记出来。

Page 65: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 61

#18 Wide Range

Page 66: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 62

19. If…Then…Else 及 NoPlot 语句

If…Then…Else 语句包含条件为真时执行的动作,以及条件为假时执行的动

作。

If 逻辑表达式 then

执行的动作

Else

供选择执行的动作

If…Then…Else 及 NoPlot 语句标示点中经常用于条件为真时作出标记,条

件在后续变为假时,删除标示。

If Close > Close[1] then

Plot1( Low, “UpBar”)

Else

NoPlot(1);

在上述例子中,如果收盘价大于前一 Bar 的收盘价,将会出现标示点。但是

包含了 NoPlot 语句将会在条件变为假时,删除标示。NoPlot 括号内的参数 1 是

指导 TradeStation 删除 Plot1.

注意:使用 NoPlot 语句删除以前条件为真的图形,会实时预警。NoPlot 不

会删除以前已经收盘的 Bar。只在当前 Bar 的条件改变时使用。

批条件语句也可以在 If…Then…Else 语句中书写。

If 逻辑表达式 then begin

执行的动作;

执行的动作;

执行的动作;

End

Else begin

执行的动作;

执行的动作;

执行的动作;

End;

注意:第一个 end 其后并不需要分号,因为它不是 if 语句的结尾。

Page 67: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 63

挑战题 4:*19 Weak Close

学习内容:使用批 If…Then…Else 及 NoPlot 语句编写标示点。

描述:编写标示点,标示出收盘价处于倒数第三的 Bar(即收盘价低于最高

价、开盘价但高于最低价)。使用 NoPlot 语句,在 Bar 收盘后条件变为假时删除

标示。

在事件发生时,包含预警指令。

Bar 的全距是 High – Low, Range 函数可以直接计算。

Page 68: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 64

20. 着色条

着色条将图表中的全部或者部分符合条件的 Bar 着色。着色条用于识别历史

事件,同时监控当前图表上的事件。一般而言,着色条在一系列 Bar 中识别条件

很有效。它的用法不同于标示点,标示点用于独立的 Bar 上的突发事件。

着色条需要用到绘图语句一个特殊形式。

PlotPB (StartPaint, EndPaint, “plot name” );

StartPaint, EndPaint 表示在着色过程中 y 轴上开始、结束的位置。一般地,

从最低价到最高价,着色条将整个 Bar 着色,但不仅限于这种形式。用户可以选

择给 Bar 的一部分着色,比如从开盘价到收盘价。

如同其他分析技术,图形名称是可选的,但是我们建议命名。其他非必须的

设置着色的颜色以及格式参数都是可选的。同时,如我们在标示点中使用的那样,

预留单词 NoPlot 也是可用的,用于删除在以前条件为真,后期条件变为假的着

色。

Page 69: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 65

练习题:*20 MomentumPositive

学习内容:使用 PlotPB 编写着色条语句。

描述:将动量大于 0 的 Bar 着色、预警,并使用 NoPlot 语句。

创建着色条#20 MomentumPositive,(记住模板选择 None)。在编辑器中,使

用批条件语句,包括着色、预警两个动作。批条件语句需要用到 begin 及 end,

并在 else 后面使用 NoPlot(1)语句。

If Mom > 0 then begin

PlotPB (High, Low, “MomPos”);

Alert;

End

Else

NoPlot(1);

编写变量声明及赋值语句:

Vars : Mom (0);

Mom = Momentum (Price, Length);

If Mom >0 then begin

PlotPB (High, Low, “MomPos”);

Alert;

End

Else

NoPlot(1);

现在给 Price, Length 作输入值声明:

Input : Price(Close), Length(10);

Vars : Mom (0);

Mom = Momentum (Price, Length);

If Mom >0 then begin

PlotPB (High, Low, “MomPos”);

Alert;

Page 70: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 66

End

Else

NoPlot(1);

验证指标,并加载到图表上,动量大于 0 的 Bars 将会被着色。

#20 MomentumPositive

Page 71: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 67

21. 引用日期

图表上每个 Bar,无论间隔、类型,都是以结束日期来标记的。EasyLanguage

为日期提供了特有的数值格式。下面例子表示 2003 年 12 月 9 日,以星期为周期

的图表以周五为结束点,月度图表以月度的最后一个交易日为结束点。

1031209

103 表示 2003 年,100 代表 2000 年,0 代表 1900 年。例如 000 表示 1900

年,088 表示 1988 年。

12 表示 12 月;09 表示日期,9 号。

预留单词 Date 返回当前格式 Bar 的日期。还有很多其他的函数、预留单词,

与日期信息相关。

用户可以查询并引用日期或星期作为标记,例如将当前图表的下一个赋值给

某一天。

Date <> Date [1]

上述的逻辑表达式在日内图每天第一个 Bar 均为真。(注意:这个例子对于

交易在同一个自然日开始、结束的图表上最有用。)

Page 72: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 68

练习题:*21 MyDay

学习内容:引用历史日期,编写着色条。

描述:将输入值所指向特定星期的 Bar 着色。

创建着色条#21 MyDay。如描述中所述,着色条标记一周特定日期出现的 Bar,

使用输入值来定义一周的特定星期,并用条件语句定义着色的情况。

在编辑器中,输入以下语句,并验证它:

Input : DoW (Wednesday);

If DayOfWeek (Date) = Dow then

PlotPB (high, Low, “DoW”);

条件语句使用预留单词 DayOfWeek 来返回图表上 Bar 的星期数。实际上,

DayOfWeek 返回值是基于图表上 Bar 日期的。根据星期数的不同,返回值如下:

0 = 星期日

1 = 星期一

2 = 星期二

3 = 星期三

4 = 星期四

5 = 星期五

6 = 星期六

对于返回数值 3 的 Bar,即为星期三。TradeStation 通过着色条标记这些 Bar。

在图表上加载着色条#21 MyDay。这个着色条可以在日线图、日内图上应用。用

户可以改变图表的间隔,查看这个着色条在不同的间隔图上的表现。

#21 MyDay

Page 73: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 69

22. 引用时间

无论间隔、类型,每个 Bar 都以结束时间标记。EasyLanguage 中时间是依据

军事时制(即 24 小时制),不带冒号。预留单词 Time 以下列方式返回值:

Time > 1500

这个逻辑表达式在下午 3 点以后结束的 Bar 中为真。

EasyLanguage 中还有很多函数、预留单词帮助用户处理时间信息,详情参见

字典。

Page 74: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 70

23. 逻辑运算符

逻辑运算符用于连接多个逻辑表达式。逻辑运算符的选用决定是部分还是全

部为真时,整个表达式为真。

AND 逻辑表达式全为真时,整个表达式才为真

High > High [1] AND Close > Close [1]

OR 逻辑表达式中有真,整个表达式即为真

High > High [1] OR Close > Close [1]

逻辑运算符从左往右依次执行,AND 比 OR 优先;括号也可以在逻辑运算

中用来定义顺序。

Page 75: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 71

挑战题 5:*22 Parts Of Day

学习内容:使用时间和逻辑运算符编写着色条。

描述:编写着色条,对一天的前几个和最后几个小时 Bar 的下半部分着色。

将描绘一天的第一个和最后一个小时的时间作为输入值进行声明。

Page 76: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 72

24. 策略

至此,我们已经编写过指标、标示点、着色条了。我们已经做好准备开始运

用我们所学的,开始创建自己的交易策略。交易策略监控市场上过去及当前符合

买入、卖出规则的事件。这些事件会在图表上显示,并且记录以产生绩效报告。

符合规则的当前事件会触发 TradeStation 的策略自动化交易功能,发送真实交易

到市场上。

策略开发过程以分析技术开始。第一步是可视化的,也就是本书之前所述的

内容。开发一个策略,首先需要编写分析技术来识别交易时点。在图表上观察、

决定市场导向和指示如何会更舒适。有明显的可识别关联吗?如果有,下一步逻

辑就是策略交易者会问“如果我编写并测试了一组基于这些关联的买卖规则会怎

么样呢?”

每个策略一般包括至少一个交易动作。多个交易,每个包含数个交易动作,

可以在图形分析窗口上同时使用。

策略的下单语句

EasyLanguage 使用四种交易动词来识别策略中的市场动作:

Buy :买入开仓,(在做多前会清理已经存在的空头头寸)

SellShort:卖出开仓(在卖空前会清理已经存在的多头头寸)

Sell:仅限于卖出平多仓

BuyToCover:仅限于买入平空仓

注意:上述四个动词的功能与所适用的策略无关。也就是说,无论策略应用

于期货还是外汇, SellShort 都是用于产生空头仓位。

这些动作可以以下列方式执行:

Next bar at market,即下一个 bar 的开盘价

Stop,即突破事件触发时的下一个 bar

Limit,即限价达到时的下一个 bar

This bar on close,即当前 bar 的收盘价(仅用于回测)

Page 77: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 73

正确的下单语句将交易单词与上述下单类型结合:

AnyVerb next bar at market;

AnyVerb next bar at AnyPrice limit;

AnyVerb next bar at AnyPrice stop;

AnyVerb this bar on close;

以下是包含下单语句的例子:

If 逻辑表达式 then

Sell short next bar at market;

Sell next bar at close of this bar + 0.10 limit;

Buy to cover next bar at High of this bar + 0.05 stop;

Limit 及 Stop 下单可能在限价、止损价上引用下一个 bar 的开盘价,

Buy next bar at Open of next bar - .05 limit;

Page 78: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 74

练习题:*23 Breakout

学习内容:使用 stop 编写策略。

描述:在突破之前 8 个 bar 的最高价时,买入多仓;在跌破之前 8 个 bar 的

最高价时,开空仓。

创建新策略#23 Breakout,模板选择 None。这个策略基于前 8 个 bar 的最高

价、最低价执行开多仓、开空仓的动作。首先,进行变量声明并赋值:

Vars : BuyPx (0) , SellPx (0) ;

BuyPx = Highest (High, 8) + .02;

SellPx = Lowest (Low, 8) - .02;

检查所输入的语句,变量 BuyPx 及 SellPx 用于表示前 8 个 bar 的最高价、

最低价,额外的加减 0.02 为了确保在信号发送之前价格已经上穿最高价或下穿

最低价。Highest 和 Lowest 函数可以在字典中找到。下一步,编写买卖语句:

Vars : BuyPx (0) , SellPx (0) ;

BuyPx = Highest (High, 8) + .02;

SellPx = Lowest (Low, 8) - .02;

Buy (“Brk LE”) next bar at BuyPx Stop;

Sell Short (“Brk SE”) next bar at SellPx Stop;

注意动作标识 Brk LE 及 Brk SE,放在括号内的引号中。当策略被应用时,

这些名字将会在图表上出现。当策略中包含多个不同条件的入场、出场时,命名

入场、出场动作将会很有用。这个训练允许用户观察特定 bar 上哪个入场、出场

被触发。

最后一个项目,在输入值中声明长度变量,因此

BuyPx = Highest (High, 8) + .02;

SellPx = Lowest (Low, 8) - .02;

变为:

Input: Length (8);

Vars : BuyPx (0) , SellPx (0) ;

BuyPx = Highest (High, length) + .02;

Page 79: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 75

SellPx = Lowest (Low, length) - .02;

Buy (“Brk LE”) next bar at BuyPx Stop;

Sell Short (“Brk SE”) next bar at SellPx Stop;

值得注意的是,在本练习题中,下单语句中不是在条件之后,因为 stop 下单

本身就是一个条件,这个条件是基于出现突破价格的。

同样地,如果查看变量赋值语句,将会注意到我们没有像之前学习中的那样,

使用一个 bar 以前或[1]。这是因为 stop 下单在下一个 bar 入场。所以,我们希望

包含当前 bar 在内的 8 个 bar 的最高价的突破,然后在下一个 bar 入场。

验证策略,通过右键点击编辑器窗口,选择“属性”,打开策略属性对话框。

策略属性设置对话框与指标、标示点、着色条的标示点有稍许不同,有些属性在

策略中是不可设置的。

例如,下面的对话框显示策略的属性设置只有三个选项卡,常规、仓位、金

字塔式交易法。

常规选项卡包含“本研究引用的最大图条数量”,默认值为 50。这个值确定

策略往前引用的最大值。换句话说,策略在图表上的 bar之间逐个移动,默认的

最多引用 50个 bar。如果需要引用更多的数据,用户可以修改设置。

Page 80: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 76

注意:标示点、着色条研究也有这个属性设置,但是默认的为“自动检测”,

一般不需要用户修改。

仓位选项卡允许用户设置每种仓位最大的未结委托单、合约或股票量;金字

塔式交易法允许用户修改设置。各选项卡的详细信息请参见帮助,可以通过开发

环境的帮助菜单或帮助按钮进入。

记住退出属性设置对话框,重新验证策略。

返回到图形分析窗口,插入指标#15 Trailing Hi Lo,这个指标在价格图形上

形成通道,为策略提供概念基础。在同一个图表上看到指标以及策略交易情况很

方便。这是开发策略并将其可视化的重要方面。

在图表上应用策略,在菜单栏单击插入→策略,在插入策略对话框中,勾选

“提示设置”,单击“确认”按钮,将弹出属性设置对话框。

首先,我们看一下对话框中重要的“自动化”选项。对话框有两个主选项:

第一个可以勾选的选项是“在交易管理的策略委托单选项卡中,产生策略委

托单”,勾选了这个选项,在没有真正将下单发送到市场中时,产生策略日志和

委托单。

第二个勾选选项是自动化的账户,即选择策略产生的委托单发送到市场中时

的账户。这个选项只有在策略已经测试且准备用于实盘的自动化交易时才能勾选。

Page 81: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 77

在策略实盘的自动化交易之前要在模拟盘测试一段时间。

更多信息请参见帮助。

注意:真实账户、仿真账户都可用于自动化设置。

为了课程的需要,在此我们不勾选任何自动化选项。

点击“设置”按钮,打开设置属性对话框。这个对话框与我们之前从编辑器

窗口打开的策略属性设置对话框不同,这里的对话框有四个选项卡:一个用于修

改和优化输入值,两个修改进场、退场可视化界面的选项卡,还有一个用于启动

bar 内交易。更多信息参见帮助文档。

#23 Breakout

Page 82: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 78

策略属性

属性设置窗口的“通用属性”按钮可以打开“本图形的所有策略的公用属性”

对话框。对话框有三个标签,常规、回测及自动化选项卡。在本图形中加载的所

有策略属性都可以在这里设置,如仓位滑点、佣金以及策略下单和交易规模的参

数。详情请参见帮助文档。

注意:练习题 23 中交易规模设置为 100。

返回到属性设置对话框,点击关闭应用设置。红色向上的箭头表示买入,蓝

色向下的箭头表示卖出。这些标记下面的数字表示 bar 收盘时的净头寸。动作标

识 Brk LE 及 Brk SE 在图形上标记,入场的 Buy 和 SellShort 采用默认的标识,

但在图形上以自定义的 Brk LE 及 Brk SE 标记。同样地,退场的 BuyToCover 及

Sell 也可以自定义。顺带说一下,在这个策略中没有退场,因为连续地关闭和保

持未平仓交易。

查看策略的绩效表现,可以点击菜单栏的视图→策略绩效报告。

Page 83: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 79

练习题:*24 Mov Avg Cross

学习内容:使用仓位预留单词编写策略。

描述:在突破两个移动均线时进行买卖,在持仓超过设定的 Bars 或者未达

到设定收益时斩仓。

创建新策略#24 Mov Avg Cross。首先,编写变量声明和赋值语句。

Vars : ShortMA (0) , LongMA (0) ;

ShortMA = Average (Close, ShortLen) ;

LongMA = Average (Close, LongLen );

长度参数 ShortLen 及 LongLen 在输入值中声明。编写输入值声明语句,并

将其初始值分别设为 9,18.

Input : ShortLen (9) , LongLen (18);

Vars : ShortMA (0) , LongMA (0) ;

ShortMA = Average (Close, ShortLen) ;

LongMA = Average (Close, LongLen );

下面输入命令“

Input : ShortLen (9) , LongLen (18);

Vars : ShortMA (0) , LongMA (0) ;

ShortMA = Average (Close, ShortLen) ;

LongMA = Average (Close, LongLen );

If ShortMA crosses over LongMA then

Buy next bar at market;

If ShortMA crosses under LongMA then

SellShort next bar at market;

最后,加入退场规则。正如描述,我们在信号并没有进行到底时退场。我们

以持仓的时间以及持仓的收益来衡量。我们可以在字典中查找到预留单词

BarsSinceEntry 以及 OpenPositionProfit,这两个单词可用于追踪仓位状态。

Input : ShortLen (9) , LongLen (18);

Vars : ShortMA (0) , LongMA (0) ;

Page 84: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 80

ShortMA = Average (Close, ShortLen) ;

LongMA = Average (Close, LongLen );

If ShortMA crosses over LongMA then

Buy next bar at market;

If ShortMA crosses under LongMA then

SellShort next bar at market;

If BarsSinceEntry > MinHold and OpenPositionProfit < MinProf then

Begin

Sell next bar at market;

BuyToCover next bar at market;

End;

注意到单词 MinHold 及 MinProf 应该在输入值中进行声明:

Input : ShortLen (9) , LongLen (18) , MinHold (8) , MinProf (50) ;

Vars : ShortMA (0) , LongMA (0) ;

ShortMA = Average (Close, ShortLen) ;

LongMA = Average (Close, LongLen );

If ShortMA crosses over LongMA then

Buy next bar at market;

If ShortMA crosses under LongMA then

SellShort next bar at market;

If BarsSinceEntry > MinHold and OpenPositionProfit < MinProf then

Begin

Sell next bar at market;

BuyToCover next bar at market;

End;

验证策略,返回到图表上,加载指标 Mov Avg 2 以绘制线图,长度参数取 9,

18。正如前文所述,在应用策略时,利用指标绘图会更直观、便捷。现在可以将

策略加载到图形上。

Page 85: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 81

#24 Mov Avg Cross

Page 86: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 82

25. 逻辑变量

逻辑变量是为逻辑表达式命名,从而更方便引用。如果在分析技术或策略需

要反复使用某个逻辑表达式,那么给逻辑表达式命名将会很方便,用户不再需要

反复输入表达式。这提升了 EasyLanguage 的效率,因为引用名称时,表达式只

要计算一次。

逻辑变量可用于:

提高运算效率

减少输入误差

提升可读性

注意:在分析技术或策略中,变量经过声明、赋值才可用。

用户定义的逻辑变量

同数值变量几乎一样,EasyLanguage 允许用户定义逻辑变量。用户可以给逻

辑变量赋予规则和名称,名称是变量的描述语言。

如用户定义的数值变量一样,用户定义的逻辑变量首先需要声明。与数值变

量不同的是,数值变量被分配初始值,而逻辑变量的初始值为真或假。一般初始

值设为假。为什么呢?因为大多数情况下,投资者会在某个条件为真时进行下单。

记住,在使用用户定义的逻辑变量之前,需要给变量赋初始值。

变量声明语句

以下语句是定义一个名为 UpBar 的数值变量,初始值为假:

Variables: UpBar (false) ;

在一个声明语句中可以包含多个逻辑变量。实际上,数值及逻辑变量可以在

同一个声明语句中。下面的语句同时声明了两个逻辑变量和一个数值变量:

Variables : NetChang (0) , UpBar (false) , DownBar (false);

变量赋值语句

下列语句将逻辑表达式赋值给变量 UpBar:

UpBar = Close > Close[1];

如同用户定义的数值变量,逻辑变量需要两步:首先声明,然后赋值。同样

Page 87: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 83

记住尽管在一个声明语句中可以包含多个变量,但是每个变量需要有自己的赋值

语句。

Page 88: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 84

练习题:*25 Momentum Cross

学习内容:使用用户定义的逻辑值变量;MRO 函数。

描述:当动量上穿 0,并且在前 4 个 Bar 内都没有下穿 0 时,买入;当动量

下穿 0,并且在前 4 个 Bar 内都没有上穿 0 时,卖出开仓;当连续两个 Bar 出现

下跌势头,平多仓;当连续两个 Bar 出现动量上涨势头,平空仓。

新建策略#25 Momentum Cross, 首先编写退场规则:

If Mom < Mom [1] and Mom [1] < Mom [2] then

Sell next bar at market;

If Mom > Mom [1] and Mom [1] >Mom [2] then

BuyToCover next bar at market;

第一个语句是在当前 bar 的动量小于往前一个 bar ,且前一个 bar 低于往前

两个 bar 的动量,平多仓;也就是说,连续两个 bar 动量下跌,产生卖单。

第二个语句在当前 bar 的动量大于往前一个 bar ,且前一个 bar 高于往前两

个 bar 的动量,平空仓;也就是说,连续两个 bar 动量下跌,产生平掉空仓的委

托单。

现在编写入场规则。根据练习题的描述,有两种可能:一是产生开多仓的委

托,一是产生开空仓的委托单。动量上穿 0(称为 BullCx),并且在前 4 个 Bar 没

有下穿,开多仓;动量下穿 0(称为 BearCx),并且在前 4 个交易日没有上穿,

开空仓。

编写两个入场规则,需要用到 MRO 函数。MRO 表示 Most Recent Occurrence.

MRO 函数制定用于识别事件最近发生的时间。函数需要三个参数:

MRO (Test, Length, Instance)

Test 是逻辑表达式,Length 表示回溯的 bar 数量(包括当前 Bar),Instance

表示事件数,1 代表最近的事件,2 代表第二近的事件。

如果在回溯的 bar 内寻找到指定的事件,将会返回事件距最近 bar 的数量;

如果没有找到指定的事件,则返回-1.

例如:

MRO( Close > Open, 3 ,1)

Page 89: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 85

这个语句在 3个 bar至最近的 bar中寻找最近发生的收盘价大于开盘价事件。

如果在前 3 个 Bar 中收盘价都没有大于开盘价,则返回-1;如果在当前 bar 往前

1 个 bar 上收盘价大于开盘价,则返回 1;如果在当前 Bar 出现收盘价大于开盘

价的情况,则返回 0.

两个入场语句、变量的声明和赋值,加上之前编写的退场语句,编写的语句

如下所示。将 length 参数放在输入值中声明会更合适。

Input : Length (10) ;

Vars : Mom(0) , BullCx (false) , BearCx (false);

Mom = Momentum (Close, Length);

BullCx = Mom crosses over 0;

BearCx = Mom crosses under 0;

If BearCx and MRO( BearCx ,4,1) = -1 then

Buy next bar at Close of this bar limit;

If BearCx and MRO( BullCx, 4, 1) = -1 then

SellShort next bar at Close of this bar limit;

If Mom < Mom [1] and Mom [1] < Mom [2] then

Sell next bar at market;

If Mom > Mom [1] and Mom [1] >Mom [2] then

BuyToCover next bar at market;

再看两个进场语句以及 MRO 函数的试用,在第一个语句中:

If BearCx and MRO( BearCx ,4,1) = -1 then

Buy next bar at Close of this bar limit;

在以下条件成立时,以当前 bar 的收盘价在下一个 bar 产生买入委托单:

BullCx 为真,意味着动量上穿 0

MRO 返回数值-1,即在过去 4 个 bar 内没有 BearCx

第二个入场:

If BearCx and MRO( BullCx, 4, 1) = -1 then

SellShort next bar at Close of this bar limit;

Page 90: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 86

在以下条件成立时,以当前 bar 的收盘价在下一个 bar 产生限价单:

BearCx 为真,意味着动量上穿 0

MRO 返回数值-1,即在过去 4 个 bar 内没有 BearCx

验证策略,并将其加载到图形上查看策略的绩效。插入指标#11 Momentum,

将会方便用户在上穿、下穿 0 时设置仓位。

#25 Momentum Cross

Page 91: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 87

挑战题 6:*26 Key Reversal

学习内容:使用用户定义逻辑变量;bar 样式;限价单语法。

描述:编写策略,使用向上、向下的关键反转识别入场时点。

为向上、向下的关键反转进行变量声明及赋值。

在策略中加入限价单,在向上关键反转出现时以当前 bar收盘价的限价买入。

在策略中加入限价单,在向下关键反转出现时以当前 bar 收盘价的限价开空

仓卖出。

在设置限价单时,输入值中声明,向上、向下反转的 bar 收盘价的点数限制,

默认设为 5 个点。

Page 92: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 88

内置逻辑变量

如同内置数值变量,系统中内置了 100 个预先声明的逻辑变量,这些变量的

名称为:

Condition0 到 Condition99

这些名称系统可以自动识别,用户只需要给这些变量赋值:

变量声明语句

Condition0 = 逻辑表达式;

用名称 Condition1 在分析技术或策略中表示收盘价大于前一 bar 收盘价的逻

辑表达式:

Condition1 = Close > Close [1];

Page 93: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 89

26. 内置止损止盈

EasyLanguage 内置了退场命令,可以直接在策略中试用。这些特殊命令,在

当前 Bar 也是有效的;即这些命令不仅在收盘时计算,而是在每个 tick 都计算

(与属性设置对话框中计算选项卡设置的间隔无关)。

尽管用户可以创建止损止盈及退场规则,这些内置的止损止盈,仅需几个单

词就可以在策略中添加风险和交易管理。另一个便利之处在于,单个命令可以实

现多仓及空仓的退场。

退场可以基于仓位、合约、股票数来设置:

SetStopPosition :对整体仓位设置止损;

SetStopShare 或 SetStopContract:计算每合约、股票数;

注意:内置止盈止损默认以仓位为基础的。用户可以试用 SetStopShare 或

SetStopContract 将止盈止损设置为以合约数、股票数为基础。下一个练习题*27

Breakout2 中会有所体现。

下面列出来的命令可用于设置特定的退场:

SetBreakEven:保本止损,在最低利润达到后以入场价格退场

SetDollarTrailing:与最大收益相比,如果回落特定金额即退场

SetPercentTrailing:在最低利润达到后,与最大收益相比,如果回落特定

点数即退场

SetProfitTarget:以固定利润目标设置退场

SetStopLoss:从进场以来的亏损特定金额即退场

Page 94: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 90

练习题:*27 Breakout2

学习内容:在策略中使用内置止盈止损。

描述:这个练习题是对之前写过的策略*23 Breakout 的重新编写。在突破之

前 8 个 bar 的最高价时,买入多仓;在跌破之前 8 个 bar 的最高价时,开空仓。

在策略中加入内置止盈止损

打开#23 Breakout,点击菜单栏的文件→另存为,将文件另存为#27 Breakout2,

如上所述,这是对下列语句的重新编写:

Input: Length (8);

Vars : BuyPx (0) , SellPx (0) ;

BuyPx = Highest (High, length) + .02;

SellPx = Lowest (Low, length) - .02;

Buy ("Brk LE") next bar at BuyPx Stop;

Sell Short ("Brk SE") next bar at SellPx Stop;

第一个改写:增加 SetStopShare,将退场设置为以合约数、股票数为基础;

Input: Length (8);

Vars : BuyPx (0) , SellPx (0) ;

BuyPx = Highest (High, length) + .02;

SellPx = Lowest (Low, length) - .02;

Buy ("Brk LE") next bar at BuyPx Stop;

Sell Short ("Brk SE") next bar at SellPx Stop;

SetStopShare;

下一步,增加退场命令,并在输入值中声明、赋值;

Input: Length (8), StopAmt (.2) , TargetAmt( .3) , BEAmt (.15);

Vars : BuyPx (0) , SellPx (0) ;

BuyPx = Highest (High, length) + .02;

SellPx = Lowest (Low, length) - .02;

Buy ("Brk LE") next bar at BuyPx Stop;

Sell Short ("Brk SE") next bar at SellPx Stop;

SetStopShare;

SetStopLoss ( StopAmt );

Page 95: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 91

SetProfitTarget (TargetAmt );

SetBreakEven( BEAmt);

在这个例子中,我们设置了一个止损,目标收益,保本止损。

验证策略,加载到图形上,并将指标#15 Trailing Hi Lo 也加载到图形中。

#27 Breakout2

Page 96: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 92

练习题:*28 RSI OB OS

学习内容:在策略中使用内置止盈止损,试用 HighestBar 和 LowestBar 函

数。

描述:在 RSI 超卖时开多仓,超买时开空仓。对于多仓,RSI 应低于 50,且

七个 bar 最低出现在 3 个 bar 以前;空仓是反过来的。添加内置的止盈止损。

创建新策略#28 RSI OB OS,首先声明变量 RSI。这个函数需要两个参数,

价格参数试用收盘价,长度参数在输入值中声明。

Vars : xRSI (0) ;

xRSI = RSI (Close, Length );

下一步用 LowestBar 及 HighestBar 函数编写入场规则。这些函数返回在长度

bar 内,最低价、最高价距最近 bar 的数量。

Var : xRSI (0) ;

xRSI = RSI ( Close ,Length );

if xRSI < 50 and LowestBar(xRSI, 7) >= 3 then

Buy next bar at market;

If xRSI > 50 and HighestBar(xRSI, 7) >= 3 then

SellShort next bar at market;

现在用一些内置止盈止损来管理交易。止损水平在输入值中声明。

Var : xRSI (0) ;

xRSI = RSI ( Close ,Length );

if xRSI < 50 and LowestBar(xRSI, 7) >= 3 then

Buy next bar at market;

If xRSI > 50 and HighestBar(xRSI, 7) >= 3 then

SellShort next bar at market;

SetStopLoss(StopAmt);

SetBreakeven(BEAmt);

SetDollarTrailing(TrlgAmt);

最后,加入输入值的声明:

Page 97: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 93

Input : Length (14) , StopAmt (50) ,BEAmt (50) ,TrlgAmt (100) ;

Var : xRSI (0) ;

xRSI = RSI ( Close ,Length );

if xRSI < 50 and LowestBar(xRSI, 7) >= 3 then

Buy next bar at market;

If xRSI > 50 and HighestBar(xRSI, 7) >= 3 then

SellShort next bar at market;

SetStopLoss(StopAmt);

SetBreakeven(BEAmt);

SetDollarTrailing(TrlgAmt);

验证策略,并打开图形分析窗口。在图形上插入指标 RSI 会便利,再修改超

买、超卖的输入值为 50,将策略加载到图形上。

#28 RSI OB OS

Page 98: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 94

27. 多数据:引用多个数据集

每个图形分析窗口最多可以包含 50 个不同的数据集(标识或基于事件的间

隔)。在添加数据时,数据标识会分配一个数值,从“data1”到“data50”。通常

分析技术、策略处理的数据是 data1。尽管某些策略是专门为某个数据开发的,

但是系统仍然默认是处理 data1。

Page 99: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 95

练习题:*29 Multidata MA

学习内容:在图表中引用多个数据集

描述:策略试用两个数据集产生多仓信号。当 Data1 的 Close 上穿其 20bar

均线,Data2 的 Close 上穿 50bar 均线。

创建有两个代码的图表。首先按照之前所做的那样,创建一个图表(本例中

代码设为 000001.sz),将会自动用 Data1 绘图。然后选择插入代码,输入第二个

代码,单击绘图按钮。

返回开发环境,创建策略#29 Multidata MA。从输入值和变量的声明开始。

命名将帮助用户记住引用的数据集。

Inputs : AvgLenD1 (20) , AvgLenD2 (50) ;

Varaiables : AvgD1(0) , AvgD2 (0) ;

截下来,变量赋值语句。在这些语句中,引用 data1,data2 不仅是提示作用,

是用到各个数据集的 Close 指令。

Inputs: AvgLenD1(20), AvgLenD2(50);

Variables: AvgD1(0), AvgD2(0);

AvgD1 = Average(Close Data1, AvgLenD1);

AvgD2 = Average(Close Data2, AvgLenD2);

AvgD1 是 data1 的 20bar 均值,AvgD2 是 data2 的 50bar 均值。

交易策略仅包含简单的多仓入场、退场。

Inputs: AvgLenD1(20), AvgLenD2(50);

Variables: AvgD1(0), AvgD2(0);

AvgD1 = Average(Close Data1, AvgLenD1);

AvgD2 = Average(Close Data2, AvgLenD2);

Page 100: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 96

If Close > AvgD1 and Close Data2 > AvgD2 then

Buy next bar at market

else

Sell next bar at market;

返回到图形分析窗口,两次插入指标 Mov Avg 1 Line。

在第一次插入指标时,使用菜单栏的插入→指标,确保提示设置已勾选,在

输入值选项卡将 Length 设置为 20。

在第二次插入指标时,使用菜单栏的插入→指标,确保提示设置已勾选,在

输入值选项卡将 Length 设置为 50,在常规选项卡中将“本研究基于”选项中选

择数据集 2。

完成以上步骤,系统将会计算图表中插入的两个代码的均值并绘图。

现在把策略加载到图表上。

#29 Multidata MA

Page 101: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 97

28. 动态格式

图形颜色、线形以及背景颜色可以在分析技术中用预留单词 SetPlotColor,

SetPlotWidth 以及 SetPlotBGColor。

图形分析及雷达屏 SetPlotColor ( 图形编号 , 颜色);

图形分析 SetPlotWidth ( 图形编号 , 宽度);

雷达屏 SetPlotBGColor ( 图形编号 , 颜色);

上述三个命令,PlotNumber 是从 1 到 99 的数字,代表需要修改的图形。

颜色参数是 EasyLanguage 用于着色的,以下 16 个颜色可用:

Black

Blue

Cyan

Green

Magenta

Red

Yellow

White

DarkBlue

DarkCyan

DarkGreen

DarkMagenta

DarkRed

DarkBrown

DarkGray

LightGray

例如,

SetPlotColor(1, yellow);

注意:这 16 个颜色以数字识别的。此外,还可以用基本色 RGB(Red, Green,

Blue)来设置调色盘。更多信息可以查看字典或者帮助文档。

参数 Width 用于绘图的宽度。用户可以用数字 0 到 6,0 代表最细,6 代表

最粗。在这些语句中可以添加条件语句,根据用户定义的逻辑表达式自动改变颜

色和宽度。

Page 102: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 98

练习题:*30 High Volume Bars

学习内容:使用 SetPlotColor 集 SetPlotWidth 命令设置动态格式。

描述:指标绘制成交量的直方图,大成交量的宽度更粗,颜色不同。

创建新指标#30 High Volume Bars。在输入值中声明高成交量、高成交量对应

直方图的宽度、颜色。

Inputs : HiVolume(500000), LineWidth(4), LineColor(yellow);

着色及宽度我们使用批条件语句。

Inputs : HiVolume(500000), LineWidth(4), LineColor(yellow);

If Ticks > HiVolume then begin

SetPlotColor(1, LineColor);

SetPlotWidth(1, LineWidth);

end;

再添加绘图语句:

Inputs : HiVolume(100000000), LineWidth(4), LineColor(yellow);

If Ticks > HiVolume then begin

SetPlotColor(1, LineColor);

SetPlotWidth(1, LineWidth);

end;

Plot1( Ticks, “Volume”);

验证指标,在图表上插入指标。用户可以在输入值中修改高成交量的取值。

#30 High Volume Bars

Page 103: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 99

Page 104: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 100

29. 颜色渐变

图形的颜色(或雷达屏的前台、背景的颜色)可以用变量数值的方式设置成

渐变。这允许用户创建基于价格事件的指标以增强可视化效果。

GradientColor (Value1, -10, 10, Red, Green );

上述语句指示软件根据 Value1 的数值选择颜色,取值从-10 到 10 的将从红

色到绿色产生渐变。

下一个练习题将利用颜色渐变为雷达屏设计指标。

Page 105: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 101

30. 雷达屏绘图语句

在雷达屏窗口,绘图语句根据雷达屏单元放置的信息指示软件绘图。这些信

息可以是数值,也可以是逻辑值或文本。每个绘图语句在雷达屏窗口给分析技术

创建一列。

PlotN (单元格内容 , “图形名称”);

N 取 1 到 99

单元格内容可以是:

单元格中呈现的数值

单元格中呈现的逻辑值

放置在单元格中的文本

图形名称是赋予雷达屏窗口列标题和属性对话框中图形的标签。

雷达屏绘图语句示例:

在单元格中加入逻辑值 Condiotion1:

Plot1 ( Condition1, “MyCondition”);

在单元格中加入数值 Value1:

Plot1 ( Value1, “MyCalculation”);

在单元格中加入文本 UpBar 或 DownBar:

If Close > Close[1] then

Plot1(“UpBar”, “Change”)

else

Plot1(“DownBar”, “Change”);

注意:给图形命名是非必须的,但是我们建议命名。其他非必须参数可以在

属性中设置。

Page 106: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 102

练习题:*31 Real Body Avg RS

学习内容:编写雷达屏绘图语句。

描述:在雷达屏的单元格根据箱体均值输入单词 Bullish 或 Bearish,并显示

箱体均值。单元格的背景根据箱体均值进行渐变着色。

创建新指标#31 Real Body Avg RS。基本的计算与指标#12 Real Body Avg 一

样,只需添加适合雷达屏的语句。编写#12 Real Body Avg 时,没有用输入值,在

本练习题中我们使用输入值提高可视化效果。

Input: Length (10);

Vars: RB(0), AvgRB(0) ;

RB = Close – Open;

AvgRB = Average (RB, Length);

添加第三个变量赋值语句:预留逻辑变量 Condition1 的赋值语句

Input: Length (10);

Vars: RB(0), AvgRB(0) ;

RB = Close – Open;

AvgRB = Average (RB, Length);

Condition1 = AvgRB > 0;

现在添加条件语句,给文本变量 Direction 赋值。同时,在雷达屏窗口添加

数值、文本变量列。最后,添加两个 SetPlotBGColor 语句实现背景渐变着色。

Input: Length (10);

Vars: RB(0), AvgRB(0);

RB = Close – Open;

AvgRB = Average (RB, Length);

Condition1 = AvgRB > 0;

If Condition1 then

Direction = “Bullish”

Else

Direction = “Bearish”;

Plot1(Direction, "RB Dir");

Plot2(AvgRB, "AvgRB");

SetPlotBGColor(1, GradientColor(AvgRB, -.015, .015, red, green));

SetPlotBGColor(2, GradientColor(AvgRB, -.015, .015, red, green));

Page 107: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 103

检查已输入的语句。我们已经输入了两个绘图语句,在雷达屏窗口将以单独

的列出现。第一个图形,名为 RB Dir, AvgRB 大于 0 时,输入单词“Bullish”;

反之输入“Bearish”。第二个图形,名为 AvgRB,将在单元格中输入 AvgRB 的

数值。

此外,单元格的背景颜色,负值为红色,正值为绿色,并根据 AvgRB 的取

值而渐变着色。换言之,软件将根据 AvgRB 有多牛或多熊来渐变。

注意,变量 Direction,声明的方式如下:Direction(“ ”),标识变量 Direction

存在且为文本变量。文本变量在声明语句中被括号以及双引号包围。Direction 用

条件语句赋值,根据 Condition1 的取值赋予不同的值。换言之,如果 Condition1

为真,Direction 为 Bullish;若为假,Direction 为 Bearish。

Input: Length (10);

Vars: RB(0), AvgRB(0),Direction(“”);

RB = Close – Open;

AvgRB = Average (RB, Length);

Condition1 = AvgRB > 0;

If Condition1 then

Direction = “Bullish”

Else

Direction = “Bearish”;

Plot1(Direction, "RB Dir");

Plot2(AvgRB, "AvgRB");

SetPlotBGColor(1, GradientColor(AvgRB, -.015, .015, red, green));

SetPlotBGColor(2, GradientColor(AvgRB, -.015, .015, red, green));

验证指标,在编辑器窗口点击右键,选择属性打开属性设置对话框。

在常规选项卡,有可选项“为累计计算加载更多数据”,这个设置仅在雷达

屏中可用。这个选项将指示软件加载更多数据,以获得充分的数据计算。点击详

细信息按钮,获得更多的信息。在本例中,我们将图条数设置为 20.

点击网络样式选项卡,将图形 AvgRB的类别→数字的小数位数设置为 3,以

Page 108: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 104

展示更多信息。单击确认按钮,再次验证指标,并将其加载到雷达屏上。用户可

以根据指标的数值排序来查看渐变颜色。

#31 Real Body Avg RS

Page 109: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 105

31. 变量:获取值

变量存储 bar 到另一个 bar 的值,直到被重新赋值,如重新设置或重新计算。

因此用户可以获取变量的值,无限期使用。变量赋值语句通常在条件语句中,因

而变量仅在条件为真时设置或计算。变量存储新的值,直到下一次条件为真。

例如,

If Time = SessionFirstBarTime(1,1) then

Value1 = Close - Close [1];

变量 Value1 计算当前 bar 与最近的 bar 收盘价的净变动。在日线图上,仅在

每天的第一个 bar 时计算;变量 Value1 存储计算值,直到下一交易日的第一个

bar。

现在通过一个练习题来尝试获取并存储值。

Page 110: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 106

练习题:*32 Intraday H and L

学习内容:获取并存储值,使用时期引用。

描述:指标绘制两条线图:当前 bar 所在天的最高价、最低价。指标在日线

图上使用。

创建新指标#32 Intraday H and L,在编辑器中,声明数值变量DHigh及DLow,

并用条件语句来获取、存储一天中第一个 bar 的 High, Low 值。通过每个 bar 的

时间与函数 SessionFirstTime 函数返回的事件相比较,识别一天的第一个 bar。如

果二者相等,则表明 bar 为一天的第一个。

Var: DHigh(0), DLow(0);

If Time = SessionFirstTime(1, 1) then begin

DHigh = High;

DLow = Low;

end

下一步,添加语句在第一个 bar 之后检查新的最高值、最低值:

Var: DHigh(0), DLow(0);

If Time = SessionFirstBarTime(1, 1) then begin

DHigh = High;

DLow = Low;

end

else begin

If High > DHigh then

DHigh = High;

If Low < DLow then

DLow = Low;

end;

最后,在条件语句中加入两个绘图语句,绘制变量 DHigh 及 DLow 的线图,

以保证图形整个范围的连续性。

Var: DHigh(0), DLow(0);

If Time = SessionFirstBarTime(1, 1) then begin

DHigh = High;

DLow = Low;

end

else begin

If High > DHigh then

Page 111: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 107

DHigh = High;

If Low < DLow then

DLow = Low;

end;

If DLow <> 0 then begin

Plot1(DHigh, "DayHigh");

Plot2(DLow, "DayLow");

end;

验证指标,并将属性→坐标轴位置设置为与标的数据相同。

在图表上插入指标。注意一天第一个 bar 最高价、最低价被获取并存储。这

些值一直被存储绘图直到新的最高、最低出现。

#32 Intraday H and L

Page 112: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 108

32. 变量:事件计数

变量也可用于计数器。在条件语句中加入变量用于事件计数。变量只有在条

件为真时才增加或减少。

由于变量在重新计算前存储值,因而有时候需要重新设置变量,例如当条件

变为假时。

Vars: UpCount(0);

If Close > Close[1] then

UpCount = UpCount +1

else

UpCount = 0

变量 UpCount 追踪收盘价连续上涨的数量,在收盘价不上涨时重设为 0。

Page 113: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 109

练习题:*33 Streak

学习内容:使用变量进行事件计数,并重设变量。

描述:指标显示连续向上或向下趋势时当前 bar 的序号,换言之,计算当前

连续向上或向下的 bar 数。在雷达屏中使用。

创建新指标#33 Streak,首先,声明两个变量,UpCounj 及 DownCount,

UpCount 用来计算连续上涨的 bar 数,DownCount 计算连续下跌的 bar 数。

Vars: UpCount(0), DownCount(0);

然后,编写语句,收盘价连续上涨时计数,收盘价不上涨重设为 0。当然,

需要添加语句在趋势反转时给连续下跌计数或没有更低收盘价时重设为 0.在输

入值中声明变量提高灵活性。

Inputs: Price(Close);

Var: UpCount(0), DownCount(0);

If Price > Price[1] then

UpCount = UpCount + 1

else

UpCount = 0;

If Price < Price[1] then

DownCount = DownCount - 1

else

DownCount = 0;

注意到 DownCount 赋负值,在雷达屏上排序更方便。

图形背景颜色可以用输入值中 UpColor 及 DownColor 来自定义。图形及颜

色命令编写在条件语句内,这样单元格颜色及绘图是带条件的。

Inputs: Price(Close), UpColor(green), DnColor(red);

Var: UpCount(0), DownCount(0);

If Price > Price[1] then

UpCount = UpCount + 1

else

UpCount = 0;

If Price < Price[1] then

DownCount = DownCount - 1

Else

DownCount = 0;

If UpCount > 0 then begin

Plot1(UpCount, "Streak");

Page 114: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 110

SetPlotBGColor(1, UpColor);

end

else begin

Plot1(DownCount, "Streak");

SetPlotBGColor(1, DnColor);

end;

验证指标,在编辑器窗口单击右键,选择属性打开属性设置对话框。在常规

选项卡,勾选“为累计数据加载更多数据”,该指标将只能被应用到雷达屏。这

个选项将指示软件加载更多数据,以获得充分的数据计算。点击详细信息按钮,

获得更多的信息。在本例中,我们将图条数设置为 20,重新验证指标,并将其加

载到雷达屏上。

在图表中应用这个指标会怎么样呢?我们来试验一下。如上所述,指标将创

建两个振荡指标 UpCount 及 DownCount。

但是,我们提两个建议,以使指标插入到图形上更有用。首先,在

SetPlotBGColor 前添加 SetPlotColor 语句,修改指标的图形外观。第二,在指标

属性窗口将图形类型设置为直方图。

Inputs: Price(Close), UpColor(green), DnColor(red);

Var: UpCount(0), DownCount(0);

If Price > Price[1] then

UpCount = UpCount + 1

else

UpCount = 0;

If Price < Price[1] then

DownCount = DownCount - 1

Else

DownCount = 0;

If UpCount > 0 then begin

Plot1(UpCount, "Streak");

SetPlotColor(1, UpColor);

SetPlotBGColor(1, UpColor);

end

else begin

Plot1(DownCount, "Streak");

SetPlotColor(1,DnColor);

SetPlotBGColor(1, DnColor);

end;

Page 115: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 111

#33 Streak

#33 Streak

Page 116: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 112

练习题:*34 Trade Highs Lows

学习内容:使用变量进行事件计数,并使用内置止盈止损。

描述:在输入值中定义 LowsToBuy 表示最小的连续新低数,HighsToSell 表

示最小的连续新高,Pts 表示限价的点数,ProfTgt 及 StopLoss 分别表示利润目标

及止损位。策略在新高数达到 LowsToBuy 时以限价单开多仓入场,新低数达到

HighsToSell 时以限价单开空仓入场;限价单以信号出现当时 bar 的收盘价为基础

加减限价点数,达到目标利润或止损位时,退场。

创建新策略#34 Trade Highs Lows ,如上所述,策略在新高数达到 LowsToBuy

时以限价单开多仓入场,新低数达到 HighsToSell 时以限价单开空仓入场。从策

略角度而言,这个策略实际上是逆势投资。换言之,如果出现一系列新低,策略

买入;出现一系列新高,策略卖出。

第一步,声明两个变量,HiCount 及 LoCount,然后在条件语句中计算新高、

新低的数量

Var: HiCount (0), LoCount (0);

If Low < Low [1] then

LoCount = LoCount +1

Else

LoCount = 0;

If High > High [1] then

HiCount = HiCount +1

Else

HiCount = 0;

接下来,编写下单语句产生限价单:

1. 在连续出现特定数量的新低时,开多仓买入;

2. 在连续出现特定数量的新高时,开空仓卖出;

在下单前出现多少个新高及新低数,取决于用户。使用输入值会更灵活。在

练习题中用 LowsToBuy 及 HighsToSell 表示,初始值设为 2。此外,限价点数初

始值设为 0.02,目标利润及止损位 ProfTgt 及 StopLoss 的初始值均设置为 50。

Page 117: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 113

完整的策略如下:

Input: LowsToBuy(2), HighsToSell(2), Pts(.02), ProfTgt(50), StopLoss(50);

Var: HiCount(0), LoCount(0);

If Low < Low[1] then

LoCount = LoCount + 1

Else

LoCount = 0;

If High > High[1] then

HiCount = HiCount + 1

else

HiCount = 0;

If LoCount >= LowsToBuy then

Buy next bar at close of this bar - Pts limit;

If HiCount >= HighsToSell then

SellShort next bar at close of this bar + Pts limit;

SetStopPosition;

SetProfitTarget (ProfTgt);

SetStopLoss (StopLoss);

验证指标,并将其插入到图表上。同时,插入标示点 Consecutive Downs 及

Consecutive Ups,提高可视化效果。

Consecutive Downs 的 属 性 设 置 中 设 置 输 入 值 价 格 为 Low ,

ConsecutiveBarsDown 参数设为 2,其他参数与策略一致。

Consecutive Ups 的属性设置中设置输入值价格为 High,ConsecutiveBarsUp

参数设为 2,其他参数与策略一致。

#34 Trade Highs Lows

Page 118: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 114

33. 查看输出:打印日志

TradeStation 界面提供打印日志功能。用户可以在 TradeStation 平台(不是开

发环境)点击菜单栏的视图→EasyLanguage 打印日志栏,查看打印日志栏。窗格

默认在窗口的底部。

分析技术、策略中可以编写指令,在打印日志窗格中输出数值、逻辑值及文

本。打印语句格式如下所示。引号中的项目为文本,如数值的标签。

Print (“Date”, Date, “Value1”, Value1, “Condition1”, Condition1);

上述命令将日期、Value1 的数值及 Condition1 的数值发送到打印日志窗格

中。每个值前包含带引号的标签。

Page 119: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 115

34. 查看输出:分析注释

分析技术及策略中可以编写指令发送文本、数值、逻辑值到分析注释窗口。

分析注释窗口仅可从应用了包含该指令的分析技术或策略的图形分析(雷达屏、

期权工作站)窗口打开。通过工具栏 按钮或属性→分析注释,单击想要查看

分析注释的 bar,查看分析注释。

分析注释格式如下:

Commentary(“Date”, Date, “Value1”, Value1, “Condition1”, Condition1);

上述命令将日期、Value1 及 Condition1 发送到分析注释窗口,每个值前包含

带引号的标签。

Page 120: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 116

练习题:*35 Momentum Cross2

学习内容:使用打印日志及分析注释语句将信息发送到打印日志及分析注释

窗格。

描述:指标重新编写#25 Momentum Cross。这个策略在前 4 个 bar 没有下穿

0,当动量上穿 0 时,开多仓;前 4 个 bar 没有上穿 0,动量下穿 0 时,开空仓。

连续两个动量下跌时,平多仓;连续两个动量上涨时,平空仓。

打开#25 Momentum Cross,点击菜单栏的文件→另存为,将文件另存为#35

Momentum Cross2,点击确认按钮。

以上操作以新的名称为策略保存了复本。现在可以添加打印日志、分析注释

语句。

首先在末尾添加打印语句:

Print("Date", Spaces(2), Date:7:0, Spaces(2), "Time", Spaces(2), Time:4:0,

Spaces(2), "Mom", Spaces(2), Mom, Spaces(2), "BullCx", Spaces(2), BullCx,

Spaces(2), "BearCx", Spaces(2), BearCx);

接下来添加注释语句:

Commentary("Date", Spaces(2), Date:7:0, Spaces(2), "Time", Spaces(2),

Time:4:0, Spaces(2), "Mom", Spaces(2), Mom, Spaces(2), "BullCx",

Spaces(2), BullCx, Spaces(2), "BearCx", Spaces(2), BearCx);

细看一下打印及注释语句包含的信息:

“Date”:引号中的单词 Date 是后面日期值的标签

Spaces:预留单词,在标签和值之间插入空格

Date:7:0:预留单词 Date 返回分析所指向 bar 的收盘日期,日期的格式为

Page 121: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 117

YYYMMDD,年度 YYY 从 1900 年起,MM 表示月份,DD 表示日期。例如,

1030611 表示 2003 年 6 月 11 日。Date:7:0 指引软件日期格式为:在小数点前有

7 位数,小数点后不含数

“Time”:引号内的单词 Time 是时间的标签

Time:4:0:预留单词返回分析所指向 bar 的收盘时间,例如,如果为下午

4 点,则返回 1600。Time:4:0 指引软件日期格式为:在小数点前有 4 位数,小数

点后不含数

“Mom”:Mom 数值的文本标签

Mom:Mom 的值,等同于 Momentum: Mom = Momentum (Close, Length)

“BullCx”: BullCx 的文本标签

BullCx:BullCx 的值,输出 TRUE 或 FALSE

“BearCx”: BearCx 的文本标签

BearCx: BearCx 的值,输出 TRUE 或 FALSE

完整的策略如下:

Input : Length (10) ;

Vars : Mom(0) , BullCx (false) , BearCx (false);

Mom = Momentum (Close, Length);

BullCx = Mom crosses over 0;

BearCx = Mom crosses under 0;

If BearCx and MRO( BearCx ,4,1) = -1 then

Buy next bar at Close of this bar limit;

If BearCx and MRO( BullCx, 4, 1) = -1 then

SellShort next bar at Close of this bar limit;

If Mom < Mom [1] and Mom [1] < Mom [2] then

Sell next bar at market;

If Mom > Mom [1] and Mom [1] >Mom [2] then

BuyToCover next bar at market;

Print("Date", Spaces(2), Date:7:0, Spaces(2), "Time", Spaces(2), Time:4:0,

Spaces(2), "Mom", Spaces(2), Mom, Spaces(2), "BullCx", Spaces(2), BullCx,

Spaces(2), "BearCx", Spaces(2), BearCx);

Commentary("Date", Spaces(2), Date:7:0, Spaces(2), "Time", Spaces(2), Time:4:0,

Spaces(2), "Mom", Spaces(2), Mom, Spaces(2), "BullCx", Spaces(2), BullCx,

Spaces(2), "BearCx", Spaces(2), BearCx);

验证指标,在图形上插入策略。你可以在打印日志窗格中查看信息,用右边

栏的滚动条可将信息滚动到顶部。

Page 122: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 118

可以用分析注释按钮 或菜单栏的视图→分析注释,然后单击图表中的 bar,

查看分析注释信息。

#35 Momentum Cross2

恭喜您已经完成 EasyLanguage 学习课程的第一部分!您已经成功掌握了

EasyLanguage,并具备挖掘 TradeStation 力量及潜力的本领了!

TradeStation 团队

Page 123: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 119

附录 A

TradeStation 开发环境

TradeStation 开发环境为用户提供了一套完整的创建、编辑文档的工具,包

括分析技术、策略、函数。

TradeStation 开发环境作为一个独立的应用程序运营。点击操作系

统的开始→所有程序,将会出现开发环境的图标,用户也可以点击

TradeStation 平台工具栏的 EasyLanguage 图标打开开发环境。

开发环境有三个主要部分,编辑器、输出栏、字典。在创建新文档或挡开现

有文档时,编辑器就会打开。输出栏默认在底部,字典默认在右边栏。

创建新文档

创建新分析技术、策略,用户可以点击菜单栏

文件→新建,选择新建文档的类型;也可以点击工

具栏的新建按钮,有两种点击方式:一种是点击白

纸状的图标 ,或点击向下的按钮,将会打开下

拉菜单,为用户提供可选择的文档类型。

Page 124: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 120

自动完成

自动完成监视输入,并弹出提示框,

显示预留单词及函数列表供用户完成输

入。基于用户输入的单词,自动完成窗

口将显示与输入想匹配的预留单词及函

数列表,列表按照首字母排序。

一旦用户输入值或变量在文档中声

明过,输入值、变量也会出现在自动完

成列表中。

自动完成也可给用户提示单词或函数的参数。当用户输入函数,输入左边括

号或从字典中将函数拖入编辑器时,将会出现预留单词或函数的简单描述。

注意:指标旁的*提示用户指标未保存。

大纲

大纲是编辑器的功能,允许用户折叠、展开代码。大纲功能自动将输入值、

变量声明、条件语句、注释列为大纲。单击大纲的-将折叠区域的代码,+将打

开区域的代码。

Page 125: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 121

自定义大纲

在开发环境中,用户可以自

定义大纲。预留单词#Region,

#EndRegion,自定义大纲区域。

图中自定义大纲区域开头的单

词 #Region 左 侧 出 现 - ,

#EndRegion 单词结束。该功能

允许用户在任何区域均能够自

定义大纲,以提高组织结构的可读性。

大纲工具

大纲工具帮助用户使用大纲。在开发环境中点击

菜单栏工具栏→大纲,以显示大纲工具栏。用户可以

点击输入值、变量声明、批条件语句左侧的减号来折

叠语句,加号展开语句。单击任意输入值、变量声明、

批条件语句,编辑器相关区域将会高亮。右图显示三

个输入值、两个变量及两个批条件语句。

字典

在开发环境的右边栏,点击标有字典的

标签进入字典。字典在创建、编辑分析技术、

策略的时候非常有用。点击对象窗格任意类

别,在右边成员窗格将展示此类别所包含的

成员。在搜索栏输入预留单词或函数,单击

箭头或按 enter 键。点击其中一个单词,在描

述窗格出现简短的描述和例子。预留单词及

函数可以直接拖拽到编辑器中。左图显示搜

索“time”的结果。字典简化了搜索所需要的

预留单词和函数过程。

Page 126: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 122

行号

点击菜单栏的窗口工具栏→选项,打开对话框,在常规选项卡,勾选行号,

点击确认,可以在编辑器中显示行号,有助于快速识别错误所在的行。

Page 127: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 123

附录 B

成交量及笔数

对于交易者而言,成交量(Volume)代表成交的股票数或合约数,成交笔数

(Ticks 或 Tick)计算交易的笔数。这些单词也是 EasyLanguage 的组成部分,诸

如 Upticks 及 Downticks 的变量也为 EasyLanguage 变量。虽然它们的含义与交易

术语一致,但是在雷达屏、不同类型的图形上处理是不同的。

以下因素会影响单词处理方式:

窗口类型:

图形分析

雷达屏

代码类型

股票

期货

外汇

图形间隔

日内线

每天、每周、每月

属性设置

日内线的时间、成交笔数、成交量计算设置

更多信息参加下表,点击 www.TradeStation.com/support/training/downloads,

选择文件名为 Volume Reserved Words Reference Table,可下载。

Page 128: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 124

EasyLanguage 中成交量、笔数、持仓量相关的预留单词

股票-图形分析

设置

预期值

日内线(时间、成交笔数、成交量的 Bar图) 日线(或周期更长)

选择“交易总量” 选择“笔数”

成交量 Ticks Volume 或 Ticks

成交笔数 Ticks

上涨成交量 UpTicks

下跌成交量 DownTicks

上涨笔数 UpTicks

下跌笔数 DownTicks

股票-雷达屏

预期值 所有间隔

成交量 Volume 或 Ticks

注意:上涨成交量(UpTicks)与下跌成交量(DownTicks)包含“0+”的交易。

下跌笔数及下跌成交量包含“0-”交易。“交易总量”及“笔数”选项可在设置代

码对话框中找到。

期货-图形分析

设置

预期值

日内线(时间、成交笔数的 Bar 图) 日线(或周期更长)

选择“交易总量” 选择“笔数”

成交量 Ticks Volume 或 Ticks

成交笔数 Ticks

上涨成交量 UpTicks

下跌成交量 DownTicks

上涨笔数 UpTicks

下跌笔数 DownTicks

持仓量 OpenInt

股票-雷达屏

预期值 日内线 日线(或周期更长)

成交量 Volume 或 Ticks Volume

持仓量 OpenInt

注意:上涨笔数与上涨成交量包含“0+”的交易。下跌笔数及下跌成交量包含

“0-”交易。“交易总量”及“笔数”选项可在设置代码对话框中找到。

Page 129: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 125

外汇-图形分析

设置

预期值

日内线(时间、成交笔数的 Bar 图)

选择“笔数”

成交笔数 Ticks

上涨笔数 UpTicks

下跌笔数 DownTicks

注意:以上计算时,修改外汇报价的情况计一笔。上涨笔数与上涨成交量包

含“0+”的交易。下跌笔数及下跌成交量包含“0-”交易。“交易总量”及“笔数”

选项可在设置代码对话框中找到。以上变量在外汇的雷达屏窗口均不可用。

Page 130: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 126

附录 C

参加 TradeStation 面对面现场培训课程

EasyLanguage 训练营是为期两天的实践课程,提供 EasyLanguage 实践知

识,强调随学随用的实用信息。根据指导,用户在创建策略、指标、标示点、着

色条以及专为雷达屏设计的研究过程中一步步完成练习。

注意:EasyLanguage 学习课程基于 EasyLanguage 训练营在线课程,并且用

到了一些相同的例子。

精通 EasyLanguage 策略课程为期两天,以本课程及训练营中所涉及知识为

基础,目的在于更深层次地使用 EasyLanguage,完成策略的创建、回测及自动化。

课程包含日内下单、多间隔分析、加仓、平掉某个进场的仓位等。教学方式

与我们学习的其他课程相似,以练习实例任务为导向。

学习课程在电脑实验室中开展,每个课程都配备了安装了 TradeStation 的电

脑,为您学习 EasyLanguage 必备知识以及应用自己的分析技术和策略提供实践

机会。

更多关于课程位置、获取方式以及时间信息,可拨打800-8087-3241或访问

网址https://www.tradestation.com/support/training/courses查看现场课程日历。

Page 131: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 127

附录 D

导入本课程的实例

本课程所用的全部实例都可以在网站下载并导入:

http://www.tradestation.com/ELHSC

挑战题教学视频

前文提到过,挑战题的答案以及解析可参见在线视频:

http://www.tradestation.com/ELHSC

此外,后附挑战题的答案及解析,且有挑战题的示例图片。

Page 132: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 128

附录 E:挑战题答案

挑战题 1:*03High and Low

学习内容:在指标中使用作图语句。

编写指标,绘制连接 bar 最高价的线图以及最低价的线图。

设置属性为:

显示线性,且将图形显示在价格数据同一个子图中。

提示:指标需要两个绘图语句。最高价的预留单词为 High,最低价为 Low。

Plot1( High, “Hi”);

Plot2(Low, “Lo”);

Page 133: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 129

挑战题 2:*08 Bands

学习内容:使用中括号引用历史数据。

编写指标,在价格数据两边绘制两个线图。

一个图形在当前 bar 的开盘价基础上加前一个 bar 全距的一半。

另一个图形在当前 bar 的开盘价基础上减前一个 bar 全距的一半。

记住:全距是最高价减最低价。如何表达前一个 bar 的全距呢?

指标应该与价格数据重叠,因此刻度轴设置为“与标的物数据相同”。

Plot1(Open + (High[1] - Low[1]) *.5, "HighBand");

Plot2(Open - (High[1] - Low[1]) *.5, "LowBand");

Page 134: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 130

挑战题 3:*13 Envelope

学习内容:使用用户定义的数值变量,并调用函数。

编写一个指标,绘制 20 个 bar 最高价与最低价的移动平均。

为两个移动平均值选择名称并声明变量,然后进行变量赋值。

这个指标应该在价格数据的同一个区域绘图。

提示:Average 函数可以从字典中直接拖入编辑器中。

Vars: UpperLine(0), LowerLine(0);

UpperLine = Average(High, 20);

LowerLine = Average(Low, 20);

Plot1(UpperLine, "UpperLine");

Plot2(LowerLine, "LowerLine");

Page 135: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 131

挑战题 4:*19 Weak Close

学习内容:使用批 If…Then…Else 及 NoPlot 语句编写标示点。

编写标示点,标示出收盘价处于倒数第三的 Bar(即收盘价低于最高价、开

盘价但高于最低价)。使用 NoPlot 语句,在 Bar 收盘后条件变为假时删除标示点。

在事件发生时,包含预警指令。

Bar 的全距是 High – Low, Range 函数可以直接计算。

Input: RangePortion(3);

If Close < Low + (Range / RangePortion) then begin

Plot1(High, "Weak Close");

Alert;

end

else

NoPlot(1);

Page 136: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 132

挑战题 5:*22 Parts Of Day

学习内容:使用时间和逻辑运算符编写着色条。

编写着色条,对一天的前几个和最后几个小时 Bar 的下半部分着色。

将描绘一天的第一个和最后一个小时的时间作为输入值进行声明。

Inputs: FirstPartEnd(1030), LastPartStart(1501);

If Time <= FirstPartEnd or Time >= LastPartStart then

PlotPB(Low, (High + Low) * .5, "PartsOfDay");

Page 137: EasyLanguage 学习课程€¦ · 保TradeStation 能够理解并应用我们所创建的EasyLanguage 研究。 小贴士:不要试图与EasyLanguage 的规则抗争。 如果某地方需要使用分号或括号,就按照要求编程。遵循语法、句子结构和

EasyLanguage 学习课程(译)

国信证券交易服务团队翻译 联系邮箱:[email protected] 133

挑战题 6:*26 Key Reversal

学习内容:使用用户定义逻辑变量;bar 样式;限价单语法。

编写策略,使用向上、向下的关键反转识别入场时点。

为向上、向下的关键反转进行变量声明及赋值。

在策略中加入限价单,在向上关键反转出现时以当前 bar收盘价的限价买入。

在策略中加入限价单,在向下关键反转出现时以当前 bar 收盘价的限价开空

仓卖出。

在设置限价单时,输入值中声明,向上、向下反转的 bar 收盘价的点数限制,

默认设为 5 个点。

Input: LimitPoints(.05);

Vars: RevUp(false), RevDown(false);

RevUp = Low < Low[1] and Close > Close[1];

RevDown = High > High[1] and Close < Close[1];

If RevUp then

Buy next bar at Close of this bar - LimitPoints limit;

If RevDown then

SellShort next bar at Close of this bar + LimitPoints limit;