智能交易网,程序化交易,自动交易,量化交易

 找回密码
 注册

QQ登录

只需一步,快速开始

手机短信登录

参加MT4智能交易编程培训,7课免费在线试听MT4指标,EA代写,或EA指标加密账户远程验证服务 最完善商业MT4跟单系统(0.1秒极速响应不漏单)
为论坛做贡献有奖学金,奖学金可直接换真钱 扫本站微信公 众号部分视频课程指标EA免费得智能交易网MT4操盘神器,扫公众号免费得
查看: 1051|回复: 8

节假日收盘前平仓,节假日结束又开始运行

[复制链接]
发表于 2016-11-21 16:52:23 | 显示全部楼层 |阅读模式
要实现全自动挂云端运行,所以想让EA在每周末,每个休市时间前平掉全部仓位;等工作日开始时,EA重新运行。

我的想法是用DayOfWeek()来获得星期数,在其值为0或6时,return(0)(也就是不运行),
但是其它节日,以及平仓和重新开始运行,该怎么写呢 ?


谢谢!
回复

使用道具 举报

 楼主| 发表于 2016-11-21 18:55:08 | 显示全部楼层
  1. int closesell()
  2.      {
  3.         while(ordersTotal()!=0)//这样会不会太占用资源,因为还有BUY单在的
  4.        {
  5.         int t=OrdersTotal();//放在外面比较好,因为你平仓后总单数就少了。
  6.        for(int i=0;i<t;i++)               
  7.               {
  8.                     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  9.                       {
  10.                         if((OrderComment()==(Symbol()+"sell")))   
  11.                          {
  12.                              OrderClose(OrderTicket(),OrderLots(),Ask,300);            
  13.                          }
  14.                       }
  15.                 }
  16.             }
  17.       }
复制代码
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-11-21 18:51:14 | 显示全部楼层
  1. {

  2. if (Hour()>=大于等于小时 &&  Minute()>=大于等于分钟){
  3. int cnt, total;
  4. total=OrdersTotal();
  5. for(cnt=total-1;cnt>=0;cnt--)
  6.   {
  7.    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

  8.    if(OrderType()==OP_SELL)
  9.     {
  10.      OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
  11.     }
  12.    if(OrderType()==OP_BUY)
  13.     {
  14.      OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
  15.   }

  16. }
  17. return(0);
  18. }}
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-21 18:54:12 | 显示全部楼层
  1. //保证全平
  2. int closesell()
  3.     {
  4.        int t=OrdersTotal();//放在外面比较好,因为你平仓后总单数就少了。
  5.       for(int i=0;i<t;i++)               
  6.              {
  7.                    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  8.                      {
  9.                        if((OrderComment()==(Symbol()+"sell")))   
  10.                          {
  11.                             OrderClose(OrderTicket(),OrderLots(),Ask,300);            
  12.                          }
  13.                       }
  14.                }
  15.      }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-21 18:55:27 | 显示全部楼层
  1. void CloseAllOrder()//帐户所有订单平仓/删除一次
  2. {
  3.    int Suzhu[200];
  4.    CloseYesorNo = FALSE;
  5.    int j = 0;
  6.    int i = 0;
  7.    for (i = 0; i < OrdersTotal(); i++) //遍历所有订单,如果有单,订单号放入数组(从第二位开始放),j>0
  8.    {
  9.       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)==true)
  10.          {
  11.             j++;
  12.             Suzhu[j] = OrderTicket();
  13.             Print("全部平仓! 包括订单:", Suzhu[j]);
  14.          }
  15.       }
  16.       if (j != 0) //有单
  17.       {
  18.          for (i = 1; i <= j; i++) //从数组第二位开始,所有单平一遍,如有没平成功的,CloseYesorNo为TRUE
  19.          {
  20.             if(OrderSelect(Suzhu[i], SELECT_BY_TICKET)==true)
  21.             {
  22.             if (OrderType() == OP_BUY)
  23.             {
  24.                if (OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 全平时滑点) == 0) //失败
  25.                {
  26.                   CloseYesorNo = TRUE;
  27.                   Print("BUY单平仓失败,错误码:" + GetLastError());
  28.                }
  29.             }
  30.             if (OrderType() == OP_BUYSTOP)
  31.             {
  32.                if (OrderDelete(OrderTicket(), CLR_NONE) == 0)
  33.                {
  34.                   CloseYesorNo = TRUE;
  35.                   Print("BUYSTOP单撤销失败,错误码:" + GetLastError());
  36.                }
  37.             }
  38.             if (OrderType() == OP_BUYLIMIT)
  39.             {
  40.                if (OrderDelete(OrderTicket(), CLR_NONE) == 0)
  41.                {
  42.                   CloseYesorNo = TRUE;
  43.                   Print("BUYLIMIT单撤销失败,错误码:" + GetLastError());
  44.                }
  45.             }
  46.             if (OrderType() == OP_SELL)
  47.             {
  48.                if (OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 全平时滑点) == 0)
  49.                {
  50.                   CloseYesorNo = TRUE;
  51.                   Print("SELL单平仓失败,错误码:" + GetLastError());
  52.                }
  53.             }
  54.             if (OrderType() == OP_SELLSTOP)
  55.             {
  56.                if (OrderDelete(OrderTicket(), CLR_NONE) == 0)
  57.                {
  58.                   CloseYesorNo = TRUE;
  59.                   Print("SELLSTOP单撤销失败,错误码:" + GetLastError());
  60.                }
  61.             }
  62.             if (OrderType() == OP_SELLLIMIT)
  63.             {
  64.                if (OrderDelete(OrderTicket(), CLR_NONE) == 0)
  65.                {
  66.                   CloseYesorNo = TRUE;
  67.                   Print("SELLLIMIT单撤销失败,错误码:" + GetLastError());
  68.                }
  69.             }
  70.          }
  71.       }
  72.    }
  73. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-22 17:54:14 | 显示全部楼层
想到思路了:

判断是否是星期六,小时数等于23,分钟数大于55时,启动全部平仓。成功之后,Sleep10分钟
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-22 17:54:33 | 显示全部楼层
这是解决周末的问题,还有节日问题没搞定
回复 支持 反对

使用道具 举报

发表于 2016-11-22 20:53:56 | 显示全部楼层
节日和周末一样判断啊,获取日期数即可
回复 支持 反对

使用道具 举报

发表于 2016-11-25 21:37:29 | 显示全部楼层
的确,获取日期数和小时数就可。

例:

if(DayOfWeek()==0 || DayOfWeek()==6)
   
   {
     return(0);
   }
   
    if(DayOfWeek()==5 && Hour()>21)
   
   
    return(0);
   
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|sitemap|智能交易网,程序化交易,自动交易,量化交易 ( 苏ICP备08108698号,苏州智德金网络科技股份有限公司版权所有 )

GMT+8, 2019-11-22 17:37 , Processed in 0.082997 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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