MT5入门到精通之八指标获取(类封装)

一.封装类Kline
1.实现
(如果需要用多个同一类型的指标,建议接口传入数组参数)
(如果同一类型的指标只用到一次,可以写在接口里面)

//+------------------------------------------------------------------+
//|                                                        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:
   //商品
   string            symbol;
   //周期
   ENUM_TIMEFRAMES   tf;
   //开高低收,时间,数组
   double            open[];
   double            close[];
   double            high[];
   double            low[];
   datetime          time[];

   //adx指标数组
   double            adx0[];
   double            adx1[];
   double            adx2[];

   double getAsk()
     {
      return getAsk(symbol);
     }
   double getAsk(string symbol)
     {
      return SymbolInfoDouble(symbol,SYMBOL_ASK);
     }
   double getBid()
     {
      return getBid(symbol);
     }
   double getBid(string symbol)
     {
      return SymbolInfoDouble(symbol,SYMBOL_BID);
     }
   int getOpen(int count,string symbol,ENUM_TIMEFRAMES tf)
     {
      ArraySetAsSeries(open,true);
      int num=CopyOpen(symbol,tf,0,count,open);
      return num;
     }

   int getOpen(int count)
     {
      return getOpen(count,symbol,tf);
     }
   int getClose(int count,string symbol,ENUM_TIMEFRAMES tf)
     {
      ArraySetAsSeries(close,true);
      int num=CopyClose(symbol,tf,0,count,close);
      return num;
     }
   int getClose(int count)
     {
      return getClose(count,symbol,tf);
     }

   int getHigh(int count,string symbol,ENUM_TIMEFRAMES tf)
     {
      ArraySetAsSeries(high,true);
      int num=CopyHigh(symbol,tf,0,count,high);
      return num;
     }
   int getHigh(int count)
     {
      return getHigh(count,symbol,tf);
     }
   int getLow(int count,string symbol,ENUM_TIMEFRAMES tf)
     {
      ArraySetAsSeries(low,true);
      int num=CopyLow(symbol,tf,0,count,low);
      return num;
     }
   int getLow(int count)
     {
      return getLow(count,symbol,tf);
     }
   int getTime(int count,string symbol,ENUM_TIMEFRAMES tf)
     {
      ArraySetAsSeries(time,true);
      int num=CopyTime(symbol,tf,0,count,time);
      return num;
     }
   int getTime(int count)
     {
      return getTime(count,symbol,tf);
     }
   void MA(double            &ma[],
           int count,//获取几个值
           string               symbol,            // 交易品种名称
           ENUM_TIMEFRAMES      period,            // 周期
           int                  ma_period,         // 平均周期
           int                  ma_shift,          // 平移
           ENUM_MA_METHOD       ma_method,         // 平滑类型
           ENUM_APPLIED_PRICE   applied_price      // 价格或者处理程序类型
           )
     {
      int ma_h=iMA(symbol,period,ma_period,ma_shift,ma_method,applied_price);
      ArraySetAsSeries(ma,true);
      CopyBuffer(ma_h,0,0,count,ma);
      //释放句柄
      IndicatorRelease(ma_h);
     }
   void ADX(int count,//获取几个值
            string           symbol,         // 交易品种名称
            ENUM_TIMEFRAMES  period,         // 周期
            int              adx_period      // 平均周期
            )
     {
      int adx_h=iADX(symbol,period,adx_period);
      ArraySetAsSeries(adx0,true);
      ArraySetAsSeries(adx1,true);
      ArraySetAsSeries(adx2,true);
      CopyBuffer(adx_h,0,0,count,adx0);
      CopyBuffer(adx_h,1,0,count,adx1);
      CopyBuffer(adx_h,2,0,count,adx2);
      IndicatorRelease(adx_h);
     }

                     Kline(string symbol,ENUM_TIMEFRAMES tf);
                    ~Kline();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Kline::Kline(string symbol,ENUM_TIMEFRAMES tf)
  {
   this.symbol=symbol;
   this.tf=tf;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
Kline::~Kline()
  {
  }
//+------------------------------------------------------------------+

2.具体使用

//+------------------------------------------------------------------+
//|                                            testKSeriesScript.mq5 |
//|                        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"
#include <wz\Kline.mqh>

Kline kl(Symbol(),0);
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
//1.获取ask
//1.1直接获取
   double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//1.2 类获取
   ask=kl.getAsk();
//2. 获取开盘价
//2.1直接获取
   double open[];
   ArraySetAsSeries(open,true);
   CopyOpen(Symbol(),0,0,10,open);
//2.2类获取
   kl.getOpen(10,Symbol(),0);
   double open0=kl.open[0];

//3.类获取时间
   kl.getTime(5);
   datetime time0=kl.time[0];

//4.获取均线指标
   int ma_h=iMA(Symbol(),0,12,0,MODE_SMA,PRICE_CLOSE);
   double ma[];
   ArraySetAsSeries(ma,true);
   CopyBuffer(ma_h,0,0,10,ma);
   double ma0=ma[1];

//4.1用类获取均线(如果需要用多个同一类型的指标,建议接口传入数组参数)
//12日均线
   double ma12[];
   kl.MA(ma12,10,Symbol(),0,12,0,MODE_SMA,PRICE_CLOSE);
   double ma12_1=ma12[1];
//20日均线
   double ma20[];
   kl.MA(ma20,10,Symbol(),0,20,0,MODE_SMA,PRICE_CLOSE);
   double ma20_1=ma20[1];

//5.获取ADX指标 (如果同一类型的指标只用到一次,可以写在接口里面)
   kl.ADX(10,Symbol(),0,14);
   double adx0_1=kl.adx0[1];
   double adx1_1=kl.adx1[1];
   double adx2_1=kl.adx2[1];

//6.自定义指标如何获取
   int cus_h=iCustom(Symbol(),0,"BB",20,0,2);
   double cus0[];
   double cus1[];
   double cus2[];
   ArraySetAsSeries(cus0,true);
   ArraySetAsSeries(cus1,true);
   ArraySetAsSeries(cus2,true);
   CopyBuffer(cus_h,0,0,10,cus0);
   CopyBuffer(cus_h,1,0,10,cus1);
   CopyBuffer(cus_h,2,0,10,cus2);
   double cus0_1=cus0[1];
   double cus1_1=cus1[1];
   double cus2_1=cus2[1];

   int a=1;

  }
//+------------------------------------------------------------------+

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

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

推荐阅读更多精彩内容