下载MetaTrader 5

外汇开户---送MQL培训---公开我的MT4编程书稿

要添加评论,请登录注册
ShuangJian Cheng
318
ShuangJian Cheng 2009.08.11 08:58 
我从事编程工作已经有十几年了,期间一直从事具体开发、设计和培训工作,做过高级程序员、架构师、技术总监。
我是极端的系统交易者,从不做手工交易。我写了很多ea,有一些比较好的,http://wp00000008.mt4live.com/,是我最近开发的一个比较好的ea的展示。
我在mql论坛发过一些帖子:
https://forum.mql4.com/cn/18460
https://forum.mql4.com/cn/24028
从免费到收费,也是有不得已的苦衷,各有利弊。
mql编程语言对于熟练的开发者来说,是没啥难度的,一般很快就能上手。但是对于没有编程经验或者编程新手而言,是具有一定的门槛的。任何一门编程语言(包括编程本身),只要入门了,是不难的;而真正的难度就是入门,难度在于如何迈过门槛。在没有入门之前,自己摸索的话是比较痛苦的,而目前从网上能找到的都是一些零碎的资料。大部分想学mql编程的同道,看了这些资料,还是不知道如何下手,肚子里有一大堆问题,却无处咨询。
我之前想写一本关于mql编程的书,目前只是开了个头。目前看来,继续写下去的可能性不大,写书太累。我之前翻译过一本关于网络安全的书(已出版),个中的痛苦和折磨,现在想起来都觉得可怕,噩梦般的经历。后面我会把未完成的书稿公开出来。
学mql编程,并不是很难,只要有决心迈过门槛,后面就是广阔的天地。mql的难度,并没有很多同道想象当中那么难,即便是对无编程经验的。
很多人认为学mql要先学c,这是个大大的误解。学编程先学c是个大大的错误,在我们国家,这种教育方式每年都在大量的浪费教育资源。c语言是接近于机器语言的一种编程语言,它具有极大的灵活性和创造力,但并不适合于入门,即便是编程多年的程序员,也不一定能很好的发挥这门编程语言的功能。换句话说,为了杀一只鸡,去学九阴真经,是没有必要的。这里的鸡就是mql,c就是九阴真经。如果这么做的话,最终的结果无疑是在没有学习mql之前,信心全部被c打败了。
另一方面,很多同道学mql可能不是为了自己写ea,而是为了能够看懂别人的ea,或者看懂自己手头的通过各种渠道得到的ea或者指标的源代码,然后偶尔小改动一下,这就更没必要学c。
本人可免费提供如下mql教学:
(1)mql语法及入门资料
(2)ea编写入门
(3)日常的咨询答疑
作为交换的唯一条件是在我这里开外汇帐户(我是外汇代理商IB),不加点。
联系人:QQ10144229,ok1990@126.com


以下为书稿。

ShuangJian Cheng
318
ShuangJian Cheng 2009.08.11 08:59  

目录

1. 前言 2

1.1. 交易对象 3

1.2. 交易单位 4

1.3. 交易杠杆 4

1.4. 标准帐户和 mini 帐户 5

1.5. 点 Point 5

1.6. 交易价格 5

1.7. 交易单类型 6

2. EA 简介 6

2.1. 开始构建 EA 7

2.1.1. 最简单的 EA 7

2.1.2. EA 的源代码结构 13

2.1.3. 能交易外汇的 EA 14

2.2. EA 测试 19

2.3. 编程帮助文档 19

3. 语法介绍 19

3.1. 基本语法 19

3.2. 数据类型 20

3.3. 变量 21

3.4. 运算符和表达式 21

3.5. 操作符 21

3.6. 预处理指令 21

3.7. 预定义变量 21

3.8. 数组 21

3.9. 函数 21

4. EA 详解 21

5. 指标和脚本编程 22

6. 编程进阶 22

6.1. 海龟交易法 22

6.2. 趋势线 22

6.3. 文件操作 22

6.4. 混沌交易法 22

6.5. 均线交易法 22

6.6. 网格 22

6.7. 对冲 22

6.8. 神经网络 22


ShuangJian Cheng
318
ShuangJian Cheng 2009.08.11 09:00  

MT4 编程指南

1. 前言

外汇( Forex )市场是世界上最大的金融市场,每日平均交易量超过两万亿美元,是美国股票市场的 30 倍。

