MT4MT5外汇EA编程教程大全之交易函数word资料12页

合集下载

【MQL4】新手快速学会怎样编写外汇EA

【MQL4】新手快速学会怎样编写外汇EA

【MQL4】新手快速学会怎样编写外汇EA# 什么是MT4?我就当你了解什么是MT4了MT4就是META. TRADER 4# 什么是EA?我也当你了解什么是EA了EA 就是 Expert AdviserEA 就是智能交易系统智能教育系统就是:-软件自己判断下订单-软件自己判断提成利润-软件自己判断砍仓止输# 什么是速成班?就是你在很短很快的时间内就可以学会如何编写EA 是的,快则8个学习小时慢则24个学习小时# 什么叫“易学难精”?就是你很快的就上手,难在成为厉害的高手。

这需要时间慢慢的去研究编写。

久而久之你就可以是EA编写高手了。

第一课::了解EA的形式* 以下就是EA的编写形式//#property copyright "外汇联盟 QQ群144033"#property link ""//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init(){//----//----return(0);}//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit(){//----//----return(0);}//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start(){//----//----return(0);}//+------------------------------------------------------------------+#property copyright "外汇联盟 QQ群144033"#property link ""写与不写都无所谓我们也不用理他* //+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init(){//----//以后可能有用到//----return(0);}//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit(){//----//以后可能有用到//----return(0);}这两个很少用到。

MT4函数

MT4函数

Timeseries access时间序列图表数据任何可见货币对/时间周期的价格数据的一组函数。

如果请求数据(货币对名称/时间周期不同于当前图表)来自其他图表,这种情况可能使相应的图表不能在客户端内打开,并且需要从服务器上请求数据。

这种情况下,错误 ERR_HISTORY_WILL_UPDATED (4066 - 请求历史数据并刷新)将被放置于last_error变量中,并且可以重新请求(查看ArrayCopySeries()范例)。

在测试中,相同货币对但不同时间周期的价格价位被塑造(除成交量外)。

其他货币对的价格数据不被塑造。

这些情况下,在时间数组的柱总数被塑造。

iBars柱的数量int iBars( string symbol, int timeframe)在指定的图表内返回柱的数量。

对于当前图表柱总量的信息在预定义的变量中命名为Bars。

参量:symbol - 需应用到计算指标的货币对数据 NULL 意味当前货币对名称。

timeframe - 时间周期。

可以是时间周期列举的任意值。

0 意味着当前图表的时间周期。

示例:Print("在货币对'EUROUSD'带有PERIOD_H1 柱数",iBars("EUROUSD",PERIOD_H1));iBarShift开始时间的柱int iBarShift( string symbol, int timeframe, datetime time, void exact)搜索柱开始的时间。

函数返回指定开始时间的柱。

如果柱的指定开始时间是省缺值,函数将返回-1或最近的柱exact。

参量:symbol - 需应用到计算指标的货币对数据 NULL 意味当前货币对名称。

timeframe - 时间周期。

可以是时间周期列举的任意值。

0 意味着当前图表的时间周期。

time - 查找值 (柱的开始时间)。

exact - 未发现柱的返回模式。

mt4交易代码教案资料

mt4交易代码教案资料

m t4交易代码Ord erTypeint OrderType( )对于当前选择定单返回定单类型。

可以是以下的任意值:OP_BUY -买进,OP_SELL - 卖出,OP_BUYLIMIT - 挂单买入限定,OP_BUYSTOP - 挂单停止限定,OP_SELLLIMIT - 挂单卖出限定,OP_SELLSTOP - 挂单停止限定。

注解: 定单必须由OrderSelect()函数选择。

