客服热线:18391752892

为什么这个EA总不下单?

   日期:2019-01-12     浏览:812    
马上注册,结交更多好友,下载更多资源

您需要 登录 才可以下载或查看,没有帐号?注册 //+------------------------------------------------------------------+
//|                        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 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 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);
     
     }
    }
 }
}
}

外汇交易有很大的风险性,本站所有资源均来自网络,请选择使用,如若出现亏损,本站不承担任何责任!


特别提示:本信息由相关企业自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关行情
推荐行情
点击排行