21评论

0收藏

CT_EA_V3.0 效果还不错,就是运行5分线,有时会重复开单。有没高手知道怎么解决?

 

avatar 阿强_cqgoY | 9664 人阅读 | 21 人评论 | 2016-06-08

CT_EA_V3.0 效果还不错,就是5分线,重复开单。
有没高手知道怎么解决重复开单的问题?
外汇1.png
""
还没有人打赏,支持一下

评论|共 21 个

陈沫池

发表于 2016-6-8 17:35:49 | 显示全部楼层

增一个变量,做为交易的开关

狠赵狠蛇蛇

发表于 2016-6-8 17:41:59 | 显示全部楼层

你可以研究下这个

  1. //+------------------------------------------------------------------+
  2. //|                                                    test14_EA.mq4 |
  3. //|                                                           wangyu |
  4. //|                                      http://wangyu204.taobao.com |
  5. //+------------------------------------------------------------------+
  6. //EA 模版功能
  7. //1.同一标识不会重复下单
  8. //2.止损止盈可以设置为0
  9. //3.兼容有些平台 开单不能下止损的问题
  10. //
  11. #property copyright "wangyu"
  12. #property link      "http://wangyu204.taobao.com"

  13. //定义全局变量
  14. double ema10_15M;
  15. double ema20_15M;
  16. double ema10_30M;
  17. double ema20_30M;
  18. double k;
  19. double d;
  20. double prevK;
  21. double prevD;

  22. //+------------------------------------------------------------------+
  23. //| expert initialization function                                   |
  24. //+------------------------------------------------------------------+
  25. int init()
  26.   {
  27.    return(0);
  28.   }
  29. //+------------------------------------------------------------------+
  30. //| expert deinitialization function                                 |
  31. //+------------------------------------------------------------------+
  32. int deinit()
  33.   {
  34.    return(0);
  35.   }
  36. //+------------------------------------------------------------------+
  37. //| expert start function                                            |
  38. //+------------------------------------------------------------------+
  39. int start()
  40.   {
  41.    int buyTicket=0;
  42.    int sellTicket=0;
  43.    getData();
  44.    
  45.    if(needOpenBuy())
  46.    {
  47.       buyTicket = buy(0.01,250,250,"buy",0);
  48.       if(buyTicket>0)
  49.       {
  50.          Alert("多单下单成功,订单号码是:"+buyTicket);
  51.       }else if(buyTicket<0)
  52.       {
  53.          Alert("多单下单失败");
  54.       }
  55.    }
  56.    if(needOpenSell())
  57.    {
  58.       sellTicket = sell(0.01,300,200,"sell",0);
  59.       if(sellTicket>0)
  60.       {
  61.          Alert("空单下单成功,订单号码是:"+sellTicket);
  62.       }else if(buyTicket<0)
  63.       {
  64.          Alert("空单下单失败");
  65.       }
  66.    }
  67.    
  68.    return(0);
  69.   }
  70. //+------------------------------------------------------------------+
  71. //get data
  72. void getData()
  73. {
  74.    //获取  均线 数据
  75.   ema10_15M = iMA(Symbol(),PERIOD_M15,10,0,MODE_EMA,PRICE_CLOSE,0);//最后一根k线
  76.   ema20_15M = iMA(Symbol(),PERIOD_M15,20,0,MODE_EMA,PRICE_CLOSE,0);//最后一根k线
  77.   ema10_30M = iMA(Symbol(),PERIOD_M30,10,0,MODE_EMA,PRICE_CLOSE,0);//最后一根k线
  78.   ema20_30M = iMA(Symbol(),PERIOD_M30,10,0,MODE_EMA,PRICE_CLOSE,0);//最后一根k线
  79.   
  80.   //获取 kdj 数据
  81.   k = iStochastic(Symbol(),PERIOD_M15,8,5,5,MODE_SMA,0,MODE_MAIN,0);//最后一根k线 主线 蓝色
  82.   d = iStochastic(Symbol(),PERIOD_M15,8,5,5,MODE_SMA,0,MODE_SIGNAL,0);//最后一根k线 线号线 红色
  83.   prevK = iStochastic(Symbol(),PERIOD_M15,8,5,5,MODE_SMA,0,MODE_MAIN,1);//上一根k线 主线 蓝色
  84.   prevD = iStochastic(Symbol(),PERIOD_M15,8,5,5,MODE_SMA,0,MODE_SIGNAL,1);//上一根k线 线号线 红色
  85. }


  86. // open sell contidion
  87. bool needOpenSell()
  88. {
  89.   bool result = FALSE;
  90.   if((ema10_15M<ema20_15M)&&(ema10_30M<ema20_30M))
  91.   {
  92.     if((k<d)&&(prevK>prevD))
  93.     {
  94.       result = TRUE;
  95.     }
  96.   }
  97.   return (result);
  98. }

  99.   // open buy contidion
  100. bool needOpenBuy()
  101. {
  102.   bool result = FALSE;
  103.   if((ema10_15M>ema20_15M)&&(ema10_30M>ema20_30M))
  104.   {
  105.    if((k>d)&&(prevK
  106.    {
  107.       result = TRUE;
  108.    }
  109.   }
  110.   return (result);
  111. }

  112. int buy(double lots,int stopLoss,int stopProfit,string comment,int magic)
  113. {
  114.    int ticket = 0;
  115.    int findBuyNum =0;   
  116.    for(int i=0;i
  117.    {
  118.       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  119.       {
  120.          if(OrderComment()==comment)
  121.          {
  122.             findBuyNum++;
  123.          }
  124.       }
  125.    }
  126.    
  127.    if(findBuyNum==0)  //避免同一标识 重复下单
  128.    {  
  129.       ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,30,0,0,comment,magic,0,White);  //适应开单不能下止盈止损的平台
  130.       if(ticket>0)
  131.       {
  132.          if(OrderSelect(ticket,SELECT_BY_TICKET)==true)
  133.          {
  134.             int stopLossValue=OrderOpenPrice()-stopLoss*Point;
  135.             int stopProfitValue=OrderOpenPrice()+stopProfit*Point;
  136.             if(stopLoss==0)
  137.             {
  138.                stopLossValue=0;
  139.             }
  140.             if(stopProfit==0)
  141.             {
  142.                stopProfitValue=0;
  143.             }
  144.          
  145.             if(OrderModify(OrderTicket(),OrderOpenPrice(),stopLossValue,stopProfitValue,0,White)==true) //下单成功没问题,修改订单成功后在返回
  146.             {
  147.                return (ticket);
  148.             }
  149.          }
  150.       }
  151.    }
  152.    
  153.    return (0);
  154. }

  155. int sell(double lots,int stopLoss,int stopProfit,string comment,int magic)  //magic 暂时没有用到
  156. {
  157.    int ticket = 0;
  158.    int findSellNum =0;   
  159.    for(int i=0;i
  160.    {
  161.       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
  162.       {
  163.          if(OrderComment()==comment)
  164.          {
  165.             findSellNum++;
  166.          }
  167.       }
  168.    }
  169.    
  170.    if(findSellNum==0)  //避免同一标识 重复下单
  171.    {
  172.       ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,30,0,0,comment,magic,0,Red);    //适应开单不能下止盈止损的平台
  173.       if(ticket>0)
  174.       {
  175.          if(OrderSelect(ticket,SELECT_BY_TICKET)==true)
  176.          {
  177.             int stopLossValue=OrderOpenPrice()+stopLoss*Point;
  178.             int stopProfitValue=OrderOpenPrice()-stopProfit*Point;
  179.             if(stopLoss==0)
  180.             {
  181.                stopLossValue=0;
  182.             }
  183.             if(stopProfit==0)
  184.             {
  185.                stopProfitValue=0;
  186.             }
  187.          
  188.             if(OrderModify(OrderTicket(),OrderOpenPrice(),stopLossValue,stopProfitValue,0,Red)==true) //下单成功没问题,修改订单成功后在返回
  189.             {
  190.                return (ticket);
  191.             }
  192.          }
  193.       }
  194.       
  195.    }
  196.    
  197.    return (0);
  198. }
复制代码


2010c

发表于 2016-6-8 17:56:39 | 显示全部楼层



int  OrdersTotal();


Returned value

Total amount of market and pending orders.

阿强_cqgoY

发表于 2016-6-8 21:31:54 | 显示全部楼层

陈沫池 发表于 2016-6-8 17:35
增一个变量,做为交易的开关

谢谢,如果只开一个单,统计总单数,开单判断就可以了,
但我想每个顶点都开一单。最多开三单。
但是,每次达标开单,都是一次开三个单。
没找什么解决方法。

阿强_cqgoY

发表于 2016-6-8 21:33:37 | 显示全部楼层

陈沫池 发表于 2016-6-8 17:35
增一个变量,做为交易的开关

谢谢,
能不能用柱子判断?就是开了单,同柱不重复开单?

henaiyun

发表于 2016-6-8 23:20:46 | 显示全部楼层

阿强_cqgoY 发表于 2016-6-8 21:33
谢谢,
能不能用柱子判断?就是开了单,同柱不重复开单?

可以实现的

阿强_cqgoY

发表于 2016-6-8 23:34:35 | 显示全部楼层


真的吗?有没源码?

henaiyun

发表于 2016-6-9 09:40:19 | 显示全部楼层

阿强_cqgoY 发表于 2016-6-8 23:34
真的吗?有没源码?

加Q聊吧,私信你了

smsjk88

发表于 2016-6-9 13:08:52 | 显示全部楼层

1

123下一页
您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则