示例:int order_type;if(OrderSelect(12, SELECT_BY_POS)==true){order_type=OrderType();// ...}elsePrint("OrderSelect() 返回错误 - ",GetLastError());Ord erSymbolstring OrderSymbol( )对于选择定单返回定单货币对值。

注解:定单必须用OrderSelect()函数提前选定。

示例:if(OrderSelect(12, SELECT_BY_POS)==true)Print("定单 #货币对", OrderTicket(), " is ", OrderSymbol());elsePrint("OrderSelect 失败错误代码是",GetLastError());Ord ersTotalint OrdersTotal( )返回市场和挂单的总数示例:int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");if(handle<0) return(0);// 写标题FileWrite(handle,"#","开价格","买入时间","货币对","手数");int total=OrdersTotal();// 编写定单命令for(int pos=0;pos<total;pos++){if(OrderSelect(pos,SELECT_BY_POS)==false) continue;FileWrite(handle,OrderTicket(),OrderOpenPrice(),OrderOpenTime(),OrderSymbol(), OrderLots());}FileClose(handle);OrderSend开仓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 - 交易货币对。

外汇MT4_EA智能系统MQ4编写详细举例

外汇MT4_EA智能系统MQ4编写详细举例

创建一简易的人工智能系统举例说明让我们将MACD指标同获利能力、支撑移动止损位以及操作安全等因素结合起来考虑以创建人工智能系统。

下面的例子是开立和控制一个单独的头寸。

<BR><BR>交易原则:<BR><BR>. 做多(买入)信号——即当MACD 指针是在0轴在以下,为向上的趋势并与向下的信号线相交(金叉) <BR><BR>. 做空(卖出) 信号——即当MACD 指针是在0轴以上,为向下趋势并与向上的信号线相交(死叉) <BR><BR>. 多头平仓信号——即执行限价平仓指令或移动止损指令以获得利润或者在MACD指针与信号线相交(MACD指针在0轴以上且为向下趋势并与向上趋势的信号线相交)时平仓 <BR><BR>. 空头平仓信号——即执行限价平仓指令或移动止损指令以获得利润或者在MACD指针与信号线相交(MACD指针在0轴以下且为向上趋势并与向下趋势的信号线相交)时平仓 <BR><BR>重要提示: <BR><BR> 在我们分析MACD指标时,为了排除MACD指示中一些并不重要的变化情况(即图表中的细微“小丘”),下面我们另外引荐一种控制“小丘”大小的方法: <BR><BR>指示范围至少为5个最小单位(5点,即USD/CHF=0.0005,USD/JPY=0.05) <BR><BR><BR><BR>第一步:撰写人工智能系统说明 <BR><BR><BR>将鼠标指在导航窗口的人工智能系统,点击鼠标右键在弹出的菜单中CREATE A NEW EXPERT(创建一个智能系统)命令. 正在初始化的WISARD OF EXPERT ADVISOR 会问你是否要输入数据.在弹出的窗口中你得写下NAME名字(人工智能系统的名字) 、AUTHOR作者、与你的网址链接、须知—人工智能系统的测试样本.你也可以设定你想要的Lots(交易单位), Stop Loss(止损点), Take Profit(平仓) 和 Trailing Stop(移动止损)的默认值. <BR><BR><BR><BR>第二步:创立程序的初步结构 <BR><BR>测试系统的代码仅仅为几页纸,即使是这几页纸仍然是难以理解的,特别是在我们这些不是专业的程序员的眼里是非常难的.不然,我们也不必写下这段说明,不是吗? <BR><BR>为了了解标准的人工智能系统的结构,我们来看一下下面的解释: <BR><BR>1.初始资料检查 <BR><BR>.检查图表,图表上棍的数量 <BR><BR>.检查外部变数值:LOTS,S/L,T/P,T/S <BR><BR>2.设置为快速数据存取的内部变量 <BR><BR>3检查交易终端—是否有空间?如果有,然后 <BR><BR>.检查账户中的可用资金 <BR><BR>.是否可以做多(买入) <BR><BR>.建仓买入和平仓 <BR><BR>.是否可以做空(卖出) <BR><BR>.建仓卖出和平仓 <BR><BR>4. 定期控制已开立的头寸<BR><BR>..若是多头合约 <BR><BR> .是否要平仓 <BR><BR>.是否要重新设定移动止损点 <BR><BR>..若是空头合约 <BR><BR>.是否要平仓 <BR><BR>.是否要重新设定移动止损点 <BR><BR>这是相对简单的样板,仅仅只有4个主要单元. <BR><BR>现在我们来试着逐渐将结构表中的每一部分的代码做出来: <BR><BR>1.初始资料检查 <BR><BR>这一块的数据通常是经过稍稍修改后从一个系统移至另一系统的—这实际上是一单元检查. <BR><BR>If Bars&lt;200 Then Exit; // the chart has less than 200 bars - exit <BR><BR>If TakeProfit&lt;10 Then Exit; // wrong takeprofit parameters 收益小于10点退出<BR><BR>2设置为快速数据存取的内部变量 <BR><BR>在程序代码中,有的是经常需要存取的指示值和操做的计算值.为了简化译码和加速存取,数据最初便在内部变数中嵌套进去<BR><BR>.MacdCurrent=iMACD(12,26,9,MODE_MAIN,0); // MACD value on the current bar <BR><BR>MacdPrevious=iMACD(12,26,9,MODE_MAIN,1); // MACD value on the previous bar <BR><BR>SignalCurrent=iMACD(12,26,9,MODE_SIGNAL,0); // Signal Line value on the current bar <BR><BR>SignalPrevious=iMACD(12,26,9,MODE_SIGNAL,1);//Signal Line value on the previous bar<BR><BR>MaCurrent=iMA(MATrendPeriod,MODE_EMA,0); // moving average value on the current bar <BR><BR>MaPrevious=iMA(MATrendPeriod,MODE_EMA,1); // moving average value on the previous bar <BR><BR>现在,我们以在程序中简单的写入字符MacdCurrent代替晦涩难懂的iMACD(12,26,9,MODE_MAIN,0).所有的人工智能系统中的变量都依据MQL II语言进行基本的解释. <BR><BR>var: MacdCurrent(0), MacdPrevious(0), SignalCurrent(0), SignalPrevious(0); <BR><BR>var: MaCurrent(0), MaPrevious(0); <BR><BR>MQL II语言还另外推出一种的用户自定义变量,它可以在程序外设定而无须任何系统程序下的源程序正文的参考.这个特点使程序更具灵活性MATrendPeriod变量就是一个这种类型的用户自定义变量,因此,我们在程序的开头加入这段说明. <BR><BR>defines:MATrendPeriod(56); <BR><BR ><BR ><P>3. 检查交易终端是否有空间?如果有,然后 <BR><BR>在我们的人工智能系统中,我们只能使用现时头寸而不能操作延迟的买卖盘.为了安全起见,我们介绍一种核对过去交易终端已下买卖盘的程序. <BR><BR>If TotalTrades&lt;1 then // no opened orders identified <BR><BR>{ <BR><BR>3.检查: 账户的可用资金……. 在分析市场状况之前最好先检查一下你的账户的资金情况, 以确保账户中有开立头寸的资金. <BR><BR>If FreeMargin&lt;1000 then Exit; // no funds – exit <BR><BR><BR>. 是否可以做多(买入) <BR><BR> 买入的条件信号:MACD指标在0轴以下,为向上趋势且与向下趋势的信号线相交。

MT4MT5外汇EA编程教程大全之交易函数word资料12页

MT4MT5外汇EA编程教程大全之交易函数word资料12页

MT4MT5外汇EA编程教程大全之交易函数word资料12页MT4 MT5外汇EA编程教程大全之交易函数(三)从自定义指标中不能调用OrderSend(), OrderClose, OrderCloseBy, OrderDelete和OrderModify交易函数。

OrderCloseOrderCloseByOrderClosePriceOrderCloseTimeOrderCommentOrderCommissionOrderDeleteOrderExpirationOrderLotsOrderMagicNumberOrderModifyOrderOpenPriceOrderOpenTimeOrderPrintOrderProfitOrderSelectOrderSendOrdersHistoryT otalOrderStopLossOrdersTotalOrderSwapOrderSymbolOrderTakeProfitOrderTicketOrderTypebool OrderClose( int ticket, double lots, double price, int slippage, void Color)对定单进行平仓操作。

如果函数成功,返回的值是真实的。

如果函数失败,返回的值是假的。

获得详细错误信息,请查看GetLastError()函数。

参量:ticket - 定单编号。

lots - 手数。

price - 收盘价格。

slippage - 最高划点数。

Color - 图表中标记颜色。

如果参量丢失,CLR_NONE值将不会在图表中画出。

示例:if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75){OrderClose(order_id,1,Ask,3,Red);return(0);}bool OrderCloseBy( int ticket, int opposite, void Color)用相反定单对打开仓位进行平仓操作。

