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

 找回密码
 注册

QQ登录

只需一步,快速开始

手机短信登录

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

对第十六的修改不成功,希望老师更正

[复制链接]
发表于 2011-11-25 09:08:22 | 显示全部楼层 |阅读模式
//+------------------------------------------------------------------+
//|                                                    test16_EA.mq4 |
//|                       Copyright ?2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double Lots=0.1;
extern int ying=550;
extern int sun =130;
int start()
  {
   double sma15M13q=iMA(Symbol(),PERIOD_M15,13,0,MODE_SMA,PRICE_CLOSE,0);
   double sma15M89q=iMA(Symbol(),PERIOD_M15,89,0,MODE_SMA,PRICE_CLOSE,0);
   double sma15M13h=iMA(Symbol(),PERIOD_M15,13,0,MODE_SMA,PRICE_CLOSE,1);
   double sma15M89h=iMA(Symbol(),PERIOD_M15,89,0,MODE_SMA,PRICE_CLOSE,1);
   
   double sma5M8q =iMA(Symbol(),PERIOD_M5,8,0,MODE_SMA,PRICE_CLOSE,0);
   double sma5M34q=iMA(Symbol(),PERIOD_M5,55,0,MODE_SMA,PRICE_CLOSE,0);
   double sma5M8h =iMA(Symbol(),PERIOD_M5,8,0,MODE_SMA,PRICE_CLOSE,1);
   double sma5M34h=iMA(Symbol(),PERIOD_M5,55,0,MODE_SMA,PRICE_CLOSE,1);
   
   double sma1M5q =iMA(Symbol(),PERIOD_M1,5,0,MODE_SMA,PRICE_CLOSE,1);
   double sma1M13q=iMA(Symbol(),PERIOD_M1,34,0,MODE_SMA,PRICE_CLOSE,1);
   double sma1M5h =iMA(Symbol(),PERIOD_M1,5,0,MODE_SMA,PRICE_CLOSE,2);
   double sma1M13h=iMA(Symbol(),PERIOD_M1,34,0,MODE_SMA,PRICE_CLOSE,2);
   
   if((sma15M13q<sma15M89q)&&(sma15M13h<sma15M89h))
     {
         if((sma5M8q<sma5M34q)&&(sma5M8h<sma5M34h))
           {
              if((sma1M5q<sma1M13q)&&(sma1M5h>sma1M13h))
                {
                  sell(Lots,0,ying,Symbol()+"sell"+Lots,0); //下第一空单
                }
           }
     }
   if((sma15M13q>sma15M89q)&&(sma15M13h>sma15M89h))
     {
         if((sma5M8q>sma5M34q)&&(sma5M8h>sma5M34h))
           {
              if((sma1M5q>sma1M13q)&&(sma1M5h<sma1M13h))
                {
                   buy(Lots,0,ying,Symbol()+"buy"+Lots,0);//下第一多单
                }
           }
     }
     
   if(danshu()>0)
     {
         if(buylastprice()>0)
           {
              if((buylastprice()-Ask)>=(ying*Point))
                {
                    buy(getbuylastLots()*2,0,ying,Symbol()+"buy"+getbuylastLots()*2,0);//前多单亏损加倍下多单
                }
              if((Bid-buylastprice())>=((ying-100)*Point))
                {
                    buy((getbuylastLots()-0.01),sun,ying,Symbol()+"buy"+(getbuylastLots()-0.01),0);//前多单赢利减量下多单
                 /*for(int isd=0;isd<OrdersTotal();isd++)
                    {
                   if(OrderSelect(isd,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                            if(OrderType()==OP_BUY&&OrderLots()==(getselllastLots()-0.01))
                              {
                                if((getbuylastLots()-0.01)<=0.01)
                                    {
                                      break;
                                    }
                               }
                         }
                      }
                     }*/
                }
           }
         if(selllastprice()>0)
           {
              if((Bid-selllastprice())>=(ying*Point))
                {
                    sell(getselllastLots()*2,0,ying,Symbol()+"sell"+getselllastLots()*2,0);//前空单亏损加倍下空单
                }
              if((selllastprice()-Ask)>=((ying-100)*Point))
                {
                    sell((getselllastLots()-0.01),sun,ying,Symbol()+"sell"+(getselllastLots()-0.01),0);//前空单赢利减量下空单
                    
                  /*  for(int isk=0;isk<OrdersTotal();isk++)
                    {
                   if(OrderSelect(isk,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                            if(OrderType()==OP_SELL&&OrderLots()==(getselllastLots()-0.01))
                              {
                                if((getbuylastLots()-0.01)<=0.01)
                                    {
                                      break;
                                    }
                               }
                         }
                      }
                     }*/
                }
           }
           
   
        double buylastTP=getbuylastTP();
        double selllastTP=getselllastTP();
        double buylastSL=getbuylastSL();
        double selllastSL=getselllastSL();
        for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                            if(OrderType()==OP_BUY&&OrderLots()==getselllastLots()*2)
                              {
                                if(buylastTP>0)
                                  {
                                    if(OrderTakeProfit()!=buylastTP)
                                      {
                                         OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),buylastTP,0);//把所有的多单止赢点修改成与最后一多单的止赢相同
                                      }
                                  }
                              }
                              if(OrderType()==OP_BUY&&OrderLots()==(getselllastLots()-0.01))
                              {
                                if(buylastTP>0||buylastSL>0)
                                  {
                                    if(OrderTakeProfit()!=buylastTP&&OrderStopLoss()!=buylastSL)
                                      {
                                         OrderModify(OrderTicket(),OrderOpenPrice(),buylastSL,buylastTP,0);//把所有的多单止赢与止损点修改成与最后一多单的止赢与止损相同
                                      }
                                  }
                              }
                            if(OrderType()==OP_SELL&&OrderLots()==getselllastLots()*2)
                              {
                                if(selllastTP>0)
                                  {
                                    if(OrderTakeProfit()!=selllastTP)
                                      {
                                         OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),selllastTP,0);//把所有的空单止赢点修改成与最后一空单的止赢相同
                                      }
                                  }
                              }
                              if(OrderType()==OP_SELL&&OrderLots()==(getselllastLots()-0.01))
                              {
                                if(selllastTP>0||buylastSL>0)
                                  {
                                    if(OrderTakeProfit()!=selllastTP&&OrderStopLoss()!=selllastSL)
                                      {
                                         OrderModify(OrderTicket(),OrderOpenPrice(),selllastSL,selllastTP,0);//把所有的空单止赢点修改成与最后一空单的止赢与止损相同
                                      }
                                  }
                              }                              
                         }
                      }
               }
     }
   return(0);
  }
