查看完整版本: 一些交易系统的编写心得

abin 2007-6-1 00:18

一些交易系统的编写心得

一些交易系统的编写心得


我编写EA的目的:建立系统的交易方法,机械化运行,排除情感的影响,实现稳定赢利。
做EA一年了,最初做的是突破系统,依据突破方向追买追卖,测试近半年,效果一般,决定放弃,但这个EA使我坚信了一点,即只有跟着趋势交易才能实现EA的稳定赢利。因此,我认为要做一个成功的EA,关键就在于如何应用一切可能的方法去判断趋势。我发现很多很普通的指标都很容易做到这点,举个例子,GBP/USD日线图,用一个长周期的RVI做趋势判断(RVI-110),当RVI在“0”值上方趋势为上升,反之则为下降,开仓及平仓用一个短周期RVI做信号指示(RVI-13),在上升趋势时,采用RVI MAIN 上穿RVI SIGNAL作为买入信号;在下降趋势时,采用RVI MAIN 下破RIV SIGNAL作卖出信号,这个系统很简单,却很实用,配合好的止损止赢策略,赢利是有保证的,我还为此编写了一个EA,有兴趣的可以看看(附MQ4文件,写得很粗糙,高手别笑话)。

未完待续。。

[[i] 本帖最后由 xfxyldj 于 2007-8-26 00:39 编辑 [/i]]

abin 2007-6-3 22:46

谢谢版主鼓励。
==================================================================================================
抓住了主要趋势,就好比跳上了一匹脱缰快马,带着你一路往前冲,可能前面是悬崖,有些悬崖可能会提前看到,但有些只能更着跳下去。。。所以上马前最好带个降落伞包。什么?不是悬崖只是个楼梯?呵呵,我要的是不死,受点伤难免啦。我会为EA设定止损条件,这个算是“正统”的理念还是有效的。
先看一张图,这个EA能较好的抓住趋势,但第一个悬崖还是跳下去了,由于汇价急挫,EA本身的CLOSE-ORDER机制还来不及反应,幸而止损帮了忙。接下来是9笔的连续获利,最后一笔追踪止损保护了赢利;
[attach]8754[/attach]
第二张图,行情振荡,此时的EA表现平平,每个趋势都很短命,得益于止损机制,EA仍能偷生。
这个EA获利靠的主要是趋势行情,振荡时候能保本就可以了。
[attach]8755[/attach]

abin 2007-6-3 22:47

关于“曲线套入”。
这里先讲两个故事:
◎某人练习射箭,可总射不准,看到其他人箭箭红心,不禁眼红,后来他想了一个好办法,就是先把箭射出去,然后跑到箭射入的目标处把“箭靶”画上,这样看来,也是箭箭红心;
◎又话说英国赌球风气盛行,某君也想通过赌球捞一把,可是他老猜不中,于是他想了一个点子:周末开赛前,他通过黄页选定了3000个人作为目标,分别去信,声称自己能准确预测周末A队对B队的战果,对其中1000人,他预测A队获胜,对另外中的1000人,他预测B对获胜,剩下的1000人,则预测两队战和;下一个周末,他对上周预测准确的1000人又分成3批发信,分别作出3种预测,再下周亦如是。。。到剩下33人的时候,他又分别向他们去信,声明如想要获得本周末赛果的预测,需先向他支付1000英镑,结果,这些人中的大部分对这个“独具慧眼”的专家早已倾心不已,某君终于大赚一笔。
所谓的“曲线套入”,就是利用历史资料匹配系统,针对一段历史行情与指标、数据的关系编写EA,为使EA看起来有良好的表现,不断地对参数作出调整、优化,设置过滤条件,使EA与历史资料数据之间完全吻合,结果可以肯定,这套EA在历史数据测试中表现良好,会在大涨之前适时地买入,大跌之前适时地卖出,可是当下次大涨大跌之前EA还会适时地发出信号吗?恐怕不能,因为这个EA是针对过去的状况编写的,它不一定适用于未来。从自己的经验总结,EA设定的条件越多,结构越复杂,“曲线套入”的情况就越严重。话又说回来,编写EA不能离开历史资料,不然我们就成了盲人摸象,无从入手,怎样避免过度的“曲线套入”,我是这样做的,首先准备足够长的历史资料数据,将其分成两份,前一份用于观察,后一份尽量不去看它,EA出来后先用前一份数据作测试、调整,直到EA达到目标要求后再用后一份历史资料去测试它,如果这时EA的表现和前一份数据差不多,那么我认为这个EA基本合格了。