与股票和期货不同的是,外汇市场是每周五天、每天 24 小时开放的,交易者可根据自身的状况,安排适合于自己的交易时间,可做到工作、投资两不误。特别是对于中国的交易者,由于时差的关系,外汇市场交易活跃的时段,是北京时间晚上 9 点到 12 点之间,和工作时间不发生冲突,特别适合于中国的交易者。当外汇交易活跃的时候,波动和趋势相对来说比较容易判断,获利机会相对较大。

MT ( MetaTrader )是 MetaQuotes 软件公司的交易平台,它在各大银行、交易商得到广泛的应用,是事实上的行业标准,大量用于外汇、期货、股票交易。相对于其他的交易平台, MT4 (版本号 4 )最大的优势是对自动化智能交易的完美支持。所谓智能交易,是指将交易者的交易策略编写成程序,这个程序运行在 MT4 平台上,它按照交易者的交易策略,在适当的时候进行买入、卖出和平仓操作,整个交易过程无需人工干预,做到真正的自动化的 24 小时交易。

自动交易的好处有三个:

( 1 ) 24 小时无人值守,自动交易;可做多,可做空

( 2 )按照固定的策略进行,克服人工操作的贪婪、恐惧和优柔寡断

( 3 )在交易之前,利用大量的历史数据来验证自己的策略

本书讲述了在 MT4 平台上,如何运用编程语言来编写自己的智能交易系统,它适合于没有编程经验的交易者和有编程经验的交易者;通过循序渐进的讲解,力求使得本书的读者都能掌握智能交易系统的编程方法。

本书主要侧重于智能交易系统(以下简称 EA )的编程,并假设读者已经能够观看行情图表,并能使用 MT4 客户端进行操作和交易。

本书作者是坚定的系统交易者,在实盘中,从不进行人工操作,全部采用智能交易,在本书中,配合一些主题,将公开作者的一些智能交易系统代码。

1.1. 交易对象

外汇交易的对象是各国的货币,交易者通过买卖一些货币,利用汇率的波动来进行获利。

在交易之前,交易者需要确定本金的货币类型,目前很多交易商都支持多种货币作为本金,如美元( USD )、日元( JPY )、欧元( EUR )、英镑( GBP )、瑞士法郎( CHF )等,为方便描述,本书假设交易者的本金为美元,交易者的交易活动采用美元进行结算。

交易者可选定一个外汇交易商进行开户,并存入一定数量的结算货币(一般为美元)作为本金,即可进行买卖活动。交易者的交易活动是通过交易商提供的 MT4 客户端来进行的,一般来说,这些客户端可免费注册模拟帐号,利用模拟资金来进行交易。交易者在进行真实帐户交易之前,建议先在模拟帐户上进行充分的练习。交易者开发的智能交易系统,建议先在模拟帐号上测试完毕后再转移到真实帐号进行交易;对于本书中涉及到的智能交易系统,交易者自行决定是否要用到真实账号中交易,本书作者不承担可能由此造成的损失。在阅读本书的时候,建议交易者先下载安装并运行 MT4 客户端,在模拟帐户中进行同步的操作和体验。

交易者交易的对象是各国货币,利用货币之间的汇率波动来获利。假设交易者判断,欧元相对于美元的汇率将上涨,那么他可以买入欧元,卖出美元。这两个活动,反映在具体的交易上,就是买进 EURUSD 货币对( BUY EURUSD )。假设交易者在 EURUSD 汇率为 1.5000 的时候买进 1 个交易单位,在汇率为 1.5010 的时候获利平仓(结算),那么交易者的获利就是 0.0010*1 个交易单位。关于交易单位,参见后续的“交易单位”。

假设交易者判断, EURUSD 汇率将下跌,那么交易者可买进美元、卖出欧元,这两个活动反应在具体的交易上就是卖出 EURUSD ( SELL EURUSD )。假设交易者在 EURUSD 汇率为 1.5000 的时候卖出 1 个交易单位,在汇率为 1.4990 的时候获利平仓(结算),那么交易者的获利就是 0.0010*1 个交易单位。

综上所述,交易者可通过买进 BUY 或卖出 SELL 相关的货币对,来进行外汇交易,通过汇率的波动获利。交易者如果交易的货币对是非美元货币对,如 EURCHF ,那么在交易的时候,系统自动兑换成美元来进行结算。有些交易商提供的交易品种除了外汇货币对之外,还可能会有一些期货和股票产品。

ShuangJian Cheng
318
ShuangJian Cheng 2009.08.11 09:00  

1.1. 交易单位

