MQL4关键函数学习

来源:互联网 发布:零基础学算法 光盘 编辑:程序博客网 时间:2024/06/03 09:04
原文地址:MQL4关键函数学习作者:直挂云帆济沧海

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

 

2 如何获得任意货币对的买价、卖价
double MarketInfo(stringsymbol, 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线的开盘价、收盘价、最高价、最低价
doubleiOpen(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, intma_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, ..., intmode, 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, intselect, void pool) 函数选择定单。如果函数成功,返回的值为TRUE。如果函数失败,返回的值为FALSE。
参数:
index   定单索引(订单序列或订单编号)。
select    选定模式。可以为以下的任意值:SELECT_BY_POS(按照序列)、SELECT_BY_TICKET(按照订单编号)。
pool   可选择定单索引。当选择SELECT_BY_POS参量时使用。可以为以下的任意值: MODE_TRADES (default)-来自交易的定单(开单和挂单),MODE_HISTORY - 来自历史的定

单(平仓和取消定单)。

 

3 如何修改市价单和挂单的止损、止盈,以及如何修改挂单的价格
boolOrderModify( int ticket, double price, double stoploss, doubletakeprofit, 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, voidColor) 删除先前打开挂单。成功返回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 0