MQL4关键函数学习

一 如何抓取价格数据
1 如何获得本货币对的买价、卖价
double ask = Ask; // Ask是关键字,表示本货币对买价;
double bid = Bid; // Bid是关键字,表示本货币对卖价;

 

2 如何获得任意货币对的买价、卖价
double MarketInfo(string symbol, int type);
MarketInfo("EURUSD", MODE_ASK); // 获得欧元的买价
MarketInfo("EURUSD", MODE_BID); // 获得欧元的卖价

 

3 如何获得本货币对,本时间周期,任意K线的开盘价、收盘价、最高价、最低价
double Open[]; // 开盘价
double Close[]; // 收盘价
double High[]; // 最高价
double Low[]; // 最低价
// 序号从最后一根K线开始按照0、1、2编号。

 

4 如何获取任意货币对,任意时间周期,任意K线的开盘价、收盘价、最高价、最低价
double iOpen(string symbol, int timeframe, int shift)
double iClose(string symbol, int timeframe, int shift)
double iHigh(string symbol, int timeframe, int shift)
double iLow(string symbol, int timeframe, int shift)
// symbol,货币对名称;
// timeframe,时间周期;
// shift,K线序号;

 

二 如何调用指标数据
1 调用MT4自带指标
直接调用函数字典“Technical indicators”里面系统自带的指标函数即可。
比如均线:double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift) 计算移动平均指标并返回它的值。
参数:
symbol    计算指标数据上的货币对名称。NULL表示当前货币对。
timeframe    时间周期。可以时间周期列举任意值。0表示当前图表的时间周期。
period    平均周期计算。
ma_shift    MA转移。指标线垂直与图表的时间周期。
ma_method    MA方法。它可以是其中任意 滑动平均值列举值。
applied_price    应用的价格。它可以是应用价格列举的任意值。
shift    K线索引序列(最后一根为0)。

KD指标:iStochastic;
布林指标:iBands;
MACD指标:iMacd;

 

2 调用自定义指标或者第三方指标
保证自定义指标*.ex4已经放入安装目录expertsindicators目录。
double iCustom(string symbol, int timeframe, string name, ..., int mode, int shift) 计算指定的客户指标并且退回它的值。
参数:
symbol    计算指标数据上的货币对名称。NULL表示当前货币对。
timeframe    时间周期。 可以时间周期列举任意值. 0表示当前图表的时间周期。
name    客户指标完成程序名称。
...    参量设置(如果需要)。通过的参量和他们的顺序必须与desclaration命令和客户指标的外部可变物的种类对应。
mode    索引行。 从0到7并且必须对应以其中一个使用的索引的 SetIndexBuffer 函数。打开数据窗口可以看到画线的列表,从0开始。
shift    K线索引序列(最后一根为0)。

 

三 如何调用下单、操作订单函数
1 如何下市价单及挂单

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, void comment, void magic, void

expiration, void arrow_color)
参数:
symbol    交易货币对。
cmd    下单类型。
volume    下单手数。
price    开仓价格。
slippage    最大允许滑点数。
stoploss    止损价格。
takeprofit    止盈价格。
comment    订单注释。
magic    订单指定码。可以作为用户指定识别码使用。
expiration    订单有效时间(只限挂单)(不指定时间输入0)。
arrow_color    图表上箭头颜色。

下单类型:
OP_BUY 0 买仓
OP_SELL 1 卖仓
OP_BUYLIMIT 2 买挂单交易 (低价买入,常规的。)
OP_SELLLIMIT 3 卖挂单交易 (高价卖出,常规的。)
OP_BUYSTOP 4 买停挂单交易(高价买入)
OP_SELLSTOP 5 卖停挂单交易 (低价卖出)

示例:
// 市价买入
int ticket;
ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, 0, "my_buy", 1001, 0, Red);
if(ticket < 0) {
    Print("OrderSend 失败错误 #", GetLastError());
    return(0);
}
// 市价卖出
int ticket;
ticket = OrderSend(Symbol(), OP_SELL, 1, Bid, 3, 0, 0, "my_sell", 1001, 0, Green);
if(ticket < 0) {
    Print("OrderSend 失败错误 #", GetLastError());
    return(0);
}

 

2 如何调用订单函数
bool OrderSelect(int index, int select, void pool) 函数选择定单。如果函数成功,返回的值为TRUE。如果函数失败,返回的值为FALSE。
参数:
index    定单索引(订单序列或订单编号)。
select    选定模式。可以为以下的任意值: SELECT_BY_POS(按照序列)、SELECT_BY_TICKET(按照订单编号)。
pool    可选择定单索引。当选择SELECT_BY_POS参量时使用。可以为以下的任意值: MODE_TRADES (default)- 来自交易的定单(开单和挂单),MODE_HISTORY - 来自历史的定

单(平仓和取消定单)。

 

3 如何修改市价单和挂单的止损、止盈,以及如何修改挂单的价格
bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, void arrow_color) 对于先前的开仓或挂单进行特性修改。如果

函数成功,返回的值为 TRUE。如果函数失败,返回的值为FALSE。
参数:
ticket    定单编号。
price    新的挂单价格,不想修改就输入原先的价格。
stoploss    新止损价格,不想修改就输入原先的价格。
takeprofit    新盈利价格,不想修改就输入原先的价格。
expiration    新挂单有效时间。
arrow_color    图表中标价挂单箭头的颜色。

 

4 如何市价平仓
bool OrderClose( int ticket, double lots, double price, int slippage, void Color) 对定单进行平仓操作。如果函数成功,返回的值是真实的。如果函数失败,返回的值

是假的。
参数:
ticket    订单编号。
lots    平仓的手数。
price    平仓的价格。
slippage    最大允许滑点数。
Color    图表中平仓箭头的标记颜色。

注意:OrdersTotal()函数获取的是所有的订单包括不同品种跟未成交的挂单统统包括在内;
// 全部平仓
int cnt, total;
total = OrdersTotal();
for(cnt=total-1; cnt>=0; cnt--) {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderType()==OP_SELL) {
        OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
    }
    if(OrderType()==OP_BUY) {
        OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
    }
}

 

5 如何删除挂单
bool OrderDelete(int ticket, void Color) 删除先前打开挂单。成功返回true,失败返回false。

// 删除所有挂单
int total = OrdersTotal();
for(int i=total-1; i>=0; i--) {
    OrderSelect(i, SELECT_BY_POS);
    int type   = OrderType();
    bool result = false;
    switch(type) {
      //Close pending orders
      case OP_BUYLIMIT  :
      case OP_BUYSTOP   :
      case OP_SELLLIMIT :
      case OP_SELLSTOP  : result = OrderDelete( OrderTicket() );
    }
   
    if(result == false) {
      Print("Order " + OrderTicket() + " failed to close. Error:" + GetLastError());
    }
}

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值