MT4编程入门教程

MT4编程入门教程

MT4编程入门教程MT4是一种广泛使用的外汇交易平台,它提供了强大的交易功能和高度可定制性。

为了使交易者能够根据自己的需求和策略进行自动化交易,MT4还提供了MQL4编程语言。

本教程将介绍MT4编程的基础知识和入门指南。

第一部分:MQL4简介(200字)MQL4是MetaQuotes Language 4的缩写,是MT4交易平台上使用的编程语言。

它基于C语言,并且具有简单易学的特点。

使用MQL4,交易者可以编写自定义指标、脚本和外汇机器人,并将它们应用于MT4交易平台。

第二部分:MT4编程环境的设置(200字)第三部分:MQL4基本语法(400字)MQL4编程语言具有与C语言类似的语法结构。

以下是MQL4的基本语法要点:1.注释:使用“//”表示单行注释,使用“/**/”表示多行注释。

2. 变量:使用关键字“int”、“double”、“bool”和“string”定义整型、双精度浮点数、布尔和字符串变量。

3. 函数:使用关键字“void”或返回类型定义函数,例如“int”、“double”和“bool”。

函数可以包含参数和返回值。

4. 条件语句:使用关键字“if”、“else if”和“else”定义条件语句。

例如:if (条件)//执行一些代码} else if (条件)//执行一些其他代码} else//执行默认代码}```5. 循环:使用关键字“for”和“while”定义循环语句。

例如:```for (初始化; 条件; 更新)//执行循环代码}```6.数组:使用方括号“[]”定义一维和多维数组。