//-----------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------
double getbuylastTP()//返回最后一多单的赢利
  {
     if(buylastticket()!=0)
       {
          if(OrderSelect(buylastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderTakeProfit());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
double getbuylastSL()//返回最后一多单的止损
  {
     if(buylastticket()!=0)
       {
          if(OrderSelect(buylastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderStopLoss());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
double getbuylastLots()//返回最后一多单的手数
  {
     if(buylastticket()!=0)
       {
          if(OrderSelect(buylastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderLots());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
double getselllastTP()//返回最后一空单的赢利
  {
     if(selllastticket()!=0)
       {
          if(OrderSelect(selllastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderTakeProfit());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
double getselllastSL()//返回最后一空单的止损
  {
     if(selllastticket()!=0)
       {
          if(OrderSelect(selllastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderStopLoss());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
double getselllastLots()//返回最后一空单的手数
  {
     if(selllastticket()!=0)
       {
          if(OrderSelect(selllastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderLots());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
int buylastticket()//返回最后一多单的订单编号
  {
     int maxticket=0;
     for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                            if(OrderType()==OP_BUY)
                              {
                                 if(maxticket<OrderTicket())
                                   {
                                      maxticket=OrderTicket();
                                   }  
                              }               
                         }
                      }
               }
      return(maxticket);
  }
double buylastprice()//返回最后一多单的开仓价
  {
     if(buylastticket()!=0)
       {
          if(OrderSelect(buylastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderOpenPrice());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
int selllastticket()//返回最后一空单的订单编号
  {
     int maxticket=0;
     for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                            if(OrderType()==OP_SELL)
                              {
                                 if(maxticket<OrderTicket())
                                   {
                                      maxticket=OrderTicket();
                                   }  
                              }               
                         }
                      }
               }
      return(maxticket);
  }
double selllastprice()//返回最后一空单的开仓价
  {
     if(selllastticket()!=0)
       {
          if(OrderSelect(selllastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderOpenPrice());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
int danshu()//返回订单数
  {
    int a=0;
     for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                           a=a+1;                  
                         }
                      }
               }
     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,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);
                   }
  }
//----------------------------------------------------------------------------------
回复

使用道具 举报

发表于 2011-11-27 09:26:18 | 显示全部楼层
用魔术号选,要好点
回复 支持 反对

使用道具 举报

发表于 2011-11-27 09:27:54 | 显示全部楼层
好象这么选,不一定选得到你要的单
回复 支持 反对

使用道具 举报

发表于 2011-11-27 10:28:33 | 显示全部楼层
本帖最后由 瞬间的光辉 于 2011-11-27 10:32 编辑

你的思路:
第一单下单条件:(1)空单:15分钟0号与1号K线的13与89均线空头排列,5分钟0号与1号K线的8与34均线空头排列,1分钟1号与2号K线的5与13均线死叉。(2)多单:15分钟0号与1号K线的13与89均线多头排列,5分钟0号与1号K线的8与34均线多头排列,1分钟1号与2号K线的5与13均线金叉。满足第一空单条件并且无第一空单下第一空单,满足第一多单条件并且无第一多单下第一多单,他们互相独立并互不干扰。
    后续单下单条件:(1)逆势单(第一单被套55点后加第一单量的两倍下第二单以后只能是被套加单,赢利不得加单,只能是所有单都达到改成最后一单的止赢点时同时平仓):第一单被套55点加第一单量的2倍下第二单,第二单被套55点加第二单量的2倍下第三单,第三单被套55点加第三单量的2倍下第四单,以后以此类推后一单不断的被套就不断的加倍下单。(2)顺势单(第一单赢利45点后用第一单量减0.01手下第二单以后只能是赢利加单,亏损不得加单,只能是所有单都达到改成最后一单的止赢或止损点时同时平仓):第一单赢利45点后用第一单量减0.01手下第二单,第二单赢利45点后用第二单量减0.01手下第三单,第三单赢利45点后用第三单量减0.01手下第四单,以后以此类推后一单不断的赢利就不断的减量下单,直到不能下单为止(下单量少于平台的最小下单量)才不再加单。只要第二单是逆势加单以后只能是一组逆势单,第二单是顺势加单的以后也只能是一组顺势单。它们是不能穿插出现。
    修改止赢止损或者说平仓条件:(1)逆势单:不设止损,每单的止赢都设成55点,只要增加一单则所有的单都修改成最后单子的止赢。(2)顺势单:第一单不设止损,从第二单开始每单的止损都设成13点,所有单的止赢也者设成55点,只要第二顺势单下单成功以后就要把所有的单的止损与止赢都修改成最后一顺势单的止损与止赢。因为顺势加单是赢利45点就加单,止赢要55点所以总是会被加单而不会被止赢平仓,除非下满所有的顺势单(下到不能下单为止)才有最后一单的止赢平仓出局。所以说顺势加单一般情况下都是止损平仓出局的。如果顺势加单的一组单子能加上统一的移动止损与保本平仓则更好。保本平仓:从第一单开始如果本单赢利达到或超过15个点后,又没达到下后一顺势单的条件与可执行移动止损的条件,价格往回走赢利剩余或说小于6个点时平掉所有的顺势单。这一点我没有在这次改第十六课中增加(移动止损与保本平仓)。
正确源代码:
//+------------------------------------------------------------------+
//|                                                    test16_EA.mq4 |
//|                       Copyright ?2011, MetaQuotes Software Corp. |
//|                                        http://www.zhinengjiaoyi.com|
//+------------------------------------------------------------------+
#property copyright "Copyright ?2011, MetaQuotes Software Corp."
#property link     " http://www.zhinengjiaoyi.com"
extern double Lots=0.1;
extern int ying=550;
extern int sun =130;
double buyfirstprice=0;
double sellfirstprice=0;
int start()
  {
   double sma15M13q=iMA(Symbol(),PERIOD_M15,13,0,MODE_SMA,PRICE_CLOSE,0);
   double sma15M89q=iMA(Symbol(),PERIOD_M15,89,0,MODE_SMA,PRICE_CLOSE,0);
   double sma15M13h=iMA(Symbol(),PERIOD_M15,13,0,MODE_SMA,PRICE_CLOSE,1);
   double sma15M89h=iMA(Symbol(),PERIOD_M15,89,0,MODE_SMA,PRICE_CLOSE,1);
   
   double sma5M8q =iMA(Symbol(),PERIOD_M5,8,0,MODE_SMA,PRICE_CLOSE,0);
   double sma5M34q=iMA(Symbol(),PERIOD_M5,55,0,MODE_SMA,PRICE_CLOSE,0);
   double sma5M8h =iMA(Symbol(),PERIOD_M5,8,0,MODE_SMA,PRICE_CLOSE,1);
   double sma5M34h=iMA(Symbol(),PERIOD_M5,55,0,MODE_SMA,PRICE_CLOSE,1);
   
   double sma1M5q =iMA(Symbol(),PERIOD_M1,5,0,MODE_SMA,PRICE_CLOSE,1);
   double sma1M13q=iMA(Symbol(),PERIOD_M1,34,0,MODE_SMA,PRICE_CLOSE,1);
   double sma1M5h =iMA(Symbol(),PERIOD_M1,5,0,MODE_SMA,PRICE_CLOSE,2);
   double sma1M13h=iMA(Symbol(),PERIOD_M1,34,0,MODE_SMA,PRICE_CLOSE,2);
   
   if((sma15M13q<sma15M89q)&&(sma15M13h<sma15M89h))
     {
         if((sma5M8q<sma5M34q)&&(sma5M8h<sma5M34h))
           {
              if((sma1M5q<sma1M13q)&&(sma1M5h>sma1M13h))
                {
                  if(selldanshu()==0)
                    {
                      if(sell(Lots,0,ying,Symbol()+"sell"+Lots,0)>0) //下第一空单
                         {
                           sellfirstprice=selllastprice();
                         }
                    }
                }
           }
     }
   if((sma15M13q>sma15M89q)&&(sma15M13h>sma15M89h))
     {
         if((sma5M8q>sma5M34q)&&(sma5M8h>sma5M34h))
           {
              if((sma1M5q>sma1M13q)&&(sma1M5h<sma1M13h))
                {
                  if(buydanshu()==0)
                    {
                       if(buy(Lots,0,ying,Symbol()+"buy"+Lots,0)>0)//下第一多单
                         {
                           buyfirstprice=buylastprice();
                         }
                    }
                }
           }
     }
     
   if(buydanshu()>0)
     {
         if(buylastprice()>0)
           {
              if(buylastprice()<=buyfirstprice)
                {
                  if((buylastprice()-Ask)>=(ying*Point))
                    {
                        buy(getbuylastLots()*2,0,ying,Symbol()+"buy"+getbuylastLots()*2,0);//前多单亏损加倍下多单
                    }
                  double buylastTP=getbuylastTP();
                  nishibuymodify();
                }
              if(buylastprice()>=buyfirstprice)
                {
                  if((Bid-buylastprice())>=((ying-100)*Point))
                    {
                        buy((getbuylastLots()-0.01),sun,ying,Symbol()+"buy"+(getbuylastLots()-0.01),0);//前多单赢利减量下多单
                    }
                  shunshibuymodify();
                }
           }
    }
   if(selldanshu()>0)
     {
         if(selllastprice()>0)
           {
              if(selllastprice()>=sellfirstprice)
                {
                  if((Bid-selllastprice())>=(ying*Point))
                    {
                        sell(getselllastLots()*2,0,ying,Symbol()+"sell"+getselllastLots()*2,0);//前空单亏损加倍下空单
                    }
                  nishisellmodify();
                }
              if(selllastprice()<=sellfirstprice)
                {
                  if((selllastprice()-Ask)>=((ying-100)*Point))
                    {
                        sell((getselllastLots()-0.01),sun,ying,Symbol()+"sell"+(getselllastLots()-0.01),0);//前空单赢利减量下空单
                    }
                  shunshisellmodify();
                }
           }
      }   
   return(0);
  }
void shunshisellmodify()//逆势buy修改止损止盈
  {
        double selllastTP=getselllastTP();
        double selllastSL=getselllastSL();
        for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                            if(OrderType()==OP_SELL)
                              {
                                    if(OrderTakeProfit()!=selllastTP || OrderStopLoss()!=selllastSL)
                                      {
                                         OrderModify(OrderTicket(),OrderOpenPrice(),selllastSL,selllastTP,0);//把所有的多单止赢点修改成与最后一多单的止赢相同
                                      }
                              }     
                         }
                      }
               }
  }
void nishisellmodify()//顺势buy修改止损止盈
  {
        double selllastTP=getselllastTP();
        for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                            if(OrderType()==OP_SELL)
                              {
                                    if(OrderTakeProfit()!=selllastTP)
                                      {
                                         OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),selllastTP,0);//把所有的多单止赢点修改成与最后一多单的止赢相同
                                      }
                              }     
                         }
                      }
               }
  }
void shunshibuymodify()//逆势buy修改止损止盈
  {
        double buylastTP=getbuylastTP();
        double buylastSL=getbuylastSL();
        for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                            if(OrderType()==OP_BUY)
                              {
                                    if(OrderTakeProfit()!=buylastTP || OrderStopLoss()!=buylastSL)
                                      {
                                         OrderModify(OrderTicket(),OrderOpenPrice(),buylastSL,buylastTP,0);//把所有的多单止赢点修改成与最后一多单的止赢相同
                                      }
                              }     
                         }
                      }
               }
  }
void nishibuymodify()//顺势buy修改止损止盈
  {
        double buylastTP=getbuylastTP();
        for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                            if(OrderType()==OP_BUY)
                              {
                                    if(OrderTakeProfit()!=buylastTP)
                                      {
                                         OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),buylastTP,0);//把所有的多单止赢点修改成与最后一多单的止赢相同
                                      }
                              }     
                         }
                      }
               }
  }
