MQL5教程 03 账户、终端、交易品种、市场深度、K线、指标信息

一、账户信息

int OnStart()
  {
   // AccountInfoInteger()返回账户长整型属性值
   long a1 = AccountInfoInteger(ACCOUNT_LOGIN);   // MT5账户登录账号
   long a2 = AccountInfoInteger(ACCOUNT_TRADE_MODE);  // 获取当前账户的交易模式,模拟账户为0,真实账户为2
   long a3 = AccountInfoInteger(ACCOUNT_LEVERAGE); // 获取账户杠杆
   long a4 = AccountInfoInteger(ACCOUNT_LIMIT_ORDERS);   // 请求当前账户的最大订单数量限制
   long a5 = AccountInfoInteger(ACCOUNT_TRADE_EXPERT);   // 是否允许智能交易

   return(1);
  }

int OnStart()
  {
   // AccountInfoDouble()返回账户双精度型属性值
   double d1 = AccountInfoDouble(ACCOUNT_BALANCE); // 当前账户结余
   double d2 = AccountInfoDouble(ACCOUNT_PROFIT);  // 当前开仓单的盈亏总额
   double d3 = AccountInfoDouble(ACCOUNT_EQUITY);  // 当前账户净值
   double d4 = AccountInfoDouble(ACCOUNT_MARGIN);  // 当前账户占用保证金,即预付款
   double d5 = AccountInfoDouble(ACCOUNT_MARGIN_LEVEL);  // 预付款维持率,即净值/占用保证金
   
   return(1);
  }

int OnStart()
  {
   // AccountInfoString()返回账户字符串型属性值
   string s1 = AccountInfoString(ACCOUNT_NAME); // 用户名
   string s2 = AccountInfoString(ACCOUNT_SERVER);  // 交易服务器名称
   string s3 = AccountInfoString(ACCOUNT_COMPANY); // 提供账户的公司名称
   
   return(1);
  }

二、终端信息

int OnStart()
  {
   // TerminalInfoInteger()获取与终端相关的整数类型信息
   int ti1 = TerminalInfoInteger(TERMINAL_BUILD);   // 获取当前 MetaTrader 终端的构建版本号
   int ti2 = TerminalInfoInteger(TERMINAL_DLLS_ALLOWED);  // 使用DLL许可
   
   return(1);
  }

int OnStart()
  {
   // TerminalInfoDouble()获取与终端相关的双精度类型信息
   double td1 = TerminalInfoDouble(TERMINAL_COMMUNITY_BALANCE);   // MQL5.community的结余
   
   return(1);
  }

int OnStart()
  {
   // TerminalInfoString()获取与终端相关的字符串类型信息
   string ts1 = TerminalInfoString(TERMINAL_LANGUAGE);   //  获取终端使用的语言
   string ts2 = TerminalInfoString(TERMINAL_PATH); // MetaTrader 终端的安装路径
   string ts3 = TerminalInfoString(TERMINAL_DATA_PATH);  // 获取 MetaTrader 终端的数据文件夹路径
   string ts4 = TerminalInfoString(TERMINAL_COMMONDATA_PATH);  // 获取当前 MetaTrader 终端的公共数据文件夹路径
   
   return(1);
  }

三、交易品种信息

  在MT5左侧市场报价窗口,先选中交易品种,再点详细,可以查到更详细的数据。
  另外,在交易品种上,鼠标右击,然后选规格,可以查到其他更详细数据。


在这里插入图片描述


int OnStart()
  {
   // SymbolInfoInteger()获取指定交易品种的长整类型信息
   string sy = Symbol();   // 返回当前图表的交易品种名称
   long symi1 = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);  // 当前交易品种点差
   long symi2 = SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);  // 当前交易品种的价格小数位数
   datetime symi3 = (datetime) SymbolInfoInteger(Symbol(),SYMBOL_TIME);   // 获取该交易品种的最新成交时间
   bool symi4 = (bool) SymbolInfoInteger(Symbol(),SYMBOL_SPREAD_FLOAT);  // 获取该交易品种是否为浮动点差
   
   return(1);
  }