例如:```int myArray[5]; // 定义一个包含5个元素的整型数组double myArray2D[3][3]; // 定义一个包含3行3列的二维数组第四部分:自定义指标和脚本(200字)在MT4中,使用MQL4编程语言可以创建自定义指标和脚本。

自定义指标是根据特定算法计算的技术指标,用于辅助交易决策。

外汇交易MT4编程入门:自定义函数

外汇交易MT4编程入门:自定义函数

外汇交易MT4编程入门:自定义函数自定义函数与数学函数在本质上是一致的例如:数学函数ft(x,y)=3x+2y (x,y为正整数) 写成程序语句就是:int ft(int x,int y){int temp;temp=3*x+2*y;return(temp);}一、和自定义变量一样,自定义函数在使用前,也必须先设立,以定义其类型、名称、参数和运算语句。

函数类型、名称、参数位于函数头部(参数间以逗号分隔),大括号中的是运算语句,也就是函数体部分。

return语句为函数结束语句,return后面括号中的值为函数返回值,即函数运算结果。

上例中,int为函数类型,表示该函数的返回值(运算结果)是整数;(x,y)为参数,由于自定义变量使用之前都必须先创建,所以要加上类型定义词intft为函数名,有了函数名,我们就可以在别处用ft(2,1)的形式来调用此函数;函数体部分有三句:第一句,定义一个整形变量temp第二句,计算temp的值第三句,函数结束,返回调用点,以temp的值作为本函数返回值。

此函数也可以简写为:int ft(int x,int y) {return(3*x+2*y);}二、函数类型与类型符函数类型就是函数返回值(运算结果)的类型,与自定义变量类型差不多有整型(int)、双精度型(double)、字符串型(string)、逻辑型(bool)等,还有一种函数是以函数运行为目的,运行结束后不需要返回值也没有返回值的,则函数类型可以写成void(无值型)三、函数中如果定义了自定义变量,那么此变量仅在本函数内部存在,函数运行结束时,自定义变量也就自动注销。

上例中,有x、y、temp三个自定义变量,在函数运行时创建,在函数运行结束时自动消失,仅在函数内部有效,与函数外部无关。

四、函数的调用函数调用非常简单,只要函数名正确、参数个数一致、类型相同就能正确调用如我们前面创建了ft(x,y)函数,则别处我们可以用ft(4,5)等样式来调用ft(x,y)函数求值。

MT4MT5外汇EA编程教程大全之交易函数

MT4MT5外汇EA编程教程大全之交易函数

MT4MT5外汇EA编程教程大全之交易函数一、交易函数介绍1、 OrderSend(函数OrderSend(函数是EA程序中用于下达交易的核心函数。

它的作用是以市价或限价发出市场位或限价位的指令。

2、 OrderModify(函数OrderModify(函数的作用是修改处于有效状态的交易指令。

3、 OrderClose(函数OrderClose(函数是核心函数,它的作用是把有效的交易指令平仓,它只能关闭有效的市价或限价位交易指令,而不能关闭已经结算的位置交易指令。

4、 OrderDelete(函数OrderDelete(函数的作用是从交易账户中删除尚未执行的交易指令。

它只能删除尚未在市场中执行且处于有效状态的市价或限价位的指令,而不能删除已经在市场中执行的指令。

5、 OrderSelect(函数OrderSelect(函数是一个非常重要的函数,它的作用是从交易账户中调取需要的交易指令。

6、 OrderPrint(函数OrderPrint(函数的作用是将交易账户中的交易指令在终端的列表窗口中显示出来,可以打印出位于市场中的交易指令以及所有的历史交易指令的详细信息。

7、 OrderProfit(函数OrderProfit(函数的作用是返回一个有效交易订单的实际盈利金额。

8、 OrdersTotal(函数OrdersTotal(函数的作用是返回交易账户中当前有效的交易指令总数,该函数通常与OrderStep(函数配合使用,可以快速统计出交易账户当前有效的交易指令总数。

二、OrderSend(函数详解1、函数功能OrderSend(函数是EA程序中用于发出市场位或限价位指令的核心函数,它的作用是以市价或限价发出市场位或限价位的指令。

MT4-学习自己编写EA总结篇

MT4-学习自己编写EA总结篇
真假运算符 否定运算符(!),用来表示真假的反面的结果。 // 如果 a 不是真的 if(!a) Print("not 'a'"); 逻辑运算符或(||)用来表示两个表达式只要有一个成立即可。 示例: if(xl) Print("out of range"); 逻辑运算符和(&&)用来表示两个表达式要同时成立才行。 示例: if(p!=x && p>y) Print("true"); n++;
MT4-学习自己编写 EA 总结篇 学好智能交易系统(EA),让你的梦想从这里起飞
MT4外汇交易平台里给我们提供了一套非常完美的交易系统设计语言-MQL4,通过 MQL4语言可以设计出我们想要的 赚钱模式,一套完美的智能交易系统(EA),让我们躺在睡觉一样能赚钱的程序,iMT4论坛为我们提供了一个能实现 我们梦想的 MT4专业平台,让你的梦想从这里起飞。
Color 类型 颜色类型可以使用以下示例里的几种方式进行定义。
示例:
// symbol constants C'128,128,128' // gray C'0x00,0x00,0xFF' // blue // named color
3
MT4-学习自己编写 EA 总结篇
Red Yellow Black // integer-valued representation 0xFFFFFF // white 16777215 // white 0x008000 // green 32768 // green
int a = 'A'; int b = '$'; int c = '©'; // code 0xA9 int d = '\xAE'; // symbol code ®

mt4编程入门共44页文档

mt4编程入门共44页文档

MT4编程入门教程MT4编程入门教程目录MT4编程入门1:MT4自定义指标的基本操作MT4编程入门2:指标源码中的常用符号说明MT4编程入门3:自定义变量MT4编程入门4:自定义函数MT4编程入门5:自定义数组MT4编程入门6:市场数据取值MT4编程入门7:判断语句MT4编程入门8:循环MT4编程入门9:MT4自定义指标的结构MT4编程入门10:画一条指标线MT4编程入门11:MT4的报警Fxsol环亚汇市、Alpari艾福瑞客户每标准手返5~6美金。

详询QQMT4编程入门1:MT4自定义指标的基本操作MT4自定义指标的保存目录、指标编缉器与指标调用一、MT4自定义指标保存在C:\Program Files\MetaTrader 4\experts\indicators 这个目录中,该目录中主要有二种类型的文件,一种是mq4文件,这是MT4自定义指标的源码文件,是一种高级语言文件,可以人工编写修改,机器不能直接执行,但能在MT4启动时自动编译为ex4可执行文件。

另一种就是ex4文件,这是MT4自定义指标的可执行文件,由mq4文件编译得到。

mq4文件必须编译为ex4文件才能被MT4执行。

但ex4文件是机器码文件,人工不可修改另外还有一个文件是mqlcache.dat,它用来保存目录中的文件信息,如果MT4无法自动编译,只要删除此文件即可解决问题mq4文件编译为ex4可执行文件有两种方法:1、MT4启动时,会自动把此目录中的mq4文件编译为ex4文件。

2、用MQ语言编辑器打开mq4文件,点一下“编写”按钮,即可生成ex4文件二、下载保存mq4文件、ex4文件在论坛上我们经常看到有mq4文件、ex4文件可供下载,我们只要把它们保存到C:\Program Files\MetaTrader 4\experts\indicators这个目录,也就是下面这个目录中,就可以了。

如果下载的是ex4文件,那可以直接调用;如果是mq4文件,则需要重启动MT4,让系统自动编译生成ex4可执行文件。

MT4MT5外汇EA编程教程大全之交易函数-10页精选文档

MT4MT5外汇EA编程教程大全之交易函数-10页精选文档

MT4 MT5外汇EA编程教程大全之交易函数(三)从自定义指标中不能调用OrderSend(), OrderClose, OrderCloseBy, OrderDelete和OrderModify交易函数。

OrderCloseOrderCloseByOrderClosePriceOrderCloseTimeOrderCommentOrderCommissionOrderDeleteOrderExpirationOrderLotsOrderMagicNumberOrderModifyOrderOpenPriceOrderOpenTimeOrderPrintOrderProfitOrderSelectOrderSendOrdersHistoryTotalOrderStopLossOrdersTotalOrderSwapOrderSymbolOrderTakeProfitOrderTicketOrderTypebool OrderClose( int ticket, double lots, double price, int slippage, void Color)对定单进行平仓操作。

如果函数成功,返回的值是真实的。

如果函数失败,返回的值是假的。

获得详细错误信息,请查看GetLastError()函数。

参量:ticket - 定单编号。

lots - 手数。

price - 收盘价格。

slippage - 最高划点数。

Color - 图表中标记颜色。

如果参量丢失,CLR_NONE值将不会在图表中画出。

示例:if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75){OrderClose(order_id,1,Ask,3,Red);return(0);bool OrderCloseBy( int ticket, int opposite, void Color)用相反定单对打开仓位进行平仓操作。

MT4MT5外汇EA编程教程大全之数组函数

MT4MT5外汇EA编程教程大全之数组函数

MT4MT5外汇EA编程教程大全之数组函数数组函数是MetaTrader 4(MT4)和MetaTrader 5(MT5)外汇交易平台中非常重要的一部分。

在编写外汇自动交易程序(EA)时,数组函数能帮助您进行数据的存储、处理和分析。

本篇教程将介绍一些常用的数组函数及其用法。

1. ArrayCopy:这个函数用于将一个数组的数据复制到另一个数组。

它有四个参数,分别是源数组、目标数组、源数组起始位置和目标数组起始位置。

下面是一个例子:```double sourceArray[10];double targetArray[10];ArrayCopy(sourceArray, targetArray, 0, 0);```2. ArrayInitialize:这个函数用于给数组的所有元素赋予一个初始值。

它有两个参数,分别是目标数组和初始值。

下面是一个例子:```double array[10];ArrayInitialize(array, 0);```3. ArrayRange:这个函数用于获取数组的一个子范围。

它有三个参数,分别是源数组、起始索引和结束索引。

下面是一个例子:```double sourceArray[10];double targetArray[5];ArrayRange(sourceArray, 0, 4, targetArray);```4. ArraySetAsSeries:这个函数用于将数组从头到尾翻转。

它有一个参数,即目标数组。

下面是一个例子:```double array[10];ArraySetAsSeries(array, true);```5. ArraySize:这个函数用于获取数组的长度。

它只有一个参数,即目标数组。

下面是一个例子:```double array[10];int size = ArraySize(array);```6. CopyBuffer:这个函数用于将指标缓冲区的数据复制到一个数组中。

MT4MT5外汇EA编程教程大全之日期时间函数

MT4MT5外汇EA编程教程大全之日期时间函数

MT4 MT5外汇EA编程教程大全之日期时间函数(四)表示时间类型数据的一组函数(从1970年1月1日午夜开始以秒为单位计算)。

DayDayOfWeekDayOfYearHourMinuteMonthSecondsTimeCurrentTimeDayTimeDayOfWeekTimeDayOfYearTimeHourTimeLocalTimeMinuteTimeMonthTimeSecondsTimeYearYearint Day( )返回这个月的当天,最后一次访问服务器的时间。

注解: 在测试中, 时间格式为最后设定的服务器模式。

示例:if(Day()<5) return(0);int DayOfWeek( )返回这周的星期数,(0-星期天,1,2,3,4,5,6 以此类推)来自最后已知的服务器上的时间。

注解: 在测试中, 时间格式为最后设置的服务器模式。

示例:// 假期不工作if(DayOfWeek()==0 || DayOfWeek()==6) return(0);int DayOfYear( )返回年的当天(1 代表1月1 日.., 365(6) 就是12月31 日),最后访问服务器的时间。

注解: 在测试中, 时间格式为最后已知的服务器模式。

示例:if(DayOfYear()==245)return(true);int Hour( )在程序开始以前的片刻,返回小时数(0,1,2,..23) 最后访问的服务器时间(在程序执行之内的时期这个值不会改变) 。

注解: 在测试中, 时间格式为最后设置的服务器模式。

示例:bool is_siesta=false;if(Hour()>=12 || Hour()<17)is_siesta=true;int Minute( )在程序开始以前的片刻,返回当前的分钟(0,1,2,..59)最后访问的服务器时间(在程序执行期间这个值不会改变) 。

[原创]EA测试(MT4平台智能交易系统图文教程)

[原创]EA测试(MT4平台智能交易系统图文教程)

怎么样,有点“蠢蠢欲动”了吧,敬请期待下一个PPT: 《MT4编程入门》
附录:几个数学概念
虽然汇市千变万化,但是任然有规律可循。我们需要从历史数据中寻 找规律,面对庞大的数据,唯有统计数学的理论能使我们理清头绪。 我们经常使用的技术指标其实就是统计数学的实际应用。 我们不能保证自己每单都赢,但能确保长期从汇市获利。 了解一点统计数学的概念,对评判EA、系统测试都有极大的帮助。下 面列举了4个数学概念,并尽量给予简单的介绍,起到一个抛砖引玉 的作用。 1. 2. 3. 4. 过适 k-折交叉验证 赢利与最大资金回撤比 人工神经网络
进入测试界面
1、选择一个EA加载到图表 2、点击工具栏的“智能交易”停止智能交易 3、按F6,打开测试窗口
测试窗口
历史数据准备1
从统计数学的角度来评判MT4提供的数据,基本不符合要求。毕竟我们不是数学专家,不需要精准的结果,所以采用我推荐的方法就够用了。
点击MN按 钮,等待 一会儿, 将数据图 表拉到最 左边,我 们会看到 月线数据 从1988年 12月开始
新增测试报告标签
结果
“结果”标签中显示了测试的每个交易记录
净值图
“净值图”标签中显示了测试的资金变化过程
报告
“报告”标签中显示EA在指定时间段内的全部财务情况
报告中各项指标说明1
经过测试的柱数(Bars in test):以模型为基础,显示历史的深度。 用于复盘的即时价数量(Ticks modelled):显示模型次序的大小。 每一个记录的 次序代表柱的当前或另一时刻状态 (OHLCV)。 不同柱的状态取决于时间范围,模 型方法,和从较小时间段内的柱的历史数据。 复盘模型的质量(Modelling quality):按照以下的公式进行计算: ModellingQuality = ((0.25*(StartGen-StartBar) + 0.5 *(StartGenM1-StartGen) + 0.9 *(HistoryTotal-StartGenM1)) / (HistoryTotal-StartBar))*100%; 其中: HistoryTotal - 在历史中的总数额; StartBar - 开始测试柱的数字。模型开始于最小的第101个柱或者测试水平 初始日期相关的柱; StartGen - 在最近的时间范围内开始测试柱的数字; StartGenM1 - 在原有分钟内开始测试柱的数字; 另外: 对于最近时间范围数据库模型的开始和最近时间范围数据模型的开始存在 重量系数0. 25的区别; 对于最近时间范围数据库模型的开始和最近时间范围数据模型的开始在 原有分钟内存在重量系数0. 5的区别; 在原有时间上模型的开始和历史数据的型 粉色- 完全的不规则碎片模型 H4模型 H1模型 M30模型 M15模型 M5模型 M1模型

MT4自带的EA详解(MA和MACD)

MT4自带的EA详解(MA和MACD)
//---for(int i=0;i<OrdersTotal();i++) //计次循环(i=0 至订单数目,i=i+1)-循环检测当前的订单队列 { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; //如果 没有本系统交易的仓单类型,则跳出循环
一个成交价,则向下继续运行)
//---- get Moving Average –获取均线数值 ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //获取当前以收盘价为基准计算出的均线数值
iMA(NULL,0,12,6,MOD_SMA,PRICE_CLOSE,0)
extern double Lots extern double MaximumRisk extern double DecreaseFactor extern double MovingPeriod extern double MovingShift
= 0.1; //每单的交易量 = 0.02;//本系统最大风险系数,即可以动用总资金的 2% = 3; //下跌因素个数 = 12; //均线的计算周期=12 根 K 线; = 6; //均线在 K 线图中向右显示的偏移量=6 根 K 线;
if(Volume[0]>1) return;//如果当前 K 线的成交价次数>1 时,则返回 //---- get Moving Average //获取均线数值 ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); //获取当前以收盘价为基准计算出的均线数值

MT4 MT5外汇EA编程教程大全之数组函数

MT4 MT5外汇EA编程教程大全之数组函数

MT4 MT5外汇EA编程教程大全之数组函数(五)使用数组的一组函数。

数组的最大维数为四维。

每个维数被索引编为从0 至维度-1。

事实上,第一维数组的50 个,在调用时第一个数组显示为[0], 最后一个数组显示为[49]。

使用这些函数(除那些改变定量和定性的数组外)能够预定义时间系列Time[], Open[], High[], Low[], Close[], Volume[]ArrayBsearchArrayCopyArrayCopyRatesArrayCopySeriesArrayDimensionArrayGetAsSeriesArrayInitializeArrayIsSeriesArrayMaximumArrayMinimumArrayRangeArrayResizeArraySetAsSeriesArraySizeArraySortint ArrayBsearch( double array[], double value, void count, void start, void direction)如果没有发现事件,值会返回到第一个维度的数组或者最近的一个数组。

此函数不能用在字符型或连续数字的数组上(除打开柱的连续数组)。

注解: 双元查找只能够存储数。

存储数字数组使用ArraySort() 函数。

参量:array[] - 需要搜索的数组.value - 将要搜索的值count - 搜索的数量,默认搜索所有的数组.start - 搜索的开始点,默认从头开始.direction - 搜索的方向:MODE_ASCEND 顺序搜索,MODE_DESCEND 倒序搜索.示例:datetime daytimes[];int shift=10,dayshift;// 全部 Time[] 数组被排列在后面的形式ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PERIOD_D1);if(Time[shift]>=daytimes[0]) dayshift=0;else{dayshift=ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);if(Period()<PERIOD_D1) dayshift++;}Print(TimeToStr(Time[shift])," corresponds to ",dayshift," day bar opened at ", TimeToStr(daytimes[dayshift]));ArrayCopyint ArrayCopy( void dest[], object source[], void start_dest, void start_source, void count) 复制一个数组到另外一个数组。

MT4指标编程入门解析

MT4指标编程入门解析

MT4指标编程入门解析MetaTrader 4(MT4)是一种用于外汇和股票交易的流行交易平台,该平台允许用户使用各种技术指标来进行分析和预测市场趋势。

通过编写自定义指标,交易者可以利用MT4的强大功能来制定他们自己的交易策略。

本文将介绍如何编程MT4指标的基本知识和步骤。

在编写指标之前,您需要了解一些MT4指标编程的基本语法和函数。

MT4使用一种名为MQL4的专有编程语言来编写指标和自动化交易脚本。

MQL4类似于C语言,并且有许多内置函数和操作符可供使用。

在编写指标时,您需要熟悉以下一些常用函数和操作符:1.`iMA`:计算移动平均线的函数。

它接受多个参数,包括计算平均线的价格类型、计算平均线的周期等。

2.`iRSI`:计算相对强弱指标(RSI)的函数。

RSI用于测量市场超买和超卖的情况。

3.`iMACD`:计算移动平均收敛/发散指标(MACD)的函数。

MACD用于判断市场的趋势和方向。

4. `iBands`:计算布林带指标的函数。

布林带用于测量市场波动性。

此外,还有其他一些常用的函数和操作符,如数学函数(例如`MathMax`和`MathMin`)、条件语句(例如`if`和`else`)以及循环(例如`for`和`while`)。

一旦您熟悉了这些基本知识,就可以开始编写您自己的指标了。

下面是编写一个简单移动平均线指标的示例代码:```mql4#property indicator_chart_window#property indicator_buffers 1#property indicator_color1 Blueextern int period = 14;double ma_buffer[];void OnInitSetIndexBuffer(0, ma_buffer, INDICATOR_DATA);int start = prev_calculated > 0 ? prev_calculated - 1 : 0;for (int i = start; i < rates_total; i++)ma_buffer[i] = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_CLOSE, i);}```在这个示例中,我们定义了一个名为`ma_buffer`的浮点数数组,用于存储移动平均线的值。