一个交易单位在外汇市场称为一手,它等同于 100000 美元的交易量。即交易者进行一个货币对的买入或卖出的时候,交易量是 100000 美元。

1.2. 交易杠杆

一手交易的交易量是 100000 美元,显然门槛很高。本书所述的外汇交易是外汇保证金交易,它以一定的杠杆比例来进行交易。当杠杆比例为 1 : 1 的时候,交易一手需要 100000 美元,当杠杆比例为 1 : 200 的时候,交易者只需要 500 美元即可进行一手交易, 100000 ÷ 200 = 500 ,这里的 500 美元即是保证金数量。可见采用杠杆的保证金交易,对于交易者而言门槛降低了,当然获利和亏损也放大了。

为方便计,本书所述的外汇交易均是指外汇保证金交易,默认杠杆比例为 1 : 200 。

1.3. 标准帐户和mini帐户

一般说来,标准帐户的每次交易量是 0.1 手的整数倍, mini 帐户每次交易量是 0.01 手的整数倍。

当然,这个规律只是适用于大多数情况,实际情况下,最小交易大小(手数)、最大交易大小(手数)、当前交易大小是否有效,这三个问题,是因交易商、帐户类型等的不同而有所不同的,在编程时,需要调用相关的函数来实时获取相关的信息进行判断和计算,具体情况,请参阅后续章节的描述。

1.4. 点Point

外汇交易中的货币对价格的最小波动单位称为点 Point 。针对不同货币对,这个 Point 的值有所不同。如对于大多数货币对,一个点就是 0.0001 ,而对于日系货币对,则是 0.01 ;还有一些交易商能提供五位数报价,非日系货币对一个点可以 0.00001 ,日系货币对是 0.001 。

1.5. 交易价格

当前买入价称为买价 Ask ,当前卖出价称为卖价 Bid 。对于买入的寸头,平仓价格为 Bid ,对于卖出的寸头,平仓价格是 Ask 。

一般来说, Ask 会大于 Bid 几个点,如 Ask 为 1.5005 , Bid 为 1.5000 ,之间的差价是 0.0005 ,即 5 个点,这 5 个点称为点差( Spread )。可以看出,不管是买入还是卖出,即便是交易后马上原价平仓,交易者都要付出点差,这个点差就是交易商的收入主要来源。

不同的货币对的点差是不同的,对于相同的货币对,不同的交易商提供的点差也是不同的。即便是某个特定的货币对,在不同的交易时间,它的点差( Ask 和 Bid 之差)也有可能是变动的,一般来说,交易活跃时段,点差可能会大一些,交易清淡时段,点差可能会小一些。这里所述的是一般规律,有些时候,交易商为了控制市场需要,可能会在某些情况下降低或拉大点差。

从行情图表上可以看到最高价、最低价、开盘价、收盘价,这些价格都是卖价 Bid 。

1.6. 交易单类型

外汇保证金交易中一共有六种单据类型:

1、 买单 BUY

以 Ask 成交的买单,平仓价格为 Bid 。

2、 卖单 SELL

以 Bid 成交的卖单,平仓价格为 Ask 。

3、 BUYSTOP

以买入为目的的挂单。所谓挂单是指预埋单,当满足一定得条件后此单会自动成交。挂单的价格必须大于 Ask ,且与 Ask 价位保持一个最小距离,这个最小距离一般为 0.0004 ,具体取值可能随市场变动而变化,详情请参阅后续章节中的 MarketInfo 函数。

当价格上涨, Ask 上升至挂单价格时,挂单自动成交,单据类型变为 BUY 。

4、 BUYLIMIT

以买入为目的的挂单,挂单价格小于 Ask ,且与 Ask 保持一个最小距离。当价格下跌, Ask 跌至挂单价格时,挂单自动成交,单据类型变为 BUY 。

5、 SELLSTOP

以卖出为目的的挂单,挂单价格小于 Bid ,且与 Bid 保持一个最小距离。当价格下跌, Ask 跌至挂单价格时,挂单自动成交,单据类型变为 SELL 。

6、 SELLLIMT

以卖出为目的的挂单,挂单价格大于 Bid ,且与 Bid 保持一个最小距离。当价格上涨, Bid 上涨至挂单价格时,挂单自动成交,单据类型变为 SELL 。

ShuangJian Cheng
318
ShuangJian Cheng 2009.08.11 09:03  

1. EA简介

本书所述的 EA ,是指运行在 MT4 平台上的、自动的进行外汇交易的程序。

