老大一定要帮忙看看哪里有问题啊 ~ | |
---|---|
![]() |
lihujie18 2013-02-22 13:55
这是我自己写的一个EA,编译没有错误,只是他不按我的意思开仓,不知道是哪里有问题。
这是一个MARTINGALE 的EA,先开第一仓,然后如果最后一仓亏损,且符合开仓条件就进行加仓,如果最后一仓盈利达到水平位则平仓。 因为myeatrade不能进行条件加仓,所以自己学了mql4,第一次做的ea。。求老大一定要帮忙看看啊 ! 跪求了 ![]() //+------------------------------------------------------------------+ //| RSICTCM.mq4 | //| Lee | //| | //+------------------------------------------------------------------+ #property copyright "Lee" #property link "" extern int MagicNumber = 1000; extern double Lot = 0.01; extern int RSIPeriod = 14; extern double LotsMultiplier = 1.7; extern double TakeProfit = 45; double Lots1,Lots2; int start() { int ticket; int Current_rsi,Last_rsi; Current_rsi=iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,0); Last_rsi=iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,1); if(GetHoldingOrdersCount(OP_BUY)==0) { if(EnterBuyCondition(Current_rsi,Last_rsi)) { ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,0,0,"RSICTCM_1",MagicNumber,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("BUY order opened : ",OrderOpenPrice()); return (true); } } else { Print("Error opening BUY order : ",GetLastError()); return(false); } } } else { OrderSelect(SelectLastOrder(OP_BUY),SELECT_BY_POS); if(OrderProfit()>TakeProfit/10) { ClosePosition(OP_BUY); } else { if(EnterBuyCondition(Current_rsi,Last_rsi)) { OrderSelect(SelectLastOrder(OP_BUY),SELECT_BY_POS); if(MarketInfo(Symbol(),MODE_TIME) - OrderOpenTime() > 5500) { Lots1=OrderLots()*LotsMultiplier; ticket=OrderSend(Symbol(),OP_BUY,Lots1,Ask,3,0,0,"RSICTCM_1",MagicNumber,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("BUY order opened : ",OrderOpenPrice()); return (true); } } else { Print("Error opening BUY order : ",GetLastError()); return(false); } } } } } //Sell position //if no any opened order if(GetHoldingOrdersCount(OP_SELL)==0) { if(EnterSellCondition(Current_rsi,Last_rsi)) { ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,0,0,"RSICTCM_2",MagicNumber,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("BUY order opened : ",OrderOpenPrice()); return (true); } } else { Print("Error opening BUY order : ",GetLastError()); return(false); } } } else { OrderSelect(SelectLastOrder(OP_SELL),SELECT_BY_POS); if(OrderProfit()>TakeProfit/10) { ClosePosition(OP_SELL); return (true); } else { if(OrderProfit()<0 && EnterSellCondition(Current_rsi,Last_rsi)==true) { if(MarketInfo(Symbol(),MODE_TIME) - OrderOpenTime() > 5500) { Lots2=OrderLots()*LotsMultiplier; ticket=OrderSend(Symbol(),OP_SELL,Lots2,Bid,3,0,0,"RSICTCM_2",MagicNumber,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("BUY order opened : ",OrderOpenPrice()); return (true); } } else { Print("Error opening BUY order : ",GetLastError()); return(false); } } } } } return(0); } //+------------------------------------------------------------------+ int GetHoldingOrdersCount(int tp) { int Count=0; for(int i=0;i<OrdersTotal();i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderType()==tp) { Count+=1; } } return(Count); } bool EnterBuyCondition(double CR,double LR) { if(CR>30 && LR<CR && LR<=30) return(true); else return(false); } bool EnterSellCondition(double CR,double LR) { if(CR<80 && LR>CR && LR>=80) return(true); else return(false); } int SelectLastOrder(int tp) { int lastOrder=0; for(int i=OrdersTotal();i>=0;i--) { OrderSelect(i, SELECT_BY_POS,MODE_TRADES); if(OrderType()==tp) { lastOrder=i; break; } } return(lastOrder); } bool ClosePosition(int tp)//Close all holding positions { bool Flag=true; int tick[200],tt[200]; int j=0; for(int i=0;i<OrdersTotal();i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderType()==tp) { j=j+1; tick[j]=OrderTicket(); tt[j]=OrderType(); } } if (j!=0) { for(i=1;i<=j;i++) { OrderSelect(tick, SELECT_BY_TICKET); switch(tt) { case OP_BUY: if(OrderClose(tick,OrderLots(),Bid,3,CLR_NONE)==false) Flag=false; break; case OP_SELL: if(OrderClose(tick,OrderLots(),Ask,3,CLR_NONE)==false) Flag=false; break; } } } return(Flag); } |
![]() |
opp232 2013-02-22 20:40
坐等管理员的解答同时我发表下我自己的见解我也是受本网站的影响而学习ea的你上述的问题我已经找到解决办法了,看了你的写法发现很多是多余的,还有很多函数,对于这块只要明白功能就可以了,只是你对于ea的运行要求,和代码的函接还是显得生疏,例如你编程习惯,star函数里其实只放函数块会更简洁逻辑更清晰执行更加有力,你的代码里有些限制过于严格有些又显得有些多余例如ordertoatal>0我见到不少其实只要有GetHoldingOrdersCount(OP_BUY)==0就能控制下单的了前面有些多余,总的来说还是代码结构和逻辑问题,需要多找资料看看别人是怎样写ea的,由于我不熟悉你的编程习惯而且我自己水平也有限就先放这么多吧,看看管理怎样回答你的
//============================================================================ 而且似乎你对于ea的循环语句还是不熟悉应该仔细查找错误 |
![]() |
lihujie18 2013-02-22 21:02 opp232 写道:坐等管理员的解答同时我发表下我自己的见解我也是受本网站的影响而学习ea的你上述的问题我已经找到解决办法了,看了你的写法发现很多是多余的,有些明显从网上复制的函数,对于这块只要明白功能就可以了,只是你对于ea的运行要求,和代码的函接还是显得生疏,例如你编程习惯,star函数里其实只放函数块会更简洁逻辑更清晰执行更加有力,你的代码里有些限制过于严格有些又显得有些多余例如ordertoatal>0我见到不少其实只要有GetHoldingOrdersCount(OP_BUY)==0就能控制下单的了前面有些多余,总的来说还是代码结构和逻辑问题,需要多找资料看看别人是怎样写ea的,由于我不熟悉你的编程习惯而且我自己水平也有限就先放这么多吧,看看管理怎样回答你的 //============================================================================ 而且似乎你对于ea的循环语句还是不熟悉应该仔细查找错误 谢谢回答。 ![]() 是的,我才学没几天,还不太会循环语句,也不太了解要用在哪里,所以需要循环的部分都是搜到的自定义函数。 我的EA架构很简单清晰,我本以为只要有个入门的水平就可以做出来了,结果却比想象中要难。 请问您知道在哪里可以找到中级教程吗?我在网上搜了一大堆全都是入门级的教程,关于制作martingale的范例也是很少。 |
![]() |
opp232 2013-02-22 22:09
中级高级课程免费的估计很难找到有一些是收费课程,但是讲课老师的功力值得怀疑,你不妨先找些网站里面有视频教程,多看入门课程,看别人是怎样分析ea的,要注意哪些地方这些都能找到,还可以直接学习trade函数因为它是经常用到的,可以说熟悉里面的函数你要写指标ea是很容易的,剩下的就要边看边写了,需要时间熟悉,等你成功制作一个属于你自己的ea的时候你基本入门了,这时候再尝试写复杂的,不妨就写个简单的指标ea看看,先熟悉
至于你说手法ea的写法估计给你源码的人更少,我自己也是自己写自己用呵呵 ea框架方面没有固定的只要你认为合适在不影响程序运行的情况下都是可以的,这个跟个人习惯有关系 |
![]() |
lihujie18 2013-02-27 22:25
看来是不会免费给看了。。你能帮我指出毛病在哪里吗 谢谢
|
![]() |
opp232 2013-02-27 23:12
OrderProfit()>TakeProfit/10你这句表达的似乎有问题如果要盈利大于某钱数直接把数字打上就行了
OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if(OrderType()==tp) { 订单的选择方式没错不过下面缺乏订单号码或标记这样程序很容易混饶 © 2012 myEAtrade.com.All Rights Reserved. | Blog | Entries (RSS) | Community (RSS) | 网站地图 | Sitemap.xml | Contact Us Links: MQL4 | MQL5 | DailyFx | 和讯外汇 | 中金外汇 | 新浪财经外汇 | 金融界外汇 | 腾讯外汇 | 搜狐外汇 | 网易外汇 | 外汇通 | 汇通网 | 外汇宝盒 | 外汇联盟 | 520FX | 程序化交易者 | 外汇110网 | 迈石外汇论坛 | FBS | 新外汇 | 逍遥外汇 | 外汇交易者 | 八九外汇 | 诺德外汇论坛 | 爱汇 | 易道网 | 兄弟财经 | 外汇ea大比拼 | 7号交易员 网站下面不是有一些友情链接吗有些是有视频教程而且是免费的 我推荐520FX //================================================================================== 还有我已经跟你说了2次了你的代码结构和逻辑真的是有问题 我虽然没测试过的ea但大概能知道这ea的执行力度肯定很差能下单就已经不错了 |
![]() |
lihujie18 2013-02-27 23:23
OK 3Q
magicnumber其实我是故意没加,因为只是学习用,所以感觉多余。。 |
![]() |
opp232 2013-02-27 23:51
哪只这样最起码你要标上symbol 和magic
|
Page 1 of 1
1
请登录后发表回复,如果你还没有账户你可以 免费注册
回到 MQL 编程