MT4MT5外汇EA编程教程大全之日期时间函数

MT4MT5外汇EA编程教程大全之日期时间函数

MT4MT5外汇EA编程教程大全之日期时间函数1、Time函数Time函数用于获取当前服务器时间,即GMT时间,这是一个用于时间基衡的,与你的本地时间相差一个时差的时间。

Time函数的语法格式:返回值类型:long,即整数类型,以秒为单位Time函数实例://取得GMT时间long lGMTTime = Time(;2、TimeLocal函数TimeLocal函数用于取得当前本地时间。

TimeLocal函数的语法格式:TimeLocal()返回值类型:long,即整数类型,以秒为单位TimeLocal函数实例://取得本地时间long lLocalTime = TimeLocal(;3、TimeCurrent函数TimeCurrent函数用于取得当前的服务器时间或本地时间等,它可以获取的参数与该函数的返回值规格一样(可选参数TimeLocal(/TimeGMT(/TimeCurrent()。

TimeCurrent函数的语法格式:TimeCurrent([可选参数])返回值类型:long,即整数类型,以秒为单位TimeCurrent函数实例://取得当前时间long lCurrentTime = TimeCurrent(;4、TimeDay函数TimeDay函数用于取得当日的服务器时间,此时间是单经过的秒数,而不是从零点开始的秒数。