1.1. 开始构建EA

1.1.1. 最简单的 EA

打开 MT4 终端软件(这里以 FXDD 的 MT4 交易软件为例),在“导航”窗口的“智能交易系统”上点右键,开始创建 EA ,如下图所示:

按照向导的指示一步一步的操作,输入 EA 的名称 ea_001 ,最后看到的是 MetaEditor 打开了,默认的 ea_001 的源代码如下:

以上是 ea_001 的默认源代码。源代码是交易者的思路体现,它包含了交易策略和思想,对于交易者是可读的,但是还不能在 MT4 平台上运行。 MT4 上能运行的 EA 代码称为可执行代码,它对于交易者不可读。 MetaEditor 能通过一个称为“编译”的过程,将交易者所理解的源代码转换成 MT4 平台能运行的可执行代码。

EA的源代码文件的后缀名是 mq4 , ea_001 的源代码文件 ea_001.mq4 可从 MT\experts 目录找到。 MT 是 MT4 的安装目录,子目录 experts 则是 EA 的源代码和可执行代码的存放目录。

执行菜单“文件” -> “编写”(或按下 F5 ), ea_001.mq4 编译生成 ea_001.ex4 文件, ex4 后缀的文件在 MT4 平台上是可执行的, ea_001.ex4 就是 ea_001 的可执行代码。

现在生成的默认源代码有些复杂且难以阅读,把生成的源代码全部删除,换成如下代码:

在本书的后续部分,关于源代码的展示,会换成如下的界面:

其中左侧是行号,它不是源代码的一部分,它是为方便讲解代码而附加的标注。

将以上代码编译后, MetaEditor 界面的下面部分“工具箱”里面显示编译无错误:

如果编译有错误,则需要按照提示修改源代码并重新编译,直到编译无错误,最后生成 ea_001.ex4 。

现在回到 MT4 终端软件,可以看到一个新的 EA ,它就是刚才编写的 ea_001 。

为了运行这个 EA ,打开一个货币对的图表(假设为 USDCHF ),并将 ea_001 拖动到 USDCHF 图表上,如下图:

从上图的 USDCHF 的 H1 图表的右上角可以看到 ea_001 的字样,并可以看到 ea_001 右侧的“ X ”符号,这个表示 ea_001 已就绪,但尚未运行。

按下“智能交易”按钮, ea_001 开始运行,“ X ”符号变成笑脸符号,并在界面底部的“智能交易”控制台条目中显示提示“我在这。。。”的提示。

可以看到,这个 ea 的作用就是简单的在控制台显示“我在这。。。”的提示。

ShuangJian Cheng
318
ShuangJian Cheng 2009.08.11 09:03  

未完待续

okwh
1633
okwh 2009.08.11 16:08  
IT总监做IB ???
shaojun yu
21
shaojun yu 2009.08.11 19:17  
愿与大家共同交流:
ShuangJian Cheng
318
ShuangJian Cheng 2009.08.12 03:40  
DxdCn 写道 >>
IT总监做IB ???

呵呵,干点副业。。。没啥大志向,干总监不如写程序。

ShuangJian Cheng
318
ShuangJian Cheng 2009.08.14 03:14  

1.1.1. EA的源代码结构

EA的源代码结构包括以下几个部分:

1、 预处理指令

预处理指令以 # 开头,它表示一些特殊的含义,关于这一部分的内容,在后面的语法章节有详细描述。

2、 全局变量和外部参数的定义

全局变量是一种可在程序的任何部分引用的变量,而外部参数则是一种特殊的全局变量,它的值可在EA的外部进行控制。关于变量和全局变量的概念,在后面的语法章节有详细描述

3、 函数

多行代码组成的代码块,可包含在一个函数内,调用函数就相当于执行这个代码块。

ea_001中有一个start函数,函数的格式如下:

返回值类型 函数名 (参数)

{

代码块

}

start函数的返回值类型为int,函数名start,无参数,含两行代码(行4、行5)。关于函数的内容,在语法章节有详细描述。

start函数是MT4要求EA必须提供的,当EA所附着的货币对的价格每变动一次,MT4将调用一次EAstart函数。

在这里,当ea_001附着的USDCHF货币对的价格每变动一下,ea_001start函数将运行一次。start函数的每行代码的含义如下:

4:在控制台打印“我在这。。。”提示。

5:从start函数中返回,返回值为0。返回值为0表示start正常返回,否则表示start在执行中出现了某些错误。

