比特币通信协议 - 币圈消息

比特币通信协议篇11、二、TURN简介。在典型的情况下,TURN客户端连接到内网中,并且通过一个或者多个NAT到 详细

【资源组】详解kitgain版汉化CaspianEA.GBP(里海剥头皮EA)

  [复制链接]
441 14
kitgain 发表于 2018-1-11 00:41:08 | 只看该作者 |阅读模式 打印 上一主题 下一主题
最近在继续学习MT4编程过程中,接触到CaspianEA,中文称作“里海EA”(Caspian是里海的意思),群里今年年初已经发布了,网址是http://www.520fx.com/forum.php?mod=viewthread&tid=41038&extra=&page=1。这个ea是2009年在国外非常火,争议也大的一个ea,官方宣称是“行星地球第一大ea”,提供的测试报告数据,也是好的惊人。暂不论好坏,这也说明坛子里有好多宝贝,需要各位汇友认真发掘,吸取前人包括洋鬼子的精华之处,为我所用。
      这个EA似乎是阿拉伯人搞的,后来被其它人指出是大尺寸剽窃Dragonpips EA(我比较了一下,确实95%以上雷同),而后者是从Thunder4WD改造来的,另有人反映后者(Dragonpips EA)会制造巨大损失,而前者(CaspianEA)不会。是不是好用,需要各位测试,小手数用于实盘试试。我很纳闷的地方是,这个ea是剥头皮的,每次赢利1点到数点,但原ea的测试结果,显示单次大量赢利,已不是剥头皮的风格呀,看懂源码,也没发现有什么特别的地方,所以感觉很奇怪真有宣称的超高胜率和盈亏比么?
      可能受此影响,CapianEA的官方网站、demo账户、官方测试报告,我已从google搜索不到了,但还能找到国外坛子里一些残留的信息,用来反思这个EA。
      本人将其汉化核心部分,以方便同等水平的汇友研读,同时老办法,去除冗余代码、参数、函数等,让核心代码显示出来。另外kitgain发帖,必属精品,但我也缺金币,恳请各位看官积极加分,方便我从坛子里继续发掘、汉化、公开源码,大大减轻你学习MT4的劳动量!
      本贴,我将择要公布源码,抛砖引玉,方便讨论,希望有兴趣的朋友直接加我qq7318875,直接开门见山提问,共同探讨,纯技术沟通,不要打广告、打听个人隐私问题,时间久了,自然就是好朋友了。
       现在开始,
       CaspianEA有两个ex4文件和一个dll文件,这次我只讨论EURGBP这个源码(EA全称是CaspianEA.GBP),EURCHF的,我还没分析,之后我再发布新帖。dll文件是与EURCHF相关,与EURGBP无关,另外有的CaspianEA版本引入了windows自带的dll文件,无需另外下载。Anyway,下载我的汉化版更好些,免得看的眼花缭乱,当然有意深入探讨各种流传版本的,可都打开源码看看。
        外部参数设置如下,
[C] 纯文本查看 复制代码extern string PartOne = "Trading Configurations";
extern int CaspianFactor = 5; //5点目标值,取了名为里海因子,只是个名字而已
extern int MaxTrades = 5;     //最多开5单
extern double TakeProfit = 5.0;//原为4,我是4点点差平台,所以我改成5点止盈目标了
extern double StopLoss = 30.0;//止损30点,所以不应该有大的亏损呀
extern int MagicNumber = 6666;//必须得设,后面有好几种不同订单,通过魔术号码区别
extern int Slippage = 3;
extern string PartTwo = "Money Management Configurations";
extern bool UseMoneyManagement = TRUE; //资金管理开关
extern int Risk = 10;
extern double Lots = 0.1;
extern int LotsDigit = 1;
extern string PartThree = "Time Configurations";
extern int StartHour = 22;//就不要改了,先试试缺省的开始和结束时间吧,似乎没有调整时差功能,这是不是个bug?
extern int EndHour = 24;
      非外部参数,就不详列了,可打开源码查看。(若出现不能编辑,可使用旧版本的MetaEditor)
      现在看主函数,