TimeDay函数的语法格式:TimeDay([可选参数])返回值类型:long,即整数类型,以秒为单位TimeDay函数实例://取得其中一日的当前时间long lNowTime = TimeDay(;5、TimeWeek函数TimeWeek函数可以取得当前服务器时间的星期几,以数字形式输出,星期一为1,星期日为7TimeWeek函数的语法格式:TimeWeek()返回值类型:int,以数字表示TimeWeek函数实例:。

MT4智能交易系统_编程手册知识讲解

MT4智能交易系统_编程手册知识讲解

点击这里查看如何添加、启动、测试智能交易系统软件。

智能交易系统软件是一个创新的交易工具,允许客户对自己的交易策略进行设定并进行测试。

还可以创建新的技术指标获取交易系统的逐步解释 - 反转条 - 点击这里。

MultiBank FX程序员MultiBank FX向那些想要对其交易策略进行自动化,但又不想学习智能交易系统程序语言客户提供程序服务。

欲知详情,请联系在线客服智能交易系统软件是用来对交易过程全程自动化,免除交易商连续对市场进行日常烦琐的监护。

许多专业交易商利用多层交易系统,对不同的市场和在不同的环境下进行操作。

通常他们在著名的分析软件包里对交易战略进行编写和测试,比如,MetaStock 和 TradeStation。

