25评论

0收藏

为什么这个EA总不下单?

avatar 杨超333 | 7022 人阅读 | 25 人评论 | 2012-12-18

//+------------------------------------------------------------------+
//|                                  MACD升级版交易系统的改进版0.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                       
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."

#define  MAGICMA  20121213 //MAGIC数字,为区别不同的EA
extern int whichmethod=2;  //1是仅开仓,2是有损无盈,3是有盈无损,4是有损有盈
extern double TakeProfit=600; //止盈
extern double StopLoss=200;  //止损
extern int RiskValue=3;  //风险系数
extern int  MaxOpen=4;  //最多开仓次数限制!
extern double  MaxLots=0.5;  //最大的单仓持仓量限制!
extern double bb=0;//当价格向心想的方向移动时,BB》0,开始移动止损
extern double TrailingStop=100;  //移动止损值
int i,res;
double Lots;
datetime lasttime;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  Lots=0.1;//初始值
  lasttime=NULL;//初始值
  
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
if(OrdersTotal()<=MaxOpen){
  CheckForOpen();//平仓,开仓条件检查和操作!
  if(buyorsell()==1)
  { bb=Bid-OrderOpenPrice();//
    if(bb>0) CTP();
  
  }
  if(buyorsell()==-1){ bb=OrderOpenPrice()-Ask;
  if(bb>0) CTP();}  //
   
    }
   
//----
   return(0);
  }
  
  
//+------------------------------------------------------------------+
double LotsOptimized(){//确定开仓量,资金管理!
  Lots=NormalizeDouble(((AccountBalance()*RiskValue/100)/MarketInfo(Symbol(),MODE_MARGINREQUIRED)),2);
  double minlot=MarketInfo(Symbol(),MODE_MINLOT);
  double maxlot=MarketInfo(Symbol(),MODE_MAXLOT);
  double lotstep=MarketInfo(Symbol(),MODE_LOTSTEP);
  if(Lots<minlot){Lots=0rint("保证金余额不足!");}
  if(Lots>MaxLots){Lots=MaxLots;}
  
  
  
  OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);
  if(OrderProfit()<0) {Lots=OrderLots()/2;}
  return(Lots);}
  
  
  
    void CloseBuy()
{
if (OrdersTotal( ) > 0 )   
{
  for(i=OrdersTotal()-1;i>=0;i--)
  {
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)  continue;
  if((OrderType()==OP_BUY)&&(OrderSymbol()==Symbol())&&(OrderMagicNumber()==MAGICMA))
  {
    OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
    Sleep(2000);
    }
    }
    }
    }
   
   
    void CloseSell()
{
if (OrdersTotal( ) > 0 )   
{
  for(i=OrdersTotal()-1;i>=0;i--)
  {
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)     break;
  if(OrderType()==OP_SELL&&(OrderSymbol()==Symbol())&&(OrderMagicNumber()==MAGICMA))
    {
    OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
    Sleep(2000);
    }
  }
}
}

    int buyorsell()//判断买或者卖
    {
   
  
  double s0= iCustom(NULL,0,"MACD",0,iBarShift(NULL,0,iTime(NULL,0,0)));
  double s1=iCustom(NULL,0,"MACD",0,iBarShift(NULL,0,iTime(NULL,0,1)));
  double macd0= iCustom(NULL,0,"MACD",1,iBarShift(NULL,0,iTime(NULL,0,0)));
  double macd1=iCustom(NULL,0,"MACD",1,iBarShift(NULL,0,iTime(NULL,0,1)));
  double s2= iCustom(NULL,0,"MACD",0,iBarShift(NULL,0,iTime(NULL,0,2)));
  double s3=iCustom(NULL,0,"MACD",0,iBarShift(NULL,0,iTime(NULL,0,3)));
  double macd2= iCustom(NULL,0,"MACD",1,iBarShift(NULL,0,iTime(NULL,0,2)));
  double macd3=iCustom(NULL,0,"MACD",1,iBarShift(NULL,0,iTime(NULL,0,3)));
  double jaws2=iCustom(NULL,0,"鳄鱼三线",0,iBarShift(NULL,0,iTime(NULL,0,2)));//索引线为0
  double jaws1=iCustom(NULL,0,"鳄鱼三线",0,iBarShift(NULL,0,iTime(NULL,0,1)));
  double teeth2=iCustom(NULL,0,"鳄鱼三线",1,iBarShift(NULL,0,iTime(NULL,0,2)));//索引线为1
  double teeth1=iCustom(NULL,0,"鳄鱼三线",1,iBarShift(NULL,0,iTime(NULL,0,1)));
  double lips2=iCustom(NULL,0,"鳄鱼三线",2,iBarShift(NULL,0,iTime(NULL,0,2)));//索引线为2
  double lips1=iCustom(NULL,0,"鳄鱼三线",2,iBarShift(NULL,0,iTime(NULL,0,1)));
    if((macd0<s0<0&&macd1<s1<0&&macd2<s2<0&&s3<macd3<0)&&(0<macd0<s0&&0<macd1<s1&&0<macd2<s2&&0<s3<macd3))  return(1);//改为并,是大阳线形成的穿越!
        if((macd0>s0>0&&macd1>s1>0&&macd2>s2>0&&s3>macd3>0)&&(0>macd0>s0&&0>macd1>s1&&0>macd2>s2&&0>s3>macd3))  return(-1);//改为并,是大阴线形成的穿越!
          if((macd0>s0)&&(jaws1>teeth1>lips1))  return(-1);
          if((s0>macd0)&&(lips1>teeth1>jaws1))   return(1);
          return(0);//0代表不交易
    }
   
   int nowbuyorsell=0;
   void CheckForOpen()
      {
       if(Time[0]==lasttime)return;//每时间周期检查一次,时间控制!
          lasttime=Time[0];
          nowbuyorsell=buyorsell();//获取买卖信号
          if(nowbuyorsell==1) CloseSell();//先平卖出的单,
          if(nowbuyorsell==-1) CloseBuy();//先平买进的单,
          if(nowbuyorsell==0) return;//0代表不交易,直接RETURN
          if(OrdersTotal()>=MaxOpen) return;//当大于等于最大开仓量时,也直接RETURN
          if (TimeDayOfWeek(TimeCurrent()) == 1)
  {
  if (TimeHour(TimeCurrent()) < 3 ) return; //周一早8点前不做 具体决定于你的时区和服务器的时区  时间控制
  }
if (TimeDayOfWeek(TimeCurrent()) == 5)
  {
  if (TimeHour(TimeCurrent()) > 19 ) return; //周五晚11点后不做
  
  }
TradeOK();

      }
      
      

