xfxyldj 2007-8-21 21:03
回复 #15 yangsluo 的帖子
double CloseBuy1_1 = iMA(NULL, PERIOD_H1, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseBuy1_2 = iMA(NULL, PERIOD_H1, 13, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
if (CloseBuy1_1 == CloseBuy1_2) Order = SIGNAL_CLOSEBUY;
你的计算有问题。
5==13这里的判断是不对的。在计算上即使相差0.00000001也不是相等的。
所以这里你应该用交叉来判断。不能用等于。
在曲线的判断中走平和两条曲线相等的判断是不能用简单的等于来运算的。
xfxyldj 2007-8-21 21:10
没有全部读完你的代码。
提几个建议。
double Buy1_1 = iMA(NULL, PERIOD_H1, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy1_2 = iMA(NULL, PERIOD_H1, 13, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy2_1 = iMA(NULL, PERIOD_H1, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy2_2 = iMA(NULL, PERIOD_H1, 62, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy3_1 = iMA(NULL, PERIOD_H1, 13, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy3_2 = iMA(NULL, PERIOD_H1, 62, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell1_1 = iMA(NULL, PERIOD_H1, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iMA(NULL, PERIOD_H1, 13, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell2_1 = iMA(NULL, PERIOD_H1, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell2_2 = iMA(NULL, PERIOD_H1, 62, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell3_1 = iMA(NULL, PERIOD_H1, 13, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell3_2 = iMA(NULL, PERIOD_H1, 62, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseBuy1_1 = iMA(NULL, PERIOD_H1, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseBuy1_2 = iMA(NULL, PERIOD_H1, 13, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseSell1_1 = iMA(NULL, PERIOD_H1, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double CloseSell1_2 = iMA(NULL, PERIOD_H1, 13, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
这里你多定义了四倍的变量。
double Buy1_1 = iMA(NULL, PERIOD_H1, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
和
double Sell1_1 = iMA(NULL, PERIOD_H1, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
根本就是一个量,不需要定义两次。
你这里只需要定义3个变量,就够了。
double MA5 = iMA(NULL, PERIOD_H1, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double MA13 = iMA(NULL, PERIOD_H1, 13, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double MA62 = iMA(NULL, PERIOD_H1, 62, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
MA5=Buy1_1=Buy2_1=Sell1_1=Sell2_1=CloseBuy1_1=CloseSell1_1
MA13=Buy1_2=Buy3_1=Sell1_2=Sell3_1=CloseBuy1_2=CloseSell1_2
MA62=Buy2_2=Buy3_2=Sell2_2=Sell3_2
另外,建议将建仓信号和平仓信号作两个子函数。用return(i)来返回结果。
i=1买,i=-1卖,i=0什么都不做。
平仓信号也可以同样操作。
这样你的代码会方便很多。
[[i] 本帖最后由 xfxyldj 于 2007-8-21 22:20 编辑 [/i]]
xfxyldj 2007-8-21 21:12
发一个均线交叉的子函数供你参考。
int MAX (int MAFast,int MASlow,int PX,int j)
{
//----
double MAF[2],MAS[2];
int i=0;
MAF[0]=iMA(NULL,PX,MAFast,0,MA_Model,PRICE_Model,0+j);
MAF[1]=iMA(NULL,PX,MAFast,0,MA_Model,PRICE_Model,1+j);
MAS[0]=iMA(NULL,PX,MASlow,0,MA_Model,PRICE_Model,0+j);
MAS[1]=iMA(NULL,PX,MASlow,0,MA_Model,PRICE_Model,1+j);
if (MAF[0]>MAS[0] && MAF[1]<MAS[1]) i=1;
if (MAF[0]<MAS[0] && MAF[1]>MAS[1]) i=-1;
//----
return(i);
}
yangsluo 2007-8-21 22:19
呵呵,很高兴大家这么关系我做的这个垃圾EA,这个EA是在网站上自动生成的,对于自动生成的EA没有必要要求太高。
我做这个EA的目的就是为了抛砖引玉,让大家知道制作一个EA不是很困难的事情,同样,想做一个好EA却不简单
谢谢xfxyldj兄的宝贵意见:yct63 :yct63
xfxyldj 2007-8-26 01:11
回复 #27 tongren 的帖子
如何用不了?
不能加载还是不能交易?
tongren 2007-8-26 10:56
[quote]原帖由 [i]xfxyldj[/i] 于 2007-8-26 01:11 发表 [url=http://www.onefx.net/bbs/redirect.php?goto=findpost&pid=119156&ptid=28224][img]http://www.onefx.net/bbs/images/common/back.gif[/img][/url]
如何用不了?
不能加载还是不能交易? [/quote]
不能加载,在mt上显示不了!
[[i] 本帖最后由 tongren 于 2007-8-26 10:59 编辑 [/i]]
xfxyldj 2007-8-26 12:22
回复 #30 tongren 的帖子
测试没有问题的。
应该是你加载的方式不对。稍后我写份EA使用的说明文章。
到时候你看看。
tongren 2007-8-26 14:29
是智能交易系统,没有用过智能交易系统,里面参数设置复杂,晕!
hhbkiller 2007-8-30 10:18
看了一下,楼主你的系统用在usdjpy比你用在eurusd好
hhbkiller 2007-8-30 10:30
另外发现,同比例缩小投入资金量,做单数,调整止损和止赢,100mm测试,无论何种货币都是一次直接暴仓,而当同比扩大投入资金后发现,最终赢利值不是成比例增加而是一个固定值,这个值和止赢有关,所以感觉楼主的系统还要再完善一下,最终达到平稳回报,无论多少资金
liu2728 2007-9-7 12:31
我有个想法
楼主能留下联系联系方式吗 我的qq : 331033560
chinabout 2007-9-26 12:05
地对地导弹
发表于 2007-7-8 15:02 只看该作者
liangjh168 2007-11-15 12:52
非常感谢。。。。
lnlwwgm 2007-11-29 22:50
这样的EA不行
这样的EA不行,不能赚钱,只能培钱还要改进