使用MultiBank Trader智能交易系统软件,招招领先,你可以把交易系统产生的信号和真实账户联系起来,这样连接以便于能追踪和管理你的某个时段的开仓部位,提交的订单和止损单。

什么是智能交易系统?它是一个用特殊的MetaQuotes 语言 4 (MQL 4)编写的自动交易系统(ATS),和特定的图表联系在一起。

智能交易系统不仅能通知交易商交易机会,而且还能自动执行交易账户上的交易,直接发送到交易服务器。

和许多的IT系统一样,智能交易系统系统支持历史数据战略测试,图表上表示的登入/登出点。

而且,智能交易系统的可执行码分别存储于源文件和加密的执行文件中-这种安排保证了交易商所使用的逻辑隐藏(如有必要的话),而不会泄密。

编写自己的智能交易系统软件也非常容易:尝试一下吧!不需要是专业编程高手,你只需要学会使用非常简单的语言-MQL 4语言。

即使用户不能自行编写智能交易系统规则,但是他需要熟悉近的编程技能,不过很可能不需一个小时他便掌握了这些规则并能编写程序。

无数的交易商为MetaStock 和 TradeStation软件开发了多种多样的交易战略。

其中多数均被翻译成MQL 4语言,这就使得用户可以把前期累计的经验并合到里面去。

MT4MT5外汇EA编程教程大全之常用函数.docx

MT4MT5外汇EA编程教程大全之常用函数.docx
53= P*2・(LastHigh* 2・Last Low);
Last Low = Open;
LastHigh = Open;
}
//—-
PBuffer = P
S1 Buffer =
R1 Buffer =
S2Buffer =
R2 Buff er =
S3Buffer =
R3 Buff er =
}
Volume
FleOose( handle);
}
Digits
int Digits
返回当前货币对的汇率<J澈位参见Market Inf o().
示例:
Print(DoubleToStr(aose[0],小数位));
High
double High[]
系列数组包含当前图表每个柱的最高价格。
系列数组元素被索引入倒序的定单,即从最后一个到第一个。.当前最后i柱在数组中 的索引为0。图表中的第一个柱的索引为Bars-1.
{
P= (LastHigh + Last Low + Close] i+1] )/3;
R1 = P*2・Last Low;
51= P*2・LastHigh;
R2 = P+ LastHigh-Last Low;
52= P・(LastHigh・Last Low);
R3 = P*2 4-LastHigh・Last Low* 2;
参见iOpen().
示例:
i=Bars・counted_bars・1;
while(i> = 0)
{
double high = High;
double low = Low;
double open = Open;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MT4 MT5外汇EA编程教程大全之交易函数(三)从自定义指标中不能调用OrderSend(), OrderClose, OrderCloseBy, OrderDelete和OrderModify交易函数。

OrderCloseOrderCloseByOrderClosePriceOrderCloseTimeOrderCommentOrderCommissionOrderDeleteOrderExpirationOrderLotsOrderMagicNumberOrderModifyOrderOpenPriceOrderOpenTimeOrderPrintOrderProfitOrderSelectOrderSendOrdersHistoryTotalOrderStopLossOrdersTotalOrderSwapOrderSymbolOrderTakeProfitOrderTicketOrderTypebool OrderClose( int ticket, double lots, double price, int slippage, void Color)对定单进行平仓操作。

如果函数成功,返回的值是真实的。

如果函数失败,返回的值是假的。

获得详细错误信息,请查看GetLastError()函数。

参量:ticket - 定单编号。

lots - 手数。

price - 收盘价格。

slippage - 最高划点数。

Color - 图表中标记颜色。

如果参量丢失,CLR_NONE值将不会在图表中画出。

示例:if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75){OrderClose(order_id,1,Ask,3,Red);return(0);}bool OrderCloseBy( int ticket, int opposite, void Color)用相反定单对打开仓位进行平仓操作。

