UID 2 积分 2874604 威望 1387331 布 龙e币 1487273 刀 在线时间 13155 小时 注册时间 2009-12-3 最后登录 2024-11-24
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());
}
}
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
期货论坛 - 版权/免责声明
1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易 。
2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html