因为父亲经常炒期货,我速成一下麦语言来减轻一下他的工作量吧。
⚠ 我体验下来觉得期货风险真的特别大, 能看盘时还是盯着点比较好.
随着我逐渐了解才发现量化交易并没有我想象中那么简单...单说 这些业内人士使用的语言就五花八门...🤦♂ 这位仁兄则让我大概了解了局面. 站在一个接触编程有一段时间的人的角度,我是觉得用C#编写模型比用麦语言看着NB多了,但我明显没那水平和精力,更何况我觉得知乎这个提问里的回答都说的很有道理,能赚钱的工具就是好工具 。还是老老实实研究一下传说中用易语言编写的麦语言🤦♂
看资料过程中交易开拓者(简称TB)和 MultiCharts(简称MC)也经常被提及。
主要参考资料
我觉得最蛋疼的是这玩意好像没法debug啊!!😧
- 网上找到的一套PPT教程,并附上对应视频教程的百度云链接
- 智赢wh8使用说明书
- wh8趋势跟踪模型语法参考
- wh8算法交易模型语法参考
这套PPT有文华财经的水印,大概是官方教程吧。而且我觉得讲得很浅显也比较详细了,好评😄
麦语言语法简记
算法交易模型与趋势跟踪模型
打开wh8后我发现可以用来交易的分两种模型 (即代码), 分 算法交易模型和趋势跟踪模型, 普通的趋势交易策略使用趋势模型编写,加载到程序化平台运行实现自动交易;与趋势无关的盘口高频交易模型,需要用算法模型编写. 一开始我并没有理解这两种模型的区别, (实际这两个模型的名字非常直白的指出了两者的应用领域) 看到算法交易模型使用的是类C语法就果断开始写这个, 后来我才发现其中区别:
- 趋势跟踪模型中可以调用很多常用分析指标, 比如布林通道, 比如指数加权移动平均, 更注重对目标的趋势的分析
- 算法跟踪模型更多的是能调用未经处理的精确数据, 甚至不提供EMA等很常用的分析指标 (如果需要只能自己写), 这类模型更注重于对实时行情 (即盘口) 的处理.
- 算法交易模型的回测只提供一日的tick数据, 不支持更久的回测.
看了wh8说明书中相关章节 个人觉得算法交易模型更多应当与趋势跟踪模型配合使用, 说明书有句话说得好
利用趋势模型可以有效捕捉趋势行情的交易方向,当交易方向确定,下一步便是寻找入场点。一个精准的入场点位是交易成功的起点,使用盘口的高频报价辅助判断无疑是最合适的方案
也即是说由趋势模型判断是做多还是做空, 由算法模型判断买, 卖精确时间是比较科学的运用方式.
由于我需要写的模型并不要求高频交易, 主要的是做小时线, 因此只建立趋势模型. (趋势模型语法太低级也只好忍了😢)
一开一平信号过滤模型·加减仓模型等
以上是一种分类方式, 另外按交易行为分类可以分为一开一平信号过滤模型, 加减仓模型等模型. 一开一平模型限定了必须一平跟随一开或者一开跟随一平, 如果是简单模型还是很方便, 但无法特定开仓手数, 只能在开始运行模型时指定整个模型开仓手数, 也无法加仓. 而加减仓模型打破了前述弊端, 但需要自己设置开闭仓信号滤波器, 费点脑子. 模型列表
算法交易模型与C的比较
因为也体验了一会算法模型的语法, 稍作整理. 使用下来感觉与C语言语法区别主要如下:
- 不需要引用头文件
- 变量可以用GLOBAL_VAR或VAR关键字来声明, 变量是动态数据类型, 似乎也可以使用 WriteGlobal, WriteGlobalF 等来定义整型, 浮点等变量. (文华给出的所有示例中定义变量竟然全部定义的全局变量也是很迷了)
- 函数类型可以是VOID或VAR, 当然如果需要返回值需要定义为VAR型
- 函数, 变量可以先引用后声明
- 麦语言的函数是可以有返回值的! 但是要把要返回的值括起来. (参考这里)
趋势跟踪模型语法简记
语句 | 注释 |
---|---|
= | 等于操作符 :warning:趋势模型中赋值操作符为:= . 应注意等于操作符只有一个= |
: | 定义变量并且加载模型时显示图线. 冒号前为变量名. |
:= | 定义变量并且不显示图线 |
#IMPORT [PERIOD,N,FORMULA] AS VAR | 见下 |
&& | 逻辑与 |
|| | 逻辑或 |
IF, THEN | 参见这里 |
模组
算法交易模型中可以调用的一大串函数有类似👇这样的函数说明.
1 | 注: |
开始我以为模组也是模型的意思, 后来看到示例里的用法似乎模组类似于类, 每个模组对应一个实例, 可以调用里面的各种函数来处理这个合约的数据, 而且每个模型也可以是一个模组一个模型可以调用另一个模型的函数, 就很像类. 🤔我是这样理解的
逻辑判断
看过wh8给出的示例后我发现官方风格写法里趋势模型基本没有用过IF, ELSE什么的, 普遍是一句话浓缩一串条件搞定. 主要这玩意语法就让人懒得写IF, ELSE...而算法模型中运用IF, ELSE较多.
很有意思的是趋势模型中可以将一串判断条件赋值给一个变量作为布林变量. 然后通常是以下面这样的形式来调用
[布林变量], [交易指令]
另外趋势模型中逻辑运算操作符只有逻辑与和逻辑或, 如果需要其他运算, 我是使用的NOT()
函数
跨周期编写
跨周期模型函数: #IMPORT [PERIOD,N,FORMULA]
举例: #IMPORT[DAY,2,WHBXSF] AS VAR1
调取自定义2日线周期上WHBXSF指标中的数据. 需要先编写被引用的指标 (只有一串变量的模型似乎称为指标)
具体可以参考这个
疑问
- 到现在我也不确定这些模型是循环运行还是怎么在执行, 如果是循环运行一次运行时间是多长
附录
搜索过程中看到的十六套经典策略