如果函数成功,返回的值是真实的。

如果函数失败,返回的值是假的。

获得详细错误信息,请查看GetLastError()函数。

参量:ticket - 定单编号。

opposite - 相对定单编号Color - 图表中标记颜色。

如果参量丢失,CLR_NONE值将不会在图表中画出示例:if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75){OrderCloseBy(order_id,opposite_id);return(0);}double OrderClosePrice( )对于当前选择定单返回收盘价格。

注解:定单必须用OrderSelect()函数提前选定。

示例:if(OrderSelect(ticket,SELECT_BY_POS)==true)Print("对于定单 ",定单编号" = ",OrderClosePrice()的收盘价格);elsePrint("OrderSelect 失败错误代码是",GetLastError());datetime OrderCloseTime( )对于当前选择定单返回平仓时间。

如果定单时间不是0,所选定单会从账户历史重新尝试。

开仓和挂单交易平仓时间必须等于 0。

注解:定单必须用OrderSelect()函数提前选定。

示例:if(OrderSelect(10,SELECT_BY_POS,MODE_HISTORY)==true){datetime ctm=OrderOpenTime();if(ctm>0) Print("定单10 "开仓时间, ctm);ctm=OrderCloseTime();if(ctm>0) Print("定单 10 "平仓时间, ctm);}elsePrint("OrderSelect失败错误代码是",GetLastError());string OrderComment( )返回定单的注释。

注解:定单必须用OrderSelect()函数提前选定。

示例:string comment;if(OrderSelect(10,SELECT_BY_TICKET)==false){ Print("OrderSelect 失败错误代码是",GetLastError());return(0);}comment = OrderComment();// ...double OrderCommission( )返回定单的佣金数。

注解:定单必须用OrderSelect()函数提前选定。

示例:if(OrderSelect(10,SELECT_BY_POS)==true)Print("定单10 "佣金,OrderCommission());elsePrint("OrderSelect 失败错误代码是",GetLastError());bool OrderDelete( int ticket, void Color)删除先前打开挂单。

如果函数成功,返回的值是真实的。

如果函数失败,返回的值是假的。

获得详细错误信息,请查看GetLastError()函数。

参量:ticket - 定单编号。

Color - 图表中标记颜色。

如果参量丢失,CLR_NONE值将不会在图表中画出。

示例:if(Ask>var1){OrderDelete(order_ticket);return(0);}datetime OrderExpiration( )返回挂单的有效日期。

注解:定单必须用OrderSelect()函数提前选定。

示例:if(OrderSelect(10, SELECT_BY_TICKET)==true)Print("定单 #10 有效日期为",OrderExpiration());elsePrint("OrderSelect 返回的",GetLastError()错误);double OrderLots( )返回选定定单的手数。

注解:定单必须用OrderSelect()函数提前选定。

if(OrderSelect(10,SELECT_BY_POS)==true)Print("定单 10 "手数,OrderLots());elsePrint("OrderSelect 返回的 ",GetLastError()错误);int OrderMagicNumber( )返回选定订单的指定编号注解:定单必须用OrderSelect()函数提前选定。

示例:if(OrderSelect(10,SELECT_BY_POS)==true)Print("定单 10 "指定编号, OrderMagicNumber());elsePrint("OrderSelect 返回的 ",GetLastError()错误);bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, void arrow_color)对于先前的开仓或挂单进行特性修改。

如果函数成功,返回的值为TRUE。

如果函数失败,返回的值为FALSE。

获得详细的错误信息,查看GetLastError()函数。

注解: 开价格和有效时间的改变只对挂单而言。

如果未改变的值作为函数参量通过,将会生成错误 1(ERR_NO_RESULT)。

在一些服务器中挂单的有效时间会被隐藏。

这种情况下,当一个非零值在有效参量被指定时,将生成错误 147(ERR_TRADE_EXPIRATION_DENIED)。

参量:ticket - 定单编号。

price - 收盘价格stoploss - 新止损水平。

takeprofit - 新赢利水平。

expiration - 挂单有效时间。

arrow_color - 在图表中允许对止损/赢利颜色进行修改。

如果参量丢失或存在CLR_NONE 值,在图表中将不会显示。

if(TrailingStop>0){OrderSelect(12345,SELECT_BY_TICKET);if(Bid-OrderOpenPrice()>Point*TrailingStop){if(OrderStopLoss()<Bid-Point*TrailingStop){OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);return(0);}}}double OrderOpenPrice( )对于当前选择定单返回开价格。

定单必须由OrderSelect() 函数首先选定。

示例:if(OrderSelect(10, SELECT_BY_POS)==true)Print("对于定单10 开价格",OrderOpenPrice());elsePrint("OrderSelect返回错误",GetLastError());datetime OrderOpenTime( )对于当前选择定单返回买入时间。

注解:定单必须用OrderSelect()函数提前选定。

示例:if(OrderSelect(10, SELECT_BY_POS)==true)Print("定单10 买入时间",OrderOpenTime());elsePrint("OrderSelect 返回的错误 ",GetLastError());void OrderPrint( )按照以下形式打印选择定单信息:定单编号; 买入时间; 交易业务;手数总数; 开盘价格; 止损; 赢利;平仓时间; 收盘价格; 佣金; 掉期; 盈利; 注释; 指定编码; 挂单有效日期定单必须用OrderSelect()函数提前选定。

示例:if(OrderSelect(10, SELECT_BY_TICKET)==true)OrderPrint();elsePrint("OrderSelect 失败错误代码是",GetLastError());double OrderProfit( )对于选择定单返回净盈利值 (除掉期和佣金外)。

对于开仓位当前不真实盈利。

对于平仓为固定盈利。

相关文档
最新文档