待续。。。

aha_forex 2007-6-4 01:16

回复 #4 abin 的帖子

Hi abin, 我做过很多基于通用指标的EA,最后都只能对一部分历史数据盈利。测试的历史数据越多(我一般从2004年的数据开始),结果越接近事实,也就是越差。无论怎样curve fitting,都无法做到适合所有的市场状况。最后实际上就是在赌运气,在你开始使用某个系统的时候可能市场条件正好合适,所以你赚了钱,或正好不合适,所以你赔钱。

能不能贴上你的测试报告?我可以帮你看看。

大维 2007-6-4 01:20

[quote]原帖由 [i]abin[/i] 于 2007-6-1 00:18 发表
一些交易系统的编写心得


我编写EA的目的:建立系统的交易方法,机械化运行,排除情感的影响,实现稳定赢利。
做EA一年了,最初做的是突破系统,依据突破方向追买追卖,测试近半年,效果一般,决定放弃,但这个EA使我坚信了一点,即只有跟 ... [/quote]
好东东,现在东版主也在编写相关程序,届时有机会可以多交流。

abin 2007-6-5 22:00

如何利用历史测试评估EA(一)
历史数据测试的目的是客观地评估EA的效果,暴露EA的缺陷,让我们加以改进,为此,在测试前我们应该作如下准备:
1、一段未被用作EA设计时参考的历史数据资料,该份资料的数据应做到尽可能详细,如有可能应包括所有时段的数据。当然,不同的EA对数据的详细依赖程度各有不同,例如一个只根据日平均线穿越发出买卖入信号和一个通过多时段KD共振获得信号的EA,显然后者对数据详尽程度的依赖更高一些;
2、清空MT4\TESTER目录,每次进行数据测试该目录下都会留下大量数据文件及EA的设置文件(常有几G之巨),及时清理可恢复大量磁盘空间及减少以前设置对当前可能测试造成的影响*(这种影响纯属个人猜测,具体原因及是否一定有直接关联我无法找到确切的依据,但我在测试过程中因为这些问题而遇到的异常状况实在是不少);
3、关闭EA的资金管理选项,将LOTS设置为0.1或1,尽量使每笔测试记录的成交量一致,这是为了更好的计算EA的盈亏状况,避免了一些巧合(如赢利时刚好使用大LOTS,亏损时使用了小LOTS,当然,如果这是你的EA特有的智能化管理,例外。);
4、起此存款本金不太要紧,不过我们总希望以将来准备投入的本金作测试本金;
5、调整好其他参数,参数多的话把它SAVE成*.SET文件吧,方便下次调用。
都准备好了?按START!

待续。。。

东邪 2007-6-5 22:30

非常好,值得借鉴,另外讨论交易系统编写,就以朋友此贴开张专门讨论。

东邪 2007-6-5 22:36

交易系统是在改进中不断成长的,外汇上基本2年一个大周期,短期测试2年数据就够了,市场不断发展,系统不断改进,多多挣钱

abin 2007-6-5 22:39

谢谢BZ鼓励啦。
刚好实验成功一个小技巧:
是这样的,通常情况下点差是固定的,往往在有数据发布时点差会被拉得很大,而且不能保证按价成交,这样的话就增加了交易风险,在EA中加了个买卖价差的判断,让程序在价差突然拉大的时候隔断开仓连接:

bool Opening=true;
int standar_spread_set=5;
int spread=0;
spread=NormalizeDouble((Ask-Bid)/Point,0);
if (spread>standar_spread_set)
   {Opening=False;} //连接至开仓指令

刚才10点数据波动,点差高疯时拉高到10点,刚好碰上一个买入信号,没加上面指令的程序06秒就开始发信号了,直到差不多1分钟后点差恢复正常,加了上述指令的程序才发出交易指令,节省了3个点子,呵呵。