函数分为自定义函数和公用函数,自定义函数是指开发者自己定义和编写的函数,比如本例的start函数,而公用函数是MT4平台预定义的函数,开发者可直接调用,本例的Printreturn均是公用函数。

1.1.2. 能交易外汇的EA

之前展示了一个简单的EA,当它附着的货币对的价格变动的时候,它在智能交易控制台打印一行提示“我在这。。。”。这个EA尚不能进行交易,下面接着进行一个能交易的EA

在开发一个EA之前,需要对EA的策略进行规划,做到有的放矢。EA的策略包括一下几点:

1、 开仓

当行情满足什么条件时,EA进行开仓,何时做多,何时做空。

2、 平仓

当行情满足什么条件时,EA要进行平仓。

3、 止损和止赢

EA是否需要设置止损和止赢,如何设置。一般来说,止损是最好要设置的,以防止行情突变所带来的无法预料的损失。

不同于股票交易,外汇交易在下单的时候,可以设置止损价位和止赢价位,当价格达到止损或止赢价位时,交易单自动平仓。以做多为例,假设买价为1.5000,止损价为1.4800,止赢价为1.5100,那么这里止损就是200点,止赢就是100点。

4、 加码

是否要加码,何时加码。

接下来,以Larry Williams在《短线交易秘诀》中讲到的一个交易方法来作为本例的交易策略。

开仓

每周一开市时,如果开盘价大于上周的收盘价则卖出,如果开盘价小于上周的收盘价则买进

平仓

下周一开盘时平仓

止损和止赢

止损200点,止赢250

加码

不加码

实现上述策略的智能交易系统ea_002的代码如下:

ShuangJian Cheng
318
ShuangJian Cheng 2009.08.14 04:17  

行 3~4 :两个预处理指令,表示本 ea 的版权信息

行 8 :如果当前时间是星期一,且在时间在 00 : 05 : 00 之前,则执行 9~25 行。

if语句:当括号()内的条件成立时,执行 { } 内的代码

DayOfWeek函数:判断当前是星期几。 1~6 :星期一 ~ 星期六, 0 :星期天

==运算符:相等判断

&&运算符:并且判断

Hour函数:当前时间的小时部分, 0~23

Minute函数:当前时间的分钟部分, 0~59

行 9 :如果当前单据总数等于 0 ,则执行 10~14 行,否则执行 16~24 行。行 9 和行 15 是一个 if/else 语句。

行 10 :本周开盘价大于上周收盘价,则执行 11 行,否则小于的话则执行 13 行。

Open[0]表示当前周期的开盘价, Close[1] 表示上一周期的收盘价, Open 和 Close 都是预定义数组,分别表示开盘价和收盘价, 0 和 1 是周期数,关于数组的详细描述,请参阅后续章节。本 ea 是运行于 H1 周期的, Open[0] 表示当前一小时的开盘价, Close[1] 表示上一小时的收盘价;当满足行 8 列出的条件时, Open[0] 等同于星期一的开盘价, Close[1] 等同于上周五的收盘价。

行 11 :下买单。

行 13 :下卖单

OrderSend函数用于下单,各参数含义如下:

参数 1 :货币对。 Symbol 函数返回 ea 附着的当前货币对。

参数 2 :单据类型。

OP_BUY:买单

OP_SELL:卖单

OP_BUYSTOP: BUYSTOP 单

OP_BUYLIMIT: BUYLIMIT 单

OP_SELLSTOP: SELLSTOP 单

OP_SELLLIMIT: SELLLIMIT 单

参数 3 :下单大小。本例为 0.1 手

参数 4 :交易价格。对于买单而言,最低交易价格是 Ask ;对于卖单,最高交易价格是 Bid

参数 5 :滑点。由于发生 OrderSend 指令到单据成交之间有个时间差,在这段时间之类,交易价格可能会发生变动,导致无法按照指定的价格进行成交。交易者可以在下单的时候指定最终交易价格和原定交易价格之间的最大浮动值,以确保交易尽快成交。这个值的单位为 Point 。

参数 6 :止损价位。为 0 表示不指定止损价。

参数 7 :止盈价位。为 0 表示不指定止盈价。

参数 8 :单据的备注。

参数 9 :单据的 magic 数字。 magic 数字用于区分不同 ea 所下的单,具体请参阅后续章节。

参数 10 :单据失效时间。仅限挂单,当单据打到后,挂单自动删除。为 0 表示不指定失效时间。