int OnStart()
  {
   // SymbolInfoDouble()获取指定交易品种的双进度类型信息
   double symd1 = SymbolInfoDouble(Symbol(),SYMBOL_SWAP_LONG); // 一手多单的隔夜利息
   double symd2 = SymbolInfoDouble(Symbol(),SYMBOL_SWAP_SHORT);   // 一手空单的隔夜利息
   double symd3 = SymbolInfoDouble(Symbol(),SYMBOL_BID); // 获取当前交易品种的卖出价
   double symd4 = SymbolInfoDouble(Symbol(),SYMBOL_ASK); // 获取当前交易品种的买入价
   
   return(1);
  }

int OnStart()
  {
   string syName;
   double bid;
   // SymbolsTotal(true)表示获取仅在市场报价中的交易品种的数量
   for(int i=0; i<SymbolsTotal(true); i++)
      {
         // 返回交易品种的名字
         // 参数true表示只在市场报价中的交易品种
         // 参数 i 表示在市场报价中的索引
         syName = SymbolName(i, true);
         
         bid = SymbolInfoDouble(syName, SYMBOL_BID);
      }
   
   return(1);
  }

int OnStart()
  {
   SymbolSelect("XAUUSD", true); // 将XAUUSD添加到市场报价中
   // SymbolSelect("XAUUSD", false);   // 将XAUUSD从市场报价中删除

   return(1);
  }

四、市场深度

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
   
  }

void OnTick()
  {
   MqlBookInfo book[];
   
   // 获取市场深度数据,装到book数组中
   MarketBookGet(Symbol(), book);

   for(int i=0; i<ArraySize(book); i++)
     {
      if(book[i].type == BOOK_TYPE_SELL)
        {
         Print(i, " 做空:",book[i].price);
        }
      if(book[i].type == BOOK_TYPE_BUY)
        {
         Print(i, " 做多:",book[i].price);
        }
     }

  }

int OnInit()
  {
   // 订阅指定货币对的市场深度,
   // 只有订阅了的货币对,才能触发OnBookEvent()函数
   MarketBookAdd("XAUUSD");
   MarketBookAdd("EURUSD");   // 可以同时订阅多个货币对
   
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
   
  }

void OnTick()
  {
   // 取消订阅指定货币对的市场深度
   MarketBookRelease("EURUSD"); 
  }

// 指定货币对的市场深度变化时,触发OnBookEvent()函数
void OnBookEvent(const string& symbol)
  {
   Print(symbol, "市场深度发生改变");
  }

五、自定义类获取K线信息

自定义类:

enum ENUM_KINFO   // 定义K线信息类别
  {
   ENUM_ASK,
   ENUM_BID,
   ENUM_OPEN,
   ENUM_CLOSE,
   ENUM_LOW,
   ENUM_HIGH,
   ENUM_TIME
  };
  
class KInfo
  {
   public:
      string symbol;
      double open[];
      datetime time[];
      
      KInfo(string select_symbol)
        {
         this.symbol = select_symbol;
        }
        
      ~KInfo()
        {
        }

      double get_info(ENUM_KINFO enum_kinfo)
        {
         if(enum_kinfo == ENUM_ASK)
           {
            return(SymbolInfoDouble(symbol,SYMBOL_ASK));
           }
         else if(enum_kinfo == ENUM_BID)
           {
            return(SymbolInfoDouble(symbol,SYMBOL_BID));
           }
           
         return(-1); // ENUM_KINFO变量输入错误,返回-1
        }
        
      // 这里只实现了开盘价和开盘时间,最高价最低价收盘价实现方法类似
      void get_info(ENUM_KINFO enum_kinfo, int count)
        {
         if(enum_kinfo == ENUM_OPEN)
           {
            ArraySetAsSeries(open, true);
            // 复制开放价格的历史数据到数组open中
            CopyOpen(symbol, 0, 0, count, open);
            // 这里的参数第一个0表示当前图表周期
           }
           
         else if(enum_kinfo == ENUM_TIME)
           {
            ArraySetAsSeries(time, true);
            CopyTime(symbol, 0, 0, count, time);
           }
        }
             
      void get_info(ENUM_KINFO enum_kinfo,ENUM_TIMEFRAMES tf, int count)
        {
         if(enum_kinfo == ENUM_OPEN)
           {
            ArraySetAsSeries(open, true);
            CopyOpen(symbol, tf, 0, count, open);
           }
         else if(enum_kinfo == ENUM_TIME)
           {
            ArraySetAsSeries(time, true);
            CopyTime(symbol, tf, 0, count, time);
           }

        }
  };