LOG:
[size=1][color=Red]2007.06.05 22:00:52 YCJEUR_Ver101 EURUSD,Daily: Alert: Buy EURUSD 0.1 lots  at 1.3523, 1181052044
2007.06.05 22:00:52 YCJEUR_Ver101 EURUSD,Daily: open #36806301 buy 0.10 EURUSD at 1.3523 sl: 1.3433 tp: 1.3553 ok[/color]
2007.06.05 22:00:52 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3523, 1181052044
2007.06.05 22:00:52 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3525, 1181052044
2007.06.05 22:00:50 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3526, 1181052044
2007.06.05 22:00:49 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3525, 1181052044
2007.06.05 22:00:45 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3523, 0
2007.06.05 22:00:43 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3524, 0
2007.06.05 22:00:42 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3526, 0
2007.06.05 22:00:40 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3528, 0
2007.06.05 22:00:39 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3529, 0
2007.06.05 22:00:36 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3528, 0
2007.06.05 22:00:22 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3527, 0
2007.06.05 22:00:21 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3526, 0
2007.06.05 22:00:20 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3525, 0
2007.06.05 22:00:19 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3524, 0
2007.06.05 22:00:17 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3523, 0
2007.06.05 22:00:16 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3524, 0
2007.06.05 22:00:15 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3523, 0
2007.06.05 22:00:13 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3522, 0
2007.06.05 22:00:12 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3521, 0
2007.06.05 22:00:10 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3518, 0
2007.06.05 22:00:09 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3519, 0
2007.06.05 22:00:07 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3522, 0
[color=Red]2007.06.05 22:00:06 YCJEUR_Ver100 EURUSD,H1: Alert: Buy EURUSD 0.1 lots  at 1.3526, 0[/color][/size]

manho 2007-6-5 22:39

研究。:yct63 :yct63 :yct63

为之奈何 2007-6-5 22:47

作者的文章要好好研究才行,支持!:yct22

东邪 2007-6-5 22:57

回复 #12 abin 的帖子

我是在考虑一套交易系统,原理如下:
1 .4小时MA55和MA89都两个sin 都是正数,就判断日内交易做多,当价格在MA55附近上下15点时候就多,止损60点,目标35点。没有跟踪止损。每天只做一单。开仓只能有一单,测试货币EURUSD和USDCHF。
简单均线波段交易,编出来了可以测试一下,如果是正数,那么在加其他指标,或者改参数进行优化,我的编程很水,最近还在研究 C语言呵呵,朋友有空帮忙编写一下,谢了

abin 2007-6-5 23:13

[quote]原帖由 [i]东邪[/i] 于 2007-6-5 22:57 发表
[/quote]
帮忙不敢,互相学习。我对“两个sin 都是正数”不理解,sin是什么,数学名词?如果是的话要告诉我公式,我那些数学知识早还老师了。

东邪 2007-6-5 23:18

sin是正玄函数呀,三角形用的最多的,提示一下,sin30%=0.5

都市农民 2007-6-5 23:37

很好啊,期待进一步完善

abin 2007-6-5 23:52

[quote]原帖由 [i]东邪[/i] 于 2007-6-5 23:18 发表
sin是正玄函数呀,三角形用的最多的,提示一下,sin30%=0.5 [/quote]

问题来了,MA总为正,sin它也总为正,这个条件有意义吗?

东邪 2007-6-5 23:56

回复 #19 abin 的帖子

sin是根据角度来求值的呀,比如是下降趋势,那么MA55和MA89都是负角度,那么SIN(-30%)=-0.5呀,上升趋势则是正数

abin 2007-6-6 00:03

[quote]原帖由 [i]东邪[/i] 于 2007-6-5 23:56 发表
sin是根据角度来求值的呀,比如是下降趋势,那么MA55和MA89都是负角度,那么SIN(-30%)=-0.5呀,上升趋势则是正数 [/quote]

暂时我还没有办法通过程序去判断图表中的趋势角度问题,何解?因为我认为角度是主观的,通过放大缩小、拉高按扁图表,你都会发现同一趋势可以呈现多种角度。
至于是否上升下降还比较好办,简易办法就是通过不同的SHIFT之间比较。

[[i] 本帖最后由 abin 于 2007-6-6 00:05 编辑 [/i]]

东邪 2007-6-6 00:04

[quote]原帖由 [i]东邪[/i] 于 2007-6-5 23:56 发表
sin是根据角度来求值的呀,比如是下降趋势,那么MA55和MA89都是负角度,那么SIN(-30%)=-0.5呀,上升趋势则是正数 [/quote]

abin 2007-6-6 00:15

[quote]原帖由 [i]东邪[/i] 于 2007-6-6 00:04 发表
[/quote]
:yct38 :yct38 :yct38
页: [1] 2
查看完整版本: 一些交易系统的编写心得