参数 11 :箭头颜色。下单成功后, ea 在行情图表上会用一个箭头图标标注下单位置。买单为蓝色 Blue ,卖单为红色 Red 。

返回值:单据编号。如果返回值为 -1 表示下单失败。此处没有检查下单结果。

行 16 :选定第一个单。在对单据进行后续操作之前,一般需要有个选定的动作。

OrderSelect函数:选定一个单据

参数 2 :选定标准。 SELECT_BY_POS 按照单据序号选定,所有的单据都是从 0 开始编序号的。 SELECT_BY_TICKET 按照单据编号选定。 SELECT_BY_POS 和 SELECT_BY_TICKET 都是整数常量,关于整数和常量的概念,请参阅后续章节。

参数 1 :要选定的单据的值,具体的值的含义由参数 2 解释。

行 17 :如果当前时间离选定单据的下单时间超过一天,则执行 18~23 行。

TimeCurrent函数:表示当前时间,单位为秒。返回值为从 1970 年 1 月 1 日零点到现在的秒数。

OrderOpenTime函数:返回选定单据的下单时间,单位为秒。

行 18 :如果为买单则按照 Bid 平仓(行 19 )

行 19 :如果为卖单则按照 Ask 平仓(行 22 )

OrderType函数:返回选定单据的单据类型。

参数 1 :单据编号。 OrderTicket 函数返回当前选定单据的编号

参数 2 :平仓数量。 OrderLots 函数返回当前选定单据的手数。

参数 3 :平仓价格。对于买单为 Bid ,对于卖单为 Ask 。 Ask 和 Bid 是两个浮点数类型的变量,关于浮点数和变量的概念,请参阅后续章节。

参数 4 :滑点。含义同 OrderSend 中的滑点。

本 ea 的代码量为 28 行。考虑到初学者的理解能力,进入的概念是比较少的。对本 ea 稍加改造,加上少量代码后,会完整而可靠的实现交易思路,整个代码量将不会超过 40 行。

一般来说,完整的实现一个交易思路所需的 ea 的代码量是不大的,即便是对于很复杂的交易策略,对于熟练开发者来说,所需的代码量也很少会超过 500 行。如果某个交易思想需要过多的代码量来表达,那么很可能是以下两种情况。

第一情况,逻辑混乱。 mt 平台的 ea 的运行逻辑和人处理交易的逻辑是有些不一样的。人在处理交易的时候,讲求一个步骤,先开仓,后平仓,这个过程里面有一个思维的先后延续性。而对于 mt 平台的 ea 而言,所有的逻辑只有一个 start 函数,而 start 函数的执行并非是有先后次序的(当然 start 函数内部的代码是先后执行的),“价格变动一次, start 函数执行一次”是 ea 逻辑的最高归纳。这种重复性、随机性和人工交易的步骤性思维是不一样的,为了将这种随机性逻辑转化为步骤性逻辑,这就要求开发者在程序内部维护并检查当前交易进度的状态,使得每次 start 被执行的时候,按照当前状态来决定下一步的动作:开仓或是平仓。在 ea_002 中,行 8 、行 9 、行 17 即是对当前交易状态的判断,特别是行 17 ,如果去掉了这行,将导致在周一开盘的 5 分钟内, ea 反复的开仓和平仓。

mt平台 ea 的这种特性和人工交易的差异性,也是导致一些初学者对 ea 开发感到迷惑、 ea 的运行结果不符合预期逻辑、且难以查找和修正 ea 运行错误的原因。

第二种情况,老外写的 ea 多半代码量很大。接触过一些老外写的代码,动辄 2000 行甚至更多,但程序逻辑并无问题,只是由于代码量比较大,执行速度比较慢,特别是复盘测试的时候(关于复盘测试请参阅后面的“ EA 测试”)。代码看懂了之后,重新编写 ea 实现相同的功能,可能只需要 30% 的代码量。

东方人凡事讲究“只可意会不可言传”,西方人更多的喜欢钻研具体的方法,对方法的细节定义得非常仔细和严格。举个例子,关于一种交易方法,东方人可能会画个示意图,然后大家去体会;而西方人可能会去搞清楚图上的每个元素、每根曲线的来历,元素之间的相对关系、周期数、上下大小比例、点位等,把这些东西用具体的数值定义下来。相比较而言,西方人的思维更接近电脑的那种机械式思维,这个是编写好的 ea 的一个基本条件:像电脑一样的思考。

123
要添加评论,请登录注册