发新话题
打印

[指标EA编写讨论] 【原创】自己做的EA,请大家指点(含源码)

本主题由 xfxyldj 于 2007-10-31 09:59 分类

回复 #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也不是相等的。
所以这里你应该用交叉来判断。不能用等于。
在曲线的判断中走平和两条曲线相等的判断是不能用简单的等于来运算的。

TOP

没有全部读完你的代码。
提几个建议。
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什么都不做。
平仓信号也可以同样操作。
这样你的代码会方便很多。

[ 本帖最后由 xfxyldj 于 2007-8-21 22:20 编辑 ]

TOP

发一个均线交叉的子函数供你参考。
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);
  }

TOP

呵呵,很高兴大家这么关系我做的这个垃圾EA,这个EA是在网站上自动生成的,对于自动生成的EA没有必要要求太高。
我做这个EA的目的就是为了抛砖引玉,让大家知道制作一个EA不是很困难的事情,同样,想做一个好EA却不简单
谢谢xfxyldj兄的宝贵意见
郑重声明:
本人真的不是猪!!!

TOP

真不容易啊,

TOP

等我学好基础知识,也要做个EA
做最好的自己

TOP

怎么用不了啊?

TOP

回复 #27 tongren 的帖子

如何用不了?
不能加载还是不能交易?

TOP

TOP

引用:
原帖由 xfxyldj 于 2007-8-26 01:11 发表
如何用不了?
不能加载还是不能交易?
不能加载,在mt上显示不了!

[ 本帖最后由 tongren 于 2007-8-26 10:59 编辑 ]

TOP

发新话题