[C] 纯文本查看 复制代码交易结束时间 = EndHour + 1;//说明这个ea喜欢在西方时间的半夜折腾
   if (交易结束时间 > 24) 交易结束时间 -= 24;
   int 魔术号码1 = MagicNumber + 1;
   int 魔术号码2 = MagicNumber + 2;
   int 魔术号码3 = MagicNumber + 3;
   HideTestIndicators(TRUE);//隐藏测试指标,不清楚作用,貌似叉掉也不影响使用

//findMyOrders();//这个函数感觉没啥作用,被我连窝咔嚓了。
   onScreenComment(98);//显示版本信息的,留着吧,知道我也做点贡献,汉化过:)
       接下来计算分形指标,源码为:
[C] 纯文本查看 复制代码for (int i = 1; i  
         这里本来我认为无需使用for语句遍历循环,提出异议,结果当天就有资源组朋友指出,分形指标计算至少需要5柱,这下又让我长了见识,感谢这位朋友!也希望大家能互相交流,共同进步!
        接下来,使用一条语句
[C] 纯文本查看 复制代码if (Close[0] = 分形H1下值) 在H1分形通道中 = TRUE;
判断是否在H1分形的通道中的状态,留作后用。
         接着统计甲、乙、丙、丁四类订单的数量,如果大家喜欢,也可使用“戊、己、庚、辛”等天干地支来取个名,反正我是看反编译的英文代码,烦透了!其它用不着的统计开盘价的,都被核实清楚后,删除了这些冗余代码,各位看官更容易抓住这个ea的核心策略了。
[C] 纯文本查看 复制代码if (订单分类开关 == TRUE) {
      for (i = 0; i = OrderOpenPrice() + TakeProfit * 货币点) {
            //甲类
               RefreshRates();
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Orange);
            }
         }
         if (OrderType() == OP_BUY && OrderMagicNumber() == 魔术号码1) {
            if (Bid >= OrderOpenPrice() + (TakeProfit - 2.0) * 货币点) {
               RefreshRates();
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Orange);
            }
         }
         if (OrderType() == OP_BUY && OrderMagicNumber() == 魔术号码2) {
            if (Bid >= OrderOpenPrice() + (TakeProfit - 1.0) * 货币点) {
               RefreshRates();
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Orange);
            }
         }
         if (OrderType() == OP_BUY && OrderMagicNumber() == 魔术号码3) {
            if (Bid >= OrderOpenPrice() + (TakeProfit - 2.0) * 货币点) {
               RefreshRates();
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Orange);
            }
         }
        ......//卖单同理
      }
   }
         上述代码,针对甲乙丙丁四类订单,平仓动作,可以看出,赢利目标很少。
[C] 纯文本查看 复制代码if (状态2 == TRUE) {
      for (int ticket = 0; ticket  60 * 一段
            && TimeCurrent() - OrderOpenTime() = OrderOpenPrice() + 头皮1 * 货币点) {
          //一段=60,二段=140,头皮1=3
          //在60~140分钟内强行平仓

               RefreshRates();
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Orange);
               Print("Prot. Level 1 - Close Price :" + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +
                  " Profit : $ " + DoubleToStr(OrderProfit(), 2));
            }
... ...
            上段开始对不同的时间段,执行不同目标的平仓,可以看出目标价位仍然很小,确实在剥头皮。
             注意代码
[C] 纯文本查看 复制代码if (DayOfWeek() == 5 && Hour() >= 19) {
            //一周尾盘平仓
               RefreshRates();
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Orange);
               Print("Prot. Level 5 - Close Price :" + DoubleToStr(OrderClosePrice(), 4) + " Lots : " + DoubleToStr(OrderLots(), 2) + " Order Number : " + DoubleToStr(OrderTicket(), 0) +
                  " Profit : $ " + DoubleToStr(OrderProfit(), 2));
            }