void TradeOK()   //去下单交易
{
int error ;
if (nowbuyorsell == 1) //买
  {
    switch (whichmethod)
    {
    case 1:   res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,30,0,0,"",MAGICMA,0,Blue);break;
    case 2:   res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,30,Ask-StopLoss*Point,0,"",MAGICMA,0,Blue); break;
    case 3:   res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,30,0,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);break;
    case 4:   res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,30,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);break;
    default : res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,30,0,0,"",MAGICMA,0,Blue);break;
    }
   
     if (res <=0)
    {
    error=GetLastError();
    if(error==134)Print("Received 134 Error after OrderSend() !! ");         // not enough money
    if(error==135) RefreshRates();   // prices have changed
    }
    Sleep(5000);
    return ;   
  }
if (nowbuyorsell == -1) //卖
  {
    switch (whichmethod)
    {
    case 1:   res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,30,0,0,"",MAGICMA,0,Red); break;
    case 2:   res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,30,Bid+StopLoss*Point,0,"",MAGICMA,0,Red); break;
    case 3:   res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,30,0,Bid-TakeProfit*Point,"",MAGICMA,0,Red); break;
  case 4:   res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,30,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red); break;
    default : res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,30,0,0,"",MAGICMA,0,Red); break;
    }
    if (res <=0)
    {
    error=GetLastError();
    if(error==134) Print("Received 134 Error after OrderSend() !! ");         // not enough money
    if(error==135) RefreshRates();   // prices have changed
    }
    Sleep(5000);
    return ;   
  }
}

void CTP()   //跟踪止赢
{
bool bs = false;
for (int i = 0; i < OrdersTotal(); i++)
{
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)     break;
  if (OrderType() == OP_BUY)
  {
    if ((Bid - OrderOpenPrice()) > (TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT)))    //开仓价格 当前止损和当前价格比较判断是否要修改跟踪止赢设置
    {
    if (OrderStopLoss() < Bid - TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT))
    {
      bs = OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(),0, Green);
    }
    }
}
  else if (OrderType() == OP_SELL)
  {
    if ((OrderOpenPrice() - Ask) > (TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT)))  //开仓价格 当前止损和当前价格比较判断是否要修改跟踪止赢设置
    {
    if ((OrderStopLoss()) > (Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT)))
      {     
      bs = OrderModify(OrderTicket(), OrderOpenPrice(),Ask + TrailingStop * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(),0, Tan);
        
      }
    }
  }
}
}
""
还没有人打赏,支持一下

评论|共 25 个

财库牛

发表于 2012-12-18 09:27:14 | 显示全部楼层

自己好好检查下

nihaoya78

发表于 2012-12-18 09:59:35 | 显示全部楼层

HOHO~~~~~~  

huashoasjf

发表于 2012-12-18 09:59:35 | 显示全部楼层

我好想升级  

amy328

发表于 2012-12-18 09:59:35 | 显示全部楼层

呵呵,等着就等着....  

知不知道

发表于 2012-12-18 09:59:35 | 显示全部楼层

我有个群,大家一起来讨论EA.  

空白式想念

发表于 2012-12-18 09:59:35 | 显示全部楼层

加油啊!!!!顶哦!!!!!  

瓦勒斯

发表于 2013-9-25 23:09:06 | 显示全部楼层

我的也是啊,,测试好好地,,挂好久都不下单,是不是程序有内幕,

fxwwzufv

发表于 2015-2-28 04:17:31 | 显示全部楼层

想学EA,拜师,谁收了我吧

xjxj777mmm

发表于 2015-2-28 06:38:19 | 显示全部楼层


继续,学习了

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

EA之家评论守则