MT5入门到精通之十二(行情类1)

接上一篇
3.行情类实现(用来获取行情数据,如最新价,开高低收等)

//+------------------------------------------------------------------+
//|                                                        Kline.mqh |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Kline
  {
private:

protected:

public:

   double            getAsk();
   double            getAsk(string symbol);
   double            getBid();
   double            getBid(string symbol);
   int               getOpen(double &open[],int count,string symbol,ENUM_TIMEFRAMES tf);
   int               getOpen(double &open[],int count);
   int               getClose(double &close[],int count,string symbol,ENUM_TIMEFRAMES tf);
   int               getClose(double &close[],int count);
   int               getHigh(double &high[],int count,string symbol,ENUM_TIMEFRAMES tf);
   int               getHigh(double &high[],int count);
   int               getLow(double &low[],int count,string symbol,ENUM_TIMEFRAMES tf);
   int               getLow(double &low[],int count);
   int               getTime(datetime &time[],int count,string symbol,ENUM_TIMEFRAMES tf);
   int               getTime(datetime &time[],int count);
   int               getTickVolume(long &tickVolume[],int count,string symbol,ENUM_TIMEFRAMES tf);
   int               getTickVolume(long &tickVolume[],int count);
   int               getRealVolume(long &realVolume[],int count,string symbol,ENUM_TIMEFRAMES tf);
   int               getRealVolume(long &realVolume[],int count);
   //五档 十档行情
   int               getMarketBook(MqlBookInfo &book[]);
   int               getMarketBook(MqlBookInfo &book[],string symbol);
   //开高低收等数据
   int               getRates(MqlRates  &rates[],int count,string symbol,ENUM_TIMEFRAMES tf);
   int               getRates(MqlRates  &rates[],int count);
   void             getZigZag(double &zigZag2[][4],int count,int ExtDepth,int ExtDeviation,int ExtBackstep);
   //mql4函数封装
   int               iBarsMql4(string symbol,ENUM_TIMEFRAMES tf);
   int               iBarShiftMql4(string symbol,ENUM_TIMEFRAMES tf,datetime time,bool exact=false);
   double            iCloseMql4(string symbol,ENUM_TIMEFRAMES tf,int index);
   double            iHighMql4(string symbol,ENUM_TIMEFRAMES tf,int index);
   int               iHighestMql4(string symbol,ENUM_TIMEFRAMES tf,int count=WHOLE_ARRAY,int start=0);
   double            iLowMql4(string symbol,ENUM_TIMEFRAMES tf,int index);
   int               iLowestMql4(string symbol,ENUM_TIMEFRAMES tf,int count=WHOLE_ARRAY,int start=0);
   double            iOpenMql4(string symbol,ENUM_TIMEFRAMES tf,int index);
   datetime          iTimeMql4(string symbol,ENUM_TIMEFRAMES tf,int index);
   int               iVolumeMql4(string symbol,ENUM_TIMEFRAMES tf,int index);
   double            iMAOnArrayMql4(
                                    double &Array[],
                                    int total,
                                    int iMAPeriod,
                                    int ma_shift,
                                    ENUM_MA_METHOD ma_method,
                                    int Shift);
   double            LLV(string symbol,ENUM_TIMEFRAMES tf,int count,int shift);
   double            HHV(string symbol,ENUM_TIMEFRAMES tf,int count,int shift);

   //指标函数
   int               AC(
                        double &data0[],
                        int count,
                        string           symbol,     // 交易品种名称 
                        ENUM_TIMEFRAMES  period      // 周期
                        );
   int               AD(
                        double &data0[],
                        int count,
                        string               symbol,             // 交易品种名称 
                        ENUM_TIMEFRAMES      period,             // 周期 
                        ENUM_APPLIED_VOLUME  applied_volume      // 用于计算的交易量类型 
                        );
   int               ADX(double &data0[],
                         double &data1[],
                         double &data2[],
                         int count,//获取几个值
                         string           symbol,         // 交易品种名称 
                         ENUM_TIMEFRAMES  period,         // 周期 
                         int              adx_period      // 平均周期 
                         );
   int               ADXWilder(
                               double &data0[],
                               double &data1[],
                               double &data2[],
                               int count,
                               string           symbol,         // 交易品种名称 
                               ENUM_TIMEFRAMES  period,         // 周期 
                               int              adx_period      // 平均周期 
                               );
   int               Alligator(
                               double &data0[],
                               double &data1[],
                               double &data2[],
                               int count,
                               string              symbol,            // 交易品种名称 
                               ENUM_TIMEFRAMES     period,            // 周期 
                               int                 jaw_period,        // 咽喉计算周期 
                               int                 jaw_shift,         // 咽喉平移 
                               int                 teeth_period,      // 牙齿计算周期 
                               int                 teeth_shift,       // 牙齿平移 
                               int                 lips_period,       // 唇部计算周期 
                               int                 lips_shift,        // 唇部平移 
                               ENUM_MA_METHOD      ma_method,         // 平滑类型 
                               ENUM_APPLIED_PRICE  applied_price      // 价格或者处理器类型 
                               );
   int               AMA(
                         double &data0[],
                         int count,
                         string              symbol,             // 交易品种名称 
                         ENUM_TIMEFRAMES     period,             // 周期 
                         int                 ama_period,         //  AMA平均周期 
                         int                 fast_ma_period,     // 快速 MA 周期 
                         int                 slow_ma_period,     // 慢速 MA 周期 
                         int                 ama_shift,          // 指标平移 
                         ENUM_APPLIED_PRICE  applied_price       // 价格或者处理器类型 
                         );
   int               AO(
                        double &data0[],
                        int count,
                        string           symbol,     // 交易品种名称 
                        ENUM_TIMEFRAMES  period      // 周期 
                        );
   int               ATR(
                         double &data0[],
                         int count,
                         string           symbol,        // 交易品种名称 
                         ENUM_TIMEFRAMES  period,        // 周期 
                         int              ma_period      // 平均周期  
                         );
   int               BearsPower(
                                double &data0[],
                                int count,
                                string              symbol,            // 交易品种名称 
                                ENUM_TIMEFRAMES     period,            // 周期 
                                int                 ma_period,         // 平均周期 
                                );
   int               Bands(
                           double &data0[],
                           double &data1[],
                           double &data2[],
                           int count,
                           string              symbol,            // 交易品种名称 
                           ENUM_TIMEFRAMES     period,            // 周期 
                           int                 bands_period,      // 平均线计算周期 
                           int                 bands_shift,       // 指标平移 
                           double              deviation,         // 标准差数 
                           ENUM_APPLIED_PRICE  applied_price      // 价格或处理器类型 
                           );
   int               BullsPower(
                                double &data0[],
                                int count,
                                string              symbol,            // 交易品种名称 
                                ENUM_TIMEFRAMES     period,            // 周期 
                                int                 ma_period,         // 平均周期 
                                );
   int               CCI(
                         double &data0[],
                         int count,
                         string              symbol,            // 交易品种名称 
                         ENUM_TIMEFRAMES     period,            // 周期 
                         int                 ma_period,         // 平均周期 
                         ENUM_APPLIED_PRICE  applied_price      // 价格或处理器类型 
                         );
   int               Chaikin(
                             double &data0[],
                             int count,
                             string               symbol,             // 交易品种名称 
                             ENUM_TIMEFRAMES      period,             // 周期 
                             int                  fast_ma_period,     // 快速周期 
                             int                  slow_ma_period,     // 慢速周期 
                             ENUM_MA_METHOD       ma_method,          // 平滑类型 
                             ENUM_APPLIED_VOLUME  applied_volume      // 交易量类型 
                             );
   int               DEMA(
                          double &data0[],
                          int count,
                          string              symbol,            // 交易品种名称 
                          ENUM_TIMEFRAMES     period,            // 周期 
                          int                 ma_period,         // 平均周期 
                          int                 ma_shift,          // 平移 
                          ENUM_APPLIED_PRICE  applied_price      // 价格或者处理器类型 
                          );
   int               DeMarker(
                              double &data0[],
                              int count,
                              string           symbol,        // 交易品种名称 
                              ENUM_TIMEFRAMES  period,        // 周期 
                              int              ma_period      // 平均周期 
                              );
   int               Envelopes(
                               double &data0[],
                               double &data1[],
                               int count,
                               string              symbol,            // 交易品种名称 
                               ENUM_TIMEFRAMES     period,            // 周期 
                               int                 ma_period,         // 平均线计算周期 
                               int                 ma_shift,          // 指标平移 
                               ENUM_MA_METHOD      ma_method,         // 平滑类型 
                               ENUM_APPLIED_PRICE  applied_price,     // 价格或者处理器类型 
                               double              deviation          // 中线边界差(百分率) 
                               );
   int               Force(
                           double &data0[],
                           int count,
                           string              symbol,            // 交易品种名称 
                           ENUM_TIMEFRAMES     period,            // 周期 
                           int                 ma_period,         // 平均周期 
                           ENUM_MA_METHOD      ma_method,         // 平滑类型 
                           ENUM_APPLIED_VOLUME applied_volume     // 计算的交易量类型 
                           );
   int               Fractals(
                              double &data0[],
                              double &data1[],
                              int count,
                              string           symbol,     // 交易品种名称 
                              ENUM_TIMEFRAMES  period      // 周期 
                              );
   int               FrAMA(
                           double &data0[],
                           int count,
                           string              symbol,            // 交易品种名称 
                           ENUM_TIMEFRAMES     period,            // 周期 
                           int                 ma_period,         // 平均周期 
                           int                 ma_shift,          // 图表平移 
                           ENUM_APPLIED_PRICE  applied_price      // 价格或者处理器类型 
                           );
   int               Gator(
                           double &data0[],
                           double &data1[],
                           int count,
                           string              symbol,            // 交易品种名称 
                           ENUM_TIMEFRAMES     period,            // 周期 
                           int                 jaw_period,        // 咽喉计算周期 
                           int                 jaw_shift,         // 咽喉平移 
                           int                 teeth_period,      // 牙齿计算周期 
                           int                 teeth_shift,       // 牙齿平移 
                           int                 lips_period,       // 唇部计算周期 
                           int                 lips_shift,        // 唇部平移 
                           ENUM_MA_METHOD      ma_method,         // 平滑类型 
                           ENUM_APPLIED_PRICE  applied_price      // 价格或者处理器类型 
                           );
   int               Ichimoku(
                              double &data0[],
                              double &data1[],
                              double &data2[],
                              double &data3[],
                              double &data4[],
                              int count,
                              string           symbol,            // 交易品种类型 
                              ENUM_TIMEFRAMES  period,            // 周期 
                              int              tenkan_sen,        // Tenkan-sen转换线周期 
                              int              kijun_sen,         // Kijun-sen基准线周期 
                              int              senkou_span_b      // Senkou Span B周期 
                              );
   int               BWMFI(
                           double &data0[],
                           int count,
                           string               symbol,             // 交易品种类型 
                           ENUM_TIMEFRAMES      period,             // 周期 
                           ENUM_APPLIED_VOLUME  applied_volume      // 计算的交易量类型 
                           );
   int               Momentum(
                              double &data0[],
                              int count,
                              string               symbol,            // 交易品种名称 
                              ENUM_TIMEFRAMES      period,            // 周期 
                              int                  mom_period,        // 平均周期 
                              ENUM_APPLIED_PRICE   applied_price      // 价格或者处理器类型 
                              );
   int               MFI(
                         double &data0[],
                         int count,
                         string               symbol,             // 交易品种名称 
                         ENUM_TIMEFRAMES      period,             // 周期 
                         int                  ma_period,          // 平均周期 
                         ENUM_APPLIED_VOLUME  applied_volume      // 计算的交易量类型 
                         );
   int               MA(double            &data0[],
                        int count,//获取几个值
                        string               symbol,            // 交易品种名称 
                        ENUM_TIMEFRAMES      period,            // 周期 
                        int                  ma_period,         // 平均周期 
                        int                  ma_shift,          // 平移 
                        ENUM_MA_METHOD       ma_method,         // 平滑类型 
                        ENUM_APPLIED_PRICE   applied_price      // 价格或者处理程序类型 
                        );
   int               OsMA(
                          double &data0[],
                          int count,
                          string              symbol,              // 交易品种名称 
                          ENUM_TIMEFRAMES     period,              // 周期 
                          int                 fast_ema_period,     // 快速移动平均数周期 
                          int                 slow_ema_period,     // 慢速移动平均数周期 
                          int                 signal_period,       // 不同点的平均周期 
                          ENUM_APPLIED_PRICE  applied_price        // 价格或者处理器的类型 
                          );
   int               MACD(
                          double &data0[],
                          double &data1[],
                          int count,
                          string              symbol,              // 交易品种名称 
                          ENUM_TIMEFRAMES     period,              // 周期 
                          int                 fast_ema_period,     // 快速移动平均数周期 
                          int                 slow_ema_period,     // 慢速移动平均数周期 
                          int                 signal_period,       // 不同点的平均周期 
                          ENUM_APPLIED_PRICE  applied_price        // 价格或者处理器的类型 
                          );
   int               OBV(
                         double &data0[],
                         int count,
                         string                symbol,             // 交易品种名称 
                         ENUM_TIMEFRAMES       period,             // 周期 
                         ENUM_APPLIED_VOLUME   applied_volume      // 计算的交易量类型 
                         );
   int               SAR(
                         double &data0[],
                         int count,
                         string           symbol,      // 交易品种名称 
                         ENUM_TIMEFRAMES  period,      // 周期 
                         double           step,        // 逐步增加 
                         double           maximum      // 最大止损水平 
                         );
   int               RSI(
                         double &data0[],
                         int count,
                         string              symbol,            // 交易品种类型 
                         ENUM_TIMEFRAMES     period,            // 周期 
                         int                 ma_period,         // 平均周期 
                         ENUM_APPLIED_PRICE  applied_price      // 价格或者处理器类型 
                         );
   int               RVI(
                         double &data0[],
                         double &data1[],
                         int count,
                         string           symbol,        // 交易品种名称 
                         ENUM_TIMEFRAMES  period,        // 周期 
                         int              ma_period      // 平均周期 
                         );
   int               StdDev(
                            double &data0[],
                            int count,
                            string              symbol,            // 交易品种名称 
                            ENUM_TIMEFRAMES     period,            // 周期 
                            int                 ma_period,         // 平均周期 
                            int                 ma_shift,          // 平移 
                            ENUM_MA_METHOD      ma_method,         // 平滑类型 
                            ENUM_APPLIED_PRICE  applied_price      // 价格或者处理器类型 
                            );
   int               Stochastic(
                                double &data0[],
                                double &data1[],
                                int count,
                                string           symbol,          // 交易品种名称 
                                ENUM_TIMEFRAMES  period,          // 周期 
                                int              Kperiod,         // K线周期 (用于计算的柱数) 
                                int              Dperiod,         // D线周期 (开始平滑周期) 
                                int              slowing,         // 最终平滑 
                                ENUM_MA_METHOD   ma_method,       // 平滑类型 
                                ENUM_STO_PRICE   price_field      // 随机计算法 
                                );
   int               TEMA(
                          double &data0[],
                          int count,
                          string              symbol,            // 交易品种名称 
                          ENUM_TIMEFRAMES     period,            // 周期 
                          int                 ma_period,         // 平均周期 
                          int                 ma_shift,          // 指标平移 
                          ENUM_APPLIED_PRICE  applied_price      // 价格或者处理器类型 
                          );
   int               TriX(
                          double &data0[],
                          int count,
                          string              symbol,            // 交易品种名称 
                          ENUM_TIMEFRAMES     period,            // 周期 
                          int                 ma_period,         // 平均周期 
                          ENUM_APPLIED_PRICE  applied_price      // 价格或者处理器类型 
                          );
   int               WPR(
                         double &data0[],
                         int count,
                         string           symbol,          // 交易品种名称 
                         ENUM_TIMEFRAMES  period,          // 周期 
                         int              calc_period      // 平均周期 
                         );
   int               VIDyA(
                           double &data0[],
                           int count,
                           string              symbol,            // 交易品种名称 
                           ENUM_TIMEFRAMES     period,            // 周期 
                           int                 cmo_period,        // Chande 动量指标周期 
                           int                 ema_period,        // EMA 平滑周期 
                           int                 ma_shift,          // 价格图表平移 
                           ENUM_APPLIED_PRICE  applied_price      // 价格或者处理器类型 
                           );
   int               Volumes(
                             double &data0[],
                             int count,
                             string               symbol,             // 交易品种名称 
                             ENUM_TIMEFRAMES      period,             // 周期 
                             ENUM_APPLIED_VOLUME  applied_volume      // 计算的交易量类型 
                             );
   int               ZigZag(
                            double &data0[],
                            int count,
                            string               symbol,             // 交易品种名称 
                            ENUM_TIMEFRAMES      period,             // 周期 
                            int   ExtDepth,
                            int   ExtDeviation,
                            int   ExtBackstep
                            );

                     Kline();
                    ~Kline();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Kline::Kline()
  {
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Kline::~Kline()
  {
  }
//+------------------------------------------------------------------+
double Kline::getAsk()
  {
   return getAsk(Symbol());
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Kline::getAsk(string symbol)
  {
   return SymbolInfoDouble(symbol,SYMBOL_ASK);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Kline::getBid()
  {
   return getBid(Symbol());
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Kline::getBid(string symbol)
  {
   return SymbolInfoDouble(symbol,SYMBOL_BID);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getOpen(double &open[],int count,string symbol,ENUM_TIMEFRAMES tf)
  {
   ArraySetAsSeries(open,true);
   int num=CopyOpen(symbol,tf,0,count,open);
   return num;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getOpen(double &open[],int count)
  {
   return getOpen(open,count,Symbol(),0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getClose(double &close[],int count,string symbol,ENUM_TIMEFRAMES tf)
  {
   ArraySetAsSeries(close,true);
   int num=CopyClose(symbol,tf,0,count,close);
   return num;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getClose(double &close[],int count)
  {
   return getClose(close,count,Symbol(),0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getHigh(double &high[],int count,string symbol,ENUM_TIMEFRAMES tf)
  {
   ArraySetAsSeries(high,true);
   int num=CopyHigh(symbol,tf,0,count,high);
   return num;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getHigh(double &high[],int count)
  {
   return getHigh(high,count,Symbol(),0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getLow(double &low[],int count,string symbol,ENUM_TIMEFRAMES tf)
  {
   ArraySetAsSeries(low,true);
   int num=CopyLow(symbol,tf,0,count,low);
   return num;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getLow(double &low[],int count)
  {
   return getLow(low,count,Symbol(),0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getTime(datetime &time[],int count,string symbol,ENUM_TIMEFRAMES tf)
  {
   ArraySetAsSeries(time,true);
   int num=CopyTime(symbol,tf,0,count,time);
   return num;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getTime(datetime &time[],int count)
  {
   return getTime(time,count,Symbol(),0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getTickVolume(long &tickVolume[],int count,string symbol,ENUM_TIMEFRAMES tf)
  {
   ArraySetAsSeries(tickVolume,true);
   return(CopyTickVolume(symbol,tf,0,count,tickVolume));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getTickVolume(long &tickVolume[],int count)
  {
   ArraySetAsSeries(tickVolume,true);
   return(CopyTickVolume(Symbol(),0,0,count,tickVolume));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getRealVolume(long &realVolume[],int count,string symbol,ENUM_TIMEFRAMES tf)
  {
   ArraySetAsSeries(realVolume,true);
   return(CopyRealVolume(symbol,tf,0,count,realVolume));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getRealVolume(long &realVolume[],int count)
  {
   ArraySetAsSeries(realVolume,true);
   return(CopyRealVolume(Symbol(),0,0,count,realVolume));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getMarketBook(MqlBookInfo &book[])
  {
   MarketBookGet(Symbol(),book);
   return(ArraySize(book));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getMarketBook(MqlBookInfo &book[],string symbol)
  {
   MarketBookGet(symbol,book);
   return(ArraySize(book));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getRates(MqlRates  &rates[],int count,string symbol,ENUM_TIMEFRAMES tf)
  {
   ArraySetAsSeries(rates,true);
   return(CopyRates(symbol,tf,0,count,rates));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::getRates(MqlRates  &rates[],int count)
  {
   ArraySetAsSeries(rates,true);
   return(CopyRates(Symbol(),0,0,count,rates));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Kline::getZigZag(double &zigZag2[][4],int count,int ExtDepth,int ExtDeviation,int ExtBackstep)
  {
   ArrayResize(zigZag2,count);
   //1.初始化为0
   ArrayInitialize(zigZag2,0);
   double zigZag[];
   //2.当前k线数
   int bars=Bars(Symbol(),0);
   ZigZag(zigZag,bars,Symbol(),0,ExtDepth,ExtDeviation,ExtBackstep);
   datetime time[];
   getTime(time,bars);
   double low[];
   getLow(low,bars);
   int j=0;
   for(int i=0;i(count-1))
        {
         break;
        }
      if(zigZag[i]>0)
        {
         zigZag2[j][0]=zigZag[i];//记录高低点的值
         zigZag2[j][1]=i;//记录高低点所在的K线序号
         zigZag2[j][2]=time[i];//记录高低点所在K线的时间
                                  //string ts=TimeToString(zigzag[jishu][2]);
         if(zigZag[i]<=low[i])//低点
           {
            zigZag2[j][3]=1;//如果值等于1,说明是低点
           }
         else//高点
           {
            zigZag2[j][3]=2;//如果值等于2,说明是高点
           }
         j++;
        }
     }
  }
//+------------------------------------------------------------------+
//| Returns the number of bars count                                                                 |
//+------------------------------------------------------------------+
int Kline::iBarsMql4(string symbol,ENUM_TIMEFRAMES tf)
  {
   return(Bars(symbol,tf));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::iBarShiftMql4(string symbol,ENUM_TIMEFRAMES tf,datetime time,bool exact=false)
  {
   if(time<0) return(-1);
   datetime arr[],time1;
   CopyTime(symbol,tf,0,1,arr);
   time1=arr[0];
   if(CopyTime(symbol,tf,time,time1,arr)>0)
     {
      if(ArraySize(arr)>2) return(ArraySize(arr)-1);
      if(time0)
      return(arr[0]);
   else return(-1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Kline::iHighMql4(string symbol,ENUM_TIMEFRAMES tf,int index)
  {
   if(index < 0) return(-1);
   double arr[];
   if(CopyHigh(symbol,tf,index,1,arr)>0)
      return(arr[0]);
   else return(-1);
  }
//+------------------------------------------------------------------+
//|  Searches for the largest element in the first dimension                                                                 |
//+------------------------------------------------------------------+
int Kline::iHighestMql4(string symbol,ENUM_TIMEFRAMES tf,int count=WHOLE_ARRAY,int start=0)
  {
   if(start<0) return(-1);
   if(count<=0) count=Bars(symbol,tf);
   double high[];
   ArraySetAsSeries(high,true);
   CopyHigh(symbol,tf,start,count,high);
   return(ArrayMaximum(high,0,count)+start);
  }
//+------------------------------------------------------------------+
//| 第index根k线的 low值                                                                 |
//+------------------------------------------------------------------+
double Kline::iLowMql4(string symbol,ENUM_TIMEFRAMES tf,int index)
  {
   if(index < 0) return(-1);
   double arr[];
   if(CopyLow(symbol,tf,index,1,arr)>0)
      return(arr[0]);
   else return(-1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::iLowestMql4(string symbol,ENUM_TIMEFRAMES tf,int count=WHOLE_ARRAY,int start=0)
  {
   if(start<0) return(-1);
   if(count<=0) count=Bars(symbol,tf);
   double low[];
   ArraySetAsSeries(low,true);
   CopyLow(symbol,tf,start,count,low);
   return(ArrayMinimum(low,0,count)+start);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Kline::iOpenMql4(string symbol,ENUM_TIMEFRAMES tf,int index)
  {
   if(index < 0) return(-1);
   double arr[];
   if(CopyOpen(symbol,tf,index,1,arr)>0)
      return(arr[0]);
   else return(-1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime Kline::iTimeMql4(string symbol,ENUM_TIMEFRAMES tf,int index)
  {
   if(index < 0) return(-1);
   datetime arr[];
   if(CopyTime(symbol,tf,index,1,arr)>0)
      return(arr[0]);
   else return(-1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Kline::iVolumeMql4(string symbol,ENUM_TIMEFRAMES tf,int index)
  {
   if(index < 0) return(-1);
   long arr[];
   if(CopyTickVolume(symbol,tf,index,1,arr)>0)
      return(arr[0]);
   else return(-1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Kline::iMAOnArrayMql4(double &array[],int total,int iMAPeriod,int ma_shift,ENUM_MA_METHOD ma_method,int Shift)
  {
   double buf[];
   if(total>0 && total<=iMAPeriod) return(0);
   if(total==0) total=ArraySize(array);
   if(ArrayResize(buf,total)<0) return(0);
   switch(ma_method)
     {
      case MODE_SMA :
        {
         double sum=0;
         int    i,pos=total-1;
         for(i=1;i=0)
           {
            sum+=array[pos];
            buf[pos]=sum/iMAPeriod;
            sum-=array[pos+iMAPeriod-1];
            pos--;

           }
         return(buf[Shift+ma_shift]);
        }
      case MODE_EMA :
        {
         double pr=2.0/(iMAPeriod+1);
         int    pos=total-2;
         while(pos>=0)
           {
            if(pos==total-2) buf[pos+1]=array[pos+1];
            buf[pos]=array[pos]*pr+buf[pos+1]*(1-pr);
            pos--;

           }
         return(buf[Shift+ma_shift]);
        }
      case MODE_SMMA :
        {
         double sum=0;
         int    i,k,pos;
         pos=total-iMAPeriod;
         while(pos>=0)
           {
            if(pos==total-iMAPeriod)
              {
               for(i=0,k=pos;i=0)
           {
            buf[pos]=sum/weight;
            if(pos==0) break;
            pos--;
            i--;
            price=array[pos];
            sum=sum-lsum+price*iMAPeriod;
            lsum-=array[i];
            lsum+=price;
           }
         return(buf[Shift+ma_shift]);
        }
      default: return(0);
     }
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Kline::LLV(string symbol,ENUM_TIMEFRAMES tf,int count,int shift)
  {
   double low[];
   ArraySetAsSeries(low,true);
   CopyLow(symbol,tf,shift,count,low);
   double min=9999999;
   for(int i=0;imax)
        {
         max=high[i];
        }
     }
   return(max);
  }

如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。

你可能感兴趣的:(MT5入门到精通之十二(行情类1))