显示在周五尾盘,是强行平仓的。这是不是大回撤的错误来源?
           [C] 纯文本查看 复制代码   if (状态3 == TRUE) {
      if (iOpen(Symbol(), PERIOD_M5, 0) >= Ask + gd_300) return;//0.001
      if (iOpen(Symbol(), PERIOD_M5, 0) = Ask + gd_308) return;//0.001
      if (iOpen(Symbol(), PERIOD_M5, 1) = Ask + gd_316) return;//0.0012
      if (iOpen(Symbol(), PERIOD_M5, 2)
     上段代码,我们可以猜测是不参与跳空行情,这种代码方法,我是受教了,你呢?
      接下来的一句很简单的代码
[C] 纯文本查看 复制代码if (Ask - Bid > 点差允许水平 * 货币点) return (0);
明白无误地告诉大家,平台点差,或浮动点差超过点差允许水平(缺省是4点)的,这个ea不会工作,这也说明,不看懂ea,茫然使用ea是错误的。很多洋鬼子抱怨这个ea不工作,其实就是这句语句在起作用呀!
       接下来的是资金管理代码,懒得分析其逻辑,反正有MM的ea都不错,这个地球人都知道。
        然后是使用常规指标赋值计算,
[C] 纯文本查看 复制代码   double 六周期M15CCI = iCCI(NULL, PERIOD_M15, 6, PRICE_CLOSE, 0);
   double 贰拾周期M1RSI = iRSI(NULL, PERIOD_M1, 20, PRICE_CLOSE, 0);
   double 昨八周期MA1 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 1), 4);
   //当前时框,建议值是M15
   double 昨八周期MA2 = NormalizeDouble(iMA(NULL, 0, 8, 0, MODE_SMA, PRICE_WEIGHTED, 1), 4);
   double 十四周期M15CCI = iCCI(Symbol(), PERIOD_M15, 14, PRICE_CLOSE, 0);
   double 四十二周期M5CCI = iCCI(Symbol(), PERIOD_M5, 42, PRICE_CLOSE, 0);
   double 贰佰壹周期M1CCI = iCCI(Symbol(), PERIOD_M1, 210, PRICE_CLOSE, 0);
   double 捌拾周期M1CCI = iCCI(Symbol(), PERIOD_M1, 80, PRICE_CLOSE, 0);
   double 肆周期M5动量 = iMomentum(Symbol(), PERIOD_M5, 4, PRICE_CLOSE, 0);
   double 拾肆周期M5WPR = iWPR(Symbol(), PERIOD_M5, 14, 0);
   double 昨日贰拾周期M5布林上限 = iBands(Symbol(), PERIOD_M5, 20, 2, 0, PRICE_WEIGHTED, MODE_UPPER, 1);
   double 昨日贰拾周期M5布林下限 = iBands(Symbol(), PERIOD_M5, 20, 2, 0, PRICE_WEIGHTED, MODE_LOWER, 1);
   double M5MA高 = iMA(Symbol(), PERIOD_M5, 1, 0, MODE_EMA, PRICE_HIGH, 0);
   double M5MA低 = iMA(Symbol(), PERIOD_M5, 1, 0, MODE_EMA, PRICE_LOW, 0);
后面用不着的,已经被我咔擦了,各位看官是不是赶紧给我加金币啊,我做了很多删除冗余代码的工作啦,你看源码,直接晕倒!需要提醒大家的是,由于使用NULL参数,使用时应该把图表放在EURGBP M15上,免得出错。
    吃完饭,接着发,稍候精彩继续...
收藏
收藏0
转播
转播
分享
分享
分享
淘帖0

精彩评论14

跳转到指定楼层
15#
子泉 发表于 2018-1-11 10:50:39 | 只看该作者

建议 胡老师和王老师讲课后,让他也讲讲课
专门研究ea使用,调试,参数设置等
编程学不会,使用还是要学好的
14#
bhl 发表于 2018-1-11 10:40:45 | 只看该作者
感谢楼主的辛勤付出~~~
13#
qiaqia 发表于 2018-1-11 09:50:17 | 只看该作者
谢谢分享
12#
lcjxau 发表于 2018-1-11 08:49:02 | 只看该作者
看在你写的那么辛苦的份上,顶一个
11#
zw0806 发表于 2018-1-11 08:43:30 | 只看该作者
感谢楼主的辛勤付出~~~~
10#
好起来了 发表于 2018-1-11 07:56:56 | 只看该作者

520FX有你更精彩!
9#
dashayuyu 发表于 2018-1-11 07:04:02 | 只看该作者
感谢楼主的辛勤付出~~~~
8#
psp 发表于 2018-1-11 06:29:20 | 只看该作者
看不懂,没那个技术
7#
hzzh2009 发表于 2018-1-11 05:26:56 | 只看该作者
好专业。好深奥。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by 顺水鱼MT4外汇EA网! X3.2© 2001-2017 顺水MT4外汇EA公司.( 陕ICP备17014341号-1