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

 找回密码
 注册

QQ登录

只需一步,快速开始

手机短信登录

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

用老师的编程逻辑写的自定义指标调用 开不了单

[复制链接]
发表于 2015-10-30 11:19:18 | 显示全部楼层 |阅读模式
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 7
#property indicator_plots   7
//--- plot 一线
#property indicator_label1  "一线"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot 二线
#property indicator_label2  "二线"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- plot 三线
#property indicator_label3  "三线"
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrRed
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- plot S
#property indicator_label4  "S"
#property indicator_type4   DRAW_ARROW
#property indicator_color4  clrRed
#property indicator_style4  STYLE_SOLID
#property indicator_width4  1
//--- plot X
#property indicator_label5  "X"
#property indicator_type5   DRAW_ARROW
#property indicator_color5  clrRed
#property indicator_style5  STYLE_SOLID
#property indicator_width5  1
//--- plot A
#property indicator_label6  "A"
#property indicator_type6   DRAW_ARROW
#property indicator_color6  clrOrange
#property indicator_style6  STYLE_SOLID
#property indicator_width6  1
//--- plot B
#property indicator_label7  "B"
#property indicator_type7   DRAW_ARROW
#property indicator_color7  clrDeepPink
#property indicator_style7  STYLE_SOLID
#property indicator_width7  1
//--- input parameters
input int      x=5;
input int      z=20;
input int      s=40;
//--- indicator buffers
double         一线Buffer[];
double         二线Buffer[];
double         三线Buffer[];
double         SBuffer[];
double         XBuffer[];
double         ABuffer[];
double         BBuffer[];
datetime   jincha=0;
datetime   sicha=0;
datetime   Ajincha=0;
datetime   Bsicha=0;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,一线Buffer);
   SetIndexBuffer(1,二线Buffer);
   SetIndexBuffer(2,三线Buffer);
   SetIndexBuffer(3,SBuffer);
   SetIndexBuffer(4,XBuffer);
   SetIndexBuffer(5,ABuffer);
   SetIndexBuffer(6,BBuffer);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
   SetIndexArrow(3,225);
   SetIndexArrow(4,226);
   SetIndexArrow(5,225);
   SetIndexArrow(6,226);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   if(rates_total<x|| rates_total<z|| rates_total<s)
    {
      return(0);
    }
   int i=0;
   int limit;
   //limit=rates_total-prev_calculated+1;
   limit=rates_total-prev_calculated;
   if(prev_calculated==0)limit--;
   for(i=0;i<limit;i++)
    {
      /*
      if(i%10==0)
       {
         daBuffer[i]=Low[i];
       }
      */
      一线Buffer[i]=iMA(NULL,0,x,0,MODE_SMA,PRICE_CLOSE,i);
      二线Buffer[i]=iMA(NULL,0,z,0,MODE_SMA,PRICE_CLOSE,i);
      三线Buffer[i]=iMA(NULL,0,s,0,MODE_SMA,PRICE_CLOSE,i);
      //四线Buffer[i]=iMA(NULL,0,四线,0,MODE_SMA,PRICE_CLOSE,i);
    }
   for(i=0;i<limit;i++)
    {
      if(二线Buffer[i]>三线Buffer[i] && 三线Buffer[i+1]>二线Buffer[i+1]&& 一线Buffer[i]>二线Buffer[i])
       {
         SBuffer[i]=三线Buffer[i]-3*Point;
        
       }
      if(二线Buffer[i]<三线Buffer[i] && 三线Buffer[i+1]<二线Buffer[i+1]&& 一线Buffer[i]<二线Buffer[i] )
       {
         XBuffer[i]=三线Buffer[i]+3*Point;
        
         
       }
        if(一线Buffer[i+1]<二线Buffer[i+1]&& 一线Buffer[i+1]>三线Buffer[i+1]   && 二线Buffer[i]<一线Buffer[i] && 二线Buffer[i]>三线Buffer[i])
       {
         ABuffer[i]=三线Buffer[i]+3*Point;
      
         
       }
       if(一线Buffer[i+1]>二线Buffer[i+1]&& 一线Buffer[i+1]<三线Buffer[i+1]   && 二线Buffer[i]>一线Buffer[i] && 二线Buffer[i]<三线Buffer[i])
       {
         BBuffer[i]=三线Buffer[i]+3*Point;
   
         
       }
       if(一线Buffer[i+1]<三线Buffer[i+1]&& 二线Buffer[i+1]>三线Buffer[i+1]   && 二线Buffer[i]<一线Buffer[i] && 二线Buffer[i]>三线Buffer[i])
       {
         BBuffer[i]=三线Buffer[i]+3*Point;

       }
       if(一线Buffer[i+1]>三线Buffer[i+1]&& 二线Buffer[i+1]<三线Buffer[i+1]   && 二线Buffer[i]>一线Buffer[i] && 二线Buffer[i]<三线Buffer[i])
       {
         ABuffer[i]=三线Buffer[i]+3*Point;

       }
       }
   return(rates_total);
   }