//-----------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------
double getbuylastTP()//返回最后一多单的赢利
  {
     if(buylastticket()!=0)
       {
          if(OrderSelect(buylastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderTakeProfit());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
double getbuylastSL()//返回最后一多单的止损
  {
     if(buylastticket()!=0)
       {
          if(OrderSelect(buylastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderStopLoss());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
double getbuylastLots()//返回最后一多单的手数
  {
     if(buylastticket()!=0)
       {
          if(OrderSelect(buylastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderLots());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
double getselllastTP()//返回最后一空单的赢利
  {
     if(selllastticket()!=0)
       {
          if(OrderSelect(selllastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderTakeProfit());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
double getselllastSL()//返回最后一空单的止损
  {
     if(selllastticket()!=0)
       {
          if(OrderSelect(selllastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderStopLoss());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
double getselllastLots()//返回最后一空单的手数
  {
     if(selllastticket()!=0)
       {
          if(OrderSelect(selllastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderLots());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
int buylastticket()//返回最后一多单的订单编号
  {
     int maxticket=0;
     for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                            if(OrderType()==OP_BUY)
                              {
                                 if(maxticket<OrderTicket())
                                   {
                                      maxticket=OrderTicket();
                                   }  
                              }               
                         }
                      }
               }
      return(maxticket);
  }
double buylastprice()//返回最后一多单的开仓价
  {
     if(buylastticket()!=0)
       {
          if(OrderSelect(buylastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderOpenPrice());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
int selllastticket()//返回最后一空单的订单编号
  {
     int maxticket=0;
     for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                            if(OrderType()==OP_SELL)
                              {
                                 if(maxticket<OrderTicket())
                                   {
                                      maxticket=OrderTicket();
                                   }  
                              }               
                         }
                      }
               }
      return(maxticket);
  }
double selllastprice()//返回最后一空单的开仓价
  {
     if(selllastticket()!=0)
       {
          if(OrderSelect(selllastticket(),SELECT_BY_TICKET,MODE_TRADES)==true)
            {
               return(OrderOpenPrice());
            }
          else
            {
               return(0);
            }
       }
     else
       {
         return(0);
       }
  }
int buydanshu()//返回订单数
  {
    int a=0;
     for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol() && OrderType()==0)   
                         {
                           a=a+1;                  
                         }
                      }
               }
     return(a);
  }
int selldanshu()//返回订单数
  {
    int a=0;
     for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol() && OrderType()==1)   
                         {
                           a=a+1;                  
                         }
                      }
               }
     return(a);
  }
int danshu()//返回订单数
  {
    int a=0;
     for(int i=0;i<OrdersTotal();i++)
               {
                   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                     {
                       if(OrderSymbol()==Symbol())   
                         {
                           a=a+1;                  
                         }
                      }
               }
     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,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);
                   }
  }
//----------------------------------------------------------------------------------
MA-EA_1.mq4 (17.67 KB, 下载次数: 186)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-11-27 23:37:13 | 显示全部楼层
老师您好!下面一个语句(double buylastTP=getbuylastTP();)注释与没注释势行的效果是一样的。
if(buydanshu()>0)
     {
         if(buylastprice()>0)
           {
              if(buylastprice()<=buyfirstprice)
                {
                  if((buylastprice()-Ask)>=(ying*Point))
                    {
                        buy(getbuylastLots()*2,0,ying,Symbol()+"buy"+getbuylastLots()*2,0);//前多单亏损加倍下多单
                    }
                  double buylastTP=getbuylastTP();//这里有,下面没有
                  nishibuymodify();
                }
              if(buylastprice()>=buyfirstprice)
                {
                  if((Bid-buylastprice())>=((ying-100)*Point))
                    {
                        buy((getbuylastLots()-0.01),sun,ying,Symbol()+"buy"+(getbuylastLots()-0.01),0);//前多单赢利减量下多单
                    }
                        //这里没有
                  shunshibuymodify();
                }
           }
    }
下一个sell单都没有。这个语句老师放在这里给我什么提示?或是有何种重要的作用呢?
回复 支持 反对

使用道具 举报

发表于 2011-11-28 08:34:51 | 显示全部楼层
double buylastTP=getbuylastTP();//这里有,下面没有
这个是多余的 我当初是测试他的值是否正确。后来没删除。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-11-28 18:01:41 | 显示全部楼层
哦,谢谢!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-11-18 03:41 , Processed in 0.092817 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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