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<bars;i++)
     {
      if(j>(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(time<time1) return(1);
      else return(0);
     }
   else return(-1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Kline::iCloseMql4(string symbol,ENUM_TIMEFRAMES tf,int index)
  {
   if(index < 0) return(-1);
   double arr[];
   if(CopyClose(symbol,tf,index,1,arr)>0)
      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<iMAPeriod;i++,pos--)
            sum+=array[pos];
         while(pos>=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<iMAPeriod;i++,k++)
                 {
                  sum+=array[k];
                  buf[k]=0;

                 }
              }
            else sum=buf[pos+1]*(iMAPeriod-1)+array[pos];
            buf[pos]=sum/iMAPeriod;
            pos--;
           }
         return(buf[Shift+ma_shift]);
        }
      case MODE_LWMA :
        {
         double sum=0.0,lsum=0.0;
         double price;
         int    i,weight=0,pos=total-1;
         for(i=1;i<=iMAPeriod;i++,pos--)
           {
            price=array[pos];
            sum+=price*i;
            lsum+=price;
            weight+=i;
           }
         pos++;
         i=pos+iMAPeriod;
         while(pos>=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;i<ArraySize(low);i++)
     {
      if(low[i]<min)
        {
         min=low[i];
        }
     }
   return(min);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Kline::HHV(string symbol,ENUM_TIMEFRAMES tf,int count,int shift)
  {
   double high[];
   ArraySetAsSeries(high,true);
   CopyHigh(symbol,tf,shift,count,high);
   double max=0;
   for(int i=0;i<ArraySize(high);i++)
     {
      if(high[i]>max)
        {
         max=high[i];
        }
     }
   return(max);
  }

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容