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

 找回密码
 注册

QQ登录

只需一步,快速开始

手机短信登录

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

如何将下面代码改为只做多不做空??

[复制链接]
发表于 2014-9-17 10:56:48 | 显示全部楼层 |阅读模式
#property copyright "Copyright ?2011, MetaQuotes Software Corp."
#property link   
int buytisun=200;
int selltisun=200;
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
int start()
  {
   double ema15M10=iMA(Symbol(),PERIOD_M15,10,0,MODE_EMA,PRICE_CLOSE,0);
   double ema30M10=iMA(Symbol(),PERIOD_M30,10,0,MODE_EMA,PRICE_CLOSE,0);
   double ema15M20=iMA(Symbol(),PERIOD_M15,20,0,MODE_EMA,PRICE_CLOSE,0);
   double ema30M20=iMA(Symbol(),PERIOD_M30,20,0,MODE_EMA,PRICE_CLOSE,0);
   double k=iStochastic(Symbol(),PERIOD_M15,8,5,5,MODE_SMA,0,MODE_MAIN,0);
   double d=iStochastic(Symbol(),PERIOD_M15,8,5,5,MODE_SMA,0,MODE_SIGNAL,0);
   double kp=iStochastic(Symbol(),PERIOD_M15,8,5,5,MODE_SMA,0,MODE_MAIN,1);
   double dp=iStochastic(Symbol(),PERIOD_M15,8,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   if((ema15M10<ema15M20)&&(ema30M10<ema30M20))//sell
     {
         if((k<d)&&(kp>dp))//
           {
               if(sell(0.1,500,500,Symbol()+"sell",0)>0)
                 {
                   selltisun=200;
                 }
           }
     }
   if((ema15M10>ema15M20)&&(ema30M10>ema30M20))//buy
     {
         if((k>d)&&(kp<dp))//
           {
               if(buy(0.1,500,500,Symbol()+"buy",0)>0)
                 {
                   buytisun=200;
                 }   
           }
     }
   
    for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if((OrderComment()==(Symbol()+"buy")))   
                         {
                              if(((Bid-OrderOpenPrice())/Point)>=buytisun)
                                {
                                   double buysl=OrderStopLoss();
                                   if(OrderModify(OrderTicket(),OrderOpenPrice(),buysl+200*Point,OrderTakeProfit(),0)==true)
                                     {
                                        buytisun=buytisun+200;
                                     }
                                }                 
                         }
                       if((OrderComment()==(Symbol()+"sell")))   
                         {
                              if(((OrderOpenPrice()-Ask)/Point)>=selltisun)
                                {
                                   double sellsl=OrderStopLoss();
                                   if(OrderModify(OrderTicket(),OrderOpenPrice(),sellsl-200*Point,OrderTakeProfit(),0)==true)
                                     {
                                        selltisun=selltisun+200;
                                     }
                                }                 
                         }
                      }
               }
   return(0);
  }
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,300,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,300,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);
                   }
  }


如何将下面代码改为只做多不做空??
回复

使用道具 举报

发表于 2014-11-29 16:44:35 | 显示全部楼层
#property copyright "Copyright ?2011, MetaQuotes Software Corp."
#property link   
int buytisun=200;
int selltisun=200;
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
int start()
  {
   double ema15M10=iMA(Symbol(),PERIOD_M15,10,0,MODE_EMA,PRICE_CLOSE,0);
   double ema30M10=iMA(Symbol(),PERIOD_M30,10,0,MODE_EMA,PRICE_CLOSE,0);
   double ema15M20=iMA(Symbol(),PERIOD_M15,20,0,MODE_EMA,PRICE_CLOSE,0);
   double ema30M20=iMA(Symbol(),PERIOD_M30,20,0,MODE_EMA,PRICE_CLOSE,0);
   double k=iStochastic(Symbol(),PERIOD_M15,8,5,5,MODE_SMA,0,MODE_MAIN,0);
   double d=iStochastic(Symbol(),PERIOD_M15,8,5,5,MODE_SMA,0,MODE_SIGNAL,0);
   double kp=iStochastic(Symbol(),PERIOD_M15,8,5,5,MODE_SMA,0,MODE_MAIN,1);
   double dp=iStochastic(Symbol(),PERIOD_M15,8,5,5,MODE_SMA,0,MODE_SIGNAL,1);
  
   if((ema15M10>ema15M20)&&(ema30M10>ema30M20))//buy
     {
         if((k>d)&&(kp<dp))//
           {
               if(buy(0.1,500,500,Symbol()+"buy",0)>0)
                 {
                   buytisun=200;
                 }   
           }
     }
   
    for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if((OrderComment()==(Symbol()+"buy")))   
                         {
                              if(((Bid-OrderOpenPrice())/Point)>=buytisun)
                                {
                                   double buysl=OrderStopLoss();
                                   if(OrderModify(OrderTicket(),OrderOpenPrice(),buysl+200*Point,OrderTakeProfit(),0)==true)
                                     {
                                        buytisun=buytisun+200;
                                     }
                                }                 
                         }                     
                      }
               }
   return(0);
  }

将做空的部分删除即可。
回复 支持 反对

使用道具 举报

发表于 2014-11-29 16:45:49 | 显示全部楼层
当然注释掉做空部分可能会更好些,因为以后还可以恢复Sell功能。
回复 支持 反对

使用道具 举报

发表于 2014-12-25 10:34:14 | 显示全部楼层
看过,有帮助。谢谢。
回复 支持 反对

使用道具 举报

发表于 2015-2-7 22:12:21 | 显示全部楼层
个个个都是高手们啊
回复 支持 反对

使用道具 举报

发表于 2015-2-21 17:14:52 | 显示全部楼层
楼主回复的部分还需加int buy(double Lots,double sun,double ying,string comment,int magic)
这个子程序。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-11-16 07:02 , Processed in 0.080070 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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