以上是指标  
/////
以下是调用EA
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Moving Average sample expert advisor"

#define MAGICMA  20131111


//--- Inputs
input double Lots          =0.1;
input double MaximumRisk   =0.02;
input double DecreaseFactor=3;
input int    MovingPeriod  =12;
input int    MovingShift   =6;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   //double ma;
   int    res;
   double ema15M10;
   double ema30M10;
   double ema15M20;
   double ema30M20;
//--- go trading only for first tiks of new bar
   //if(Volume[0]>1) return;
//--- get Moving Average
  // ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
    ema15M10=iMA(Symbol(),PERIOD_M15,10,0,MODE_EMA,PRICE_CLOSE,0);
    ema30M10=iMA(Symbol(),PERIOD_M30,10,0,MODE_EMA,PRICE_CLOSE,0);
    ema15M20=iMA(Symbol(),PERIOD_M15,20,0,MODE_EMA,PRICE_CLOSE,0);
    ema30M20=iMA(Symbol(),PERIOD_M30,20,0,MODE_EMA,PRICE_CLOSE,0);
   /* int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
    int i=0;
   int limit;
   //limit=rates_total-prev_calculated+1;
   limit=rates_total-prev_calculated;
   if(prev_calculated==0)limit--;
   for(i=0;i<limit;i++)*/
    //double a=iMACD(Symbol(),0,12,26,9,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);
  double MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
  double MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
  double SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
  double SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   double up=iCustom(Symbol(),0,"ATR",6,1);
     double down=iCustom(Symbol(),0,"ATR",7,1);
     double upp=iCustom(Symbol(),0,"ATR",6,2);
     double downp=iCustom(Symbol(),0,"ATR",7,2);
   double A=iMA(NULL,0,5,0,MODE_SMA,PRICE_CLOSE,0);
   double   B=iMA(NULL,0,10,0,MODE_SMA,PRICE_CLOSE,0);
   double   C=iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
  // if (ema15M10<ema15M20)
  // {
  // if((k<d)&&(kp>dp))
if(up>0 && upp==0)     
     
     {
          res=OrderSend(Symbol(),OP_BUY,11,Ask,3,0,0,"Symbol()+buy'",MAGICMA,0,Blue);

       return;
      }
     
     //}
//--- buy conditions
  //if (ema15M10>ema15M20)
   //  {
     //if((k>d)&&(kp<dp))
if(down>0 && downp==0)     
     {
       res=OrderSend(Symbol(),OP_SELL,11,Bid,3,0,0,"Symbol()+sell",MAGICMA,0,Red);
      return;
      }
     
    // }
//---
  }
  
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
//  double ma;
//--- go trading only for first tiks of new bar
   //if(Volume[0]>1) return;
//--- get Moving Average
   /*ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
  double MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
  double MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
  double SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
  double SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);*/
   double up=iCustom(Symbol(),0,"ATR",6,1);
     double down=iCustom(Symbol(),0,"ATR",7,1);
     double upp=iCustom(Symbol(),0,"ATR",6,2);
     double downp=iCustom(Symbol(),0,"ATR",7,2);
     
    double ema15M10;
   double ema30M10;
   double ema15M20;
   double ema30M20;
    ema15M10=iMA(Symbol(),PERIOD_M15,10,0,MODE_EMA,PRICE_CLOSE,0);
    ema30M10=iMA(Symbol(),PERIOD_M30,10,0,MODE_EMA,PRICE_CLOSE,0);
    ema15M20=iMA(Symbol(),PERIOD_M15,20,0,MODE_EMA,PRICE_CLOSE,0);
    ema30M20=iMA(Symbol(),PERIOD_M30,20,0,MODE_EMA,PRICE_CLOSE,0);
   
    double A=iMA(NULL,0,5,0,MODE_SMA,PRICE_CLOSE,0);
   double   B=iMA(NULL,0,10,0,MODE_SMA,PRICE_CLOSE,0);
   double   C=iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type
      if(OrderType()==OP_BUY)
        {
if(down>0 && downp==0)
//if (ema15M10>ema15M20)
         {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
if(up>0 && upp==0)
//if (ema15M10<ema15M20)
          {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//---
  }
bool tradetime(int starthour,int endhour)
{
  bool a=false;
  if(starthour<=endhour)
  {
    if(TimeHour(TimeLocal())>=starthour&&TimeHour(TimeLocal())<endhour)
    {
       a=true;
    }
  }
  else
  {
    if(TimeHour(TimeLocal())>=starthour||TimeHour(TimeLocal())<endhour)
    {
    a=true;
    }
  }
  return(a);
}
这是EA回测显示  
   
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2019-10-23 14:51 , Processed in 0.076257 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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