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

 找回密码
 注册

QQ登录

只需一步,快速开始

手机短信登录

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

请教老师,如何实现单子止损后开反方向仓?

[复制链接]
发表于 2012-1-22 16:21:32 | 显示全部楼层 |阅读模式
请教老师,如何实现单子止损后开反方向仓?比如现在是做张涨,结果止损了,止损后开做跌的单,怎样实现?
回复

使用道具 举报

发表于 2012-1-28 10:16:56 | 显示全部楼层
下面这个EA的功能就是开仓后如果亏损那立即开方向仓
#property copyright "Copyright ?2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double lots=0.1;//下单手数
extern int sun=300;//止损点数
extern int ying=200;//止盈点数
extern int zuidahuadian=1;//允许最大滑点数
int magic=111111;
datetime starttime=0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   starttime=TimeCurrent();
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
    if(danshu()==0)
      {
        if(buyorsell()==0)
          {
            if(buy(lots,sun,ying,Symbol()+"buy",magic)<0)
              {
                return(0);
              }
          }
        if(buyorsell()==1)
          {
            if(sell(lots,sun,ying,Symbol()+"sell",magic)<0)
              {
                return(0);
              }
          }
      }
   return(0);
  }
int danshu()
  {
    int a=0;
     for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if((OrderComment()==(Symbol()+"sell")) ||(OrderComment()==(Symbol()+"buy")))   
                         {
                           a=a+1;                  
                         }
                      }
               }
     return(a);
  }
int buyorsell()
  {
     int a=2;
     for(int iii=OrdersHistoryTotal()-1;iii>=0;iii--)
              {
                if(OrderSelect(iii,SELECT_BY_POS,MODE_HISTORY))
                  {
                     if(OrderSymbol()==Symbol() && OrderOpenTime()>=starttime)
                       {
                         if(OrderMagicNumber()==magic)
                           {
                             if(OrderProfit()<0)
                               {
                                  if(OrderType()==0)
                                    {
                                      a=1;
                                    }
                                  if(OrderType()==1)
                                    {
                                      a=0;
                                    }
                               }
                             break;
                           }
                       }
                  }
              }
     return(a);
  }
int buy(double Lots,double sun,double ying,string comment,int magic)
  {
          int kaiguan=0;
            for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if((OrderComment()==comment)&&(OrderMagicNumber()==magic))   
                         {
                           kaiguan=1;                     
                         }
                      }
               }
            if(kaiguan==0)
              {
                   int ticket=OrderSend(Symbol( ) ,OP_BUY,Lots,Ask,zuidahuadian,0,0,comment,magic,0,White);
                   if(ticket>0)
                   {
                    if(OrderSelect(ticket, SELECT_BY_TICKET)==true)
                      {
                       if((sun!=0)&&(ying!=0))
                        {
                          OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-sun*MarketInfo(Symbol(),MODE_POINT),OrderOpenPrice()+ying*MarketInfo(Symbol(),MODE_POINT),0,Red);
                        }
                       if((sun==0)&&(ying!=0))
                        {
                          OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()+ying*MarketInfo(Symbol(),MODE_POINT),0,Red);
                        }
                       if((sun!=0)&&(ying==0))
                        {
                          OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-sun*MarketInfo(Symbol(),MODE_POINT),0,0,Red);
                        }
                      }
                   }
              return(ticket);
              }
             else
              {
               return(0);
              }
  }
int sell(double Lots,double sun,double ying,string comment,int magic)
    {
               int kaiguan=0;
                 for(int i=0;i<OrdersTotal();i++)
                    {
                        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                          {
                            if((OrderComment()==comment)&&(OrderMagicNumber()==magic))   
                              {
                                kaiguan=1;                     
                              }
                           }
                    }
                 if(kaiguan==0)
                   {
                        int ticket=OrderSend(Symbol( ) ,OP_SELL,Lots,Bid,zuidahuadian,0,0,comment,magic,0,Red);
                        if(ticket>0)
                        {
                          if(OrderSelect(ticket, SELECT_BY_TICKET)==true)
                           {
                             if((sun!=0)&&(ying!=0))
                              {
                               OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+sun*MarketInfo(Symbol(),MODE_POINT),OrderOpenPrice()-ying*MarketInfo(Symbol(),MODE_POINT),0,Red);
                              }
                             if((sun==0)&&(ying!=0))
                              {
                               OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()-ying*MarketInfo(Symbol(),MODE_POINT),0,Red);
                              }
                             if((sun!=0)&&(ying==0))
                              {
                               OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+sun*MarketInfo(Symbol(),MODE_POINT),0,0,Red);
                              }
                           }
                        }
                        return(ticket);
                   }
                  else
                   {
                    return(0);
                   }
  }
回复 支持 反对

使用道具 举报

发表于 2013-4-18 17:17:42 | 显示全部楼层
好像不对,我做错了什么么
回复 支持 反对

使用道具 举报

发表于 2013-6-19 16:31:56 | 显示全部楼层
好像不能直接用呢。。
回复 支持 反对

使用道具 举报

发表于 2013-7-17 12:49:17 | 显示全部楼层
好东西
回复 支持 反对

使用道具 举报

发表于 2015-10-12 22:01:21 | 显示全部楼层
学习了,谢谢
回复 支持 反对

使用道具 举报

发表于 2015-11-19 18:32:36 | 显示全部楼层
谢谢老师分享
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-11-18 04:15 , Processed in 0.119775 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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