交易危机

 找回密码
 快捷注册(禁q号)

QQ登录

只需一步,快速开始

搜索
广告位
查看: 1288|回复: 1
打印 上一主题 下一主题

[代码] EA代码学习探索五---几款EA解说

[复制链接]

2128

主题

6万

积分

157

精华

大型投行

金钱
61414 美元
权重
640
跳转到指定楼层
楼主
发表于 2018-8-1 22:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 frlin2003 于 2016-6-21 23:13 编辑
  1. #property copyright "Shawn Yau"  
  2. extern double Lots = 0.1;        //默认交易单位  
  3. extern int StopLoss = 30;        //止损  
  4. extern int TakeProfit = 30;      //止赢  
  5. extern int Magic_Number = 8899;  //Magic_Number是用来标识这个EA的唯一性的,简单来说,就是这个EA的身份证  
  6. extern int FasterMA = 5;    //均线1的周期  
  7. extern int SlowerMA = 25;  //均线2的周期  
  8. extern int Trade_Bar = 0;  //下单的时机,如果为1,表示等待当前的K线完成,下一根K线刚出现的时候才下单;如果为0表示只要当前的价格  
  9.                             //满足条件了就马上下单  
  10. int last_t = 0;            //这个是用来避免重复下单  

  11. int init()          //这个是初始化函数,只会在EA刚加载到图表上的时候运行一次,之后就不起作用了  
  12.   {  
  13.   return(0);  
  14.   }  
  15. int deinit()        //反初始化函数,用处是在删除EA的时候运行一次,做一些清理性的工作,例如把所画的线、箭头等从图表上删除掉  
  16.   {  
  17.   return(0);  
  18.   }  
  19. int start()  
  20.   {  
  21.   //定义几个变量,从名字也可以很容易看出其代表的含义了: FasterMANow表示均线1当前的值、SlowerMANow表示均线2当前的值、  
  22.   ///FasterMAPrevious表示均线1的前值、SlowerMAPrevious表示均线2的前值;均线金叉,其实就是表示当均线1的前值小于均线2的前值,  
  23.   //且均线1的当前值大于均线2的当前值。这样描述我想应该能明白了吧 :-)  
  24.   double FasterMANow, SlowerMANow, FasterMAPrevious, SlowerMAPrevious;  
  25.   //下面是给各个变量赋值,iMA就是均线函数,里面的各个参数可以在我在论坛发的中文文档上查到说明的  
  26.   FasterMANow = iMA(NULL, 0, FasterMA, 0, MODE_SMA, PRICE_CLOSE, Trade_Bar);  
  27.   SlowerMANow = iMA(NULL, 0, SlowerMA, 0, MODE_SMA, PRICE_CLOSE, Trade_Bar);  
  28.   FasterMAPrevious = iMA(NULL, 0, FasterMA, 0, MODE_SMA, PRICE_CLOSE, Trade_Bar+1);  
  29.   SlowerMAPrevious = iMA(NULL, 0, SlowerMA, 0, MODE_SMA, PRICE_CLOSE, Trade_Bar+1);  
  30.   //下面开始判断是否发生金叉了  
  31.   if ((FasterMANow > SlowerMANow) && (FasterMAPrevious <= SlowerMAPrevious)) {  
  32.       if ((TotalOrders(Magic_Number)==0) && (Time[0]>last_t))  ///如果当前的EA还没有下单  
  33.       {  
  34.         RefreshRates();  ///刷新市场报价  
  35.         ///下单都是用OrderSend()函数来进行的,这是个系统函数,详细说明可以在文档里面查到  
  36.         OrderSend(Symbol(), OP_BUY, Lots, NormalizeDouble(Ask,Digits), 3, NormalizeDouble(Ask-StopLoss*Point,Digits),  
  37.             NormalizeDouble(Ask+TakeProfit*Point,Digits), "", Magic_Number, 0, Blue);  
  38.         last_t = Time[0];  
  39.         return (0);   
  40.       }         
  41.   }  
  42.   //如果没有发生金叉,则下面开始判断是否发生死叉  
  43.       else if ((FasterMANow < SlowerMANow) && (FasterMAPrevious >= SlowerMAPrevious)) {  
  44.         if ((TotalOrders(Magic_Number)==0) && (Time[0]>last_t))   
  45.         {  
  46.             RefreshRates();  
  47.             OrderSend(Symbol(), OP_SELL, Lots, NormalizeDouble(Bid,Digits), 3, NormalizeDouble(Bid+StopLoss*Point,Digits),  
  48.               NormalizeDouble(Bid-TakeProfit*Point,Digits), "", Magic_Number, 0, Blue);  
  49.             last_t = Time[0];  
  50.             return (0);   
  51.         }           
  52.       }   
  53.   return(0);  
  54.   }  
  55. //TotalOrders()函数的作用是返回Magic_Number为magic的EA所下的单子的总数  
  56. int TotalOrders(int magic){  
  57.   int rez=0;  
  58.   for (int i=0;i<OrdersTotal();i++){  ///这里做一个循环,OrderTotal()是系统函数,作用是返回当前帐户下所有尚未平仓的单子总数  
  59.       OrderSelect(i,SELECT_BY_POS);    ///OrderSelect()是系统函数,具体说明可以在文档里面查到  
  60.       if (OrderMagicNumber()==magic){  ///如果这个订单是当前EA所下的单  
  61.         rez++;  
  62.       }  
  63.   }   
  64.   return(rez);    ///返回循环计算后得到的当前EA所下的单子的总数  
  65. }
复制代码
来源: EA代码学习探索五---几款EA解说
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 保留保留

4

主题

9227

积分

0

精华

所有交易让市场验证

操盘专家

金钱
9227 美元
权重
8
沙发
发表于 2019-1-19 21:49 来自手机 | 只看该作者
消灭零回复
您需要登录后才可以回帖 登录 | 快捷注册(禁q号)

本版积分规则

QQ|黄金吧|黄金论坛|手机版|指标下载|非农|目录|交易危机

版权所有: ©2014-2021 fx3q.com Powered by Discuz! X3
皖ICP备: 2024050410号-2

风险提示:杠杆风险高,交易要谨慎 声明:坛友发言和回复均为个人观点,不代表论坛立场。
若有侵权请联系fx3q@qq.com删除

快速回复 返回顶部 返回列表