脚本:

#include <myClass/testClass.mqh>

int OnStart()
  {
   KInfo k_info(Symbol());
   
   double ask = k_info.get_info(ENUM_ASK);
   Print("ask:", ask);
   
   double bid = k_info.get_info(ENUM_BID);
   Print("bid:",bid);
   
   /*
   k_info.get_info(ENUM_OPEN,PERIOD_H1,5);
   double op1 = k_info.open[1];
   Print("open:", op1);
   */
   
   k_info.get_info(ENUM_OPEN,5);
   double op1 = k_info.open[1];
   Print("open:", op1);
   
   
   k_info.get_info(ENUM_TIME, PERIOD_H1, 5);
   datetime t1 = k_info.time[1];
   Print("opentime:", t1);
   
   
   /*
   k_info.get_info(ENUM_TIME,5);
   datetime t1 = k_info.time[1];
   Print("opentime:", t1);
   */
   
   return(1);
  }

六、自定义类获取系统指标MA信息

自定义类:

class MAClass
  {
   public:
      MAClass()
        {
        }
        
      ~MAClass()
        {
        }
       
      void  MA(
         double& ma[],
         int count, 
         string               symbol_name,            // 交易品种名称 
         ENUM_TIMEFRAMES      period,            // 周期 
         int                  ma_period,         // 平均周期 
         int                  ma_shift,          // 平移 
         ENUM_MA_METHOD       ma_method,         // 平滑类型 
         ENUM_APPLIED_PRICE   applied_price      // 计算的价格
         )
        {
         // 返回指标句柄
         int ma_h = iMA(symbol_name, period, ma_period, ma_shift, ma_method, applied_price);
         ArraySetAsSeries(ma, true);
         // 使用此指标句柄来提取数据缓冲区中的值,复制到数组ma中
         CopyBuffer(ma_h, 0, 0, count, ma);
         IndicatorRelease(ma_h); // 释放指标句柄,防止内存泄漏
        }
  };

脚本:

#include <myClass/testClass.mqh>

int OnStart()
  {
   MAClass sj();
   double ma[];
   
   sj.MA(ma,10,Symbol(),PERIOD_CURRENT,10,0,MODE_SMA,PRICE_CLOSE);
   double ma1 = ma[1];
   Print(ma1);

   return(1);
  }

七、自定义类获取系统指标Stochastic Oscillator信息

自定义类:

class StoClass
  {
   public:
      StoClass()
        {
        }
        
      ~StoClass()
        {
        }
       
      void  Stochastic(
         double& sto0[],
         double& sto1[],
         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 sto_h = iStochastic(symbol,0,Kperiod,Dperiod,slowing,ma_method,price_field);
         ArraySetAsSeries(sto0,true);
         ArraySetAsSeries(sto1,true);
         CopyBuffer(sto_h, 0, 0, count, sto0);  // 复制指标的第一个值
         CopyBuffer(sto_h, 1, 0, count, sto1);  // 复制指标的第二个值
         IndicatorRelease(sto_h);
        }

  };

脚本:

#include <myClass/testClass.mqh>

int OnStart()
  {
   StoClass sj();
   double sto0[], sto1[];
   
   sj.Stochastic(sto0,sto1,5,Symbol(),0,5,3,3,MODE_SMA,STO_LOWHIGH);
   double sto0_1= sto0[1];
   double sto1_1= sto1[1];
   Print(sto0_1);
   Print(sto1_1);

   return(1);
  }

八、调用自定义指标AD

int OnStart()
  {
   int cus_h;
   
   // 如果使用自定义指标的默认参数,可省略
   // 指标名字先从本程序目录下搜索,再从Indicators下搜索。
   cus_h = iCustom(Symbol(),PERIOD_CURRENT,"Examples\\AD",VOLUME_TICK);
   
   double cus[];
   ArraySetAsSeries(cus, true);
   CopyBuffer(cus_h,0,0,5,cus);
   Print(cus[1]);
   Print(cus[2]);

   return(1);
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值