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

合集下载

外汇mt4编程:ea编写中级(第2版)

外汇mt4编程:ea编写中级(第2版)

外汇mt4编程:ea编写中级(第2版)外汇MT4编程:MT4 EA编写中级(第2版共十六课)原创:李沂鸿(柒侠伍义)国家:马来西亚第1章:初级EA以下是初级EA////////////ea 不读这个注解///////////////////////#property copyright "柒侠伍义_初级EA教程_商业版本" datetime 限制一根柱子下注一次=0; //自定义extern double下注数量=0.1; //自定义extern double止损=200; //自定义extern double止盈=200; //自定义extern double 滑点=30; //自定义externbool 使用音乐=true; //true=要用false=不要用externbool 使用弹出提示=false; //true=要用false=不要用string ea名字="柒侠伍义_初级EA教程";extern double开始交易时间=3; //自定义交易时间extern double结束交易时间=23; //自定义交易时间double魔术号码=16384; //自定义魔术号码double 死亡日期年=2009; //自定义ea终止日期double 死亡日期月=12; //自定义ea终止日期double 死亡日期日=12; //自定义ea终止日期double 死亡日期时=12; //自定义ea终止日期double 用户账户=90240764; //自定义指定用户帐号double 赢钱目标=10000;//自定义赢太多了不要做单double 输钱目标=500; //自定义输太惨了不要做单string 交易商= "";//自定义交易商extern string 货币对1 ="EURUSD"; //自定义指定货币对extern string 货币对2 ="EURJPY"; //自定义指定货币对extern string 货币对3 ="GBPUSD"; //自定义指定货币对double时间周期1=30,时间周期2=60; //自定义时间周期////////////ea 不读这个注解///////////////////////int start() //ea 开始运行{ //开始主程式HideTestIndicators(true);//命令ea隐藏ea中的指标if(AccountFreeMarginCheck(Symbol(),OP_BUY,下注数量)<=0|| GetLastError()==134) {return;}//命令ea如果保证金不足不要交易if(AccountFreeMarginCheck(Symbol(),OP_SELL,下注数量)<=0|| GetLastError()==134){return;}//命令ea如果保证金不足不要交易////////////ea 不读这个注解///////////////////////if( //开始如果OrdersTotal()==0 //没有单可以下注&&Close[0]-Open[0]>200*Point //判断上升趋势&&Close[1]-Open[1]>200*Point //判断上升趋势&&Close[2]-Open[2]>200*Point //判断上升趋势&&Close[3]-Open[3]>200*Point //判断上升趋势&& 限制一根柱子下注一次!=Time[0] //限制一根柱子下注一次&& IsDemo() //限制模拟户口运行&& DayOfWeek()!=0 //礼拜不要交易&& DayOfWeek()!=6 //星期6不要交易&& DayOfWeek()!=5 //星期5不要交易&&(Hour()>开始交易时间&&Hour()<结束交易时间)//限制交易时间:早上3点到晚上10点可以交易&&Year()==2009 //限制交易时间:只限2009年可以运行&&(Year()<=死亡日期年&&Month()<=死亡日期月&&Day()<=死亡日期日&&Hour()<=死亡日期时) //ea死亡日期&& AccountNumber()==用户账户//指定用户账户&&(AccountBalance()<赢钱目标&&AccountBalance()>输钱目标) //赢太多了不要做单输太惨了不要做单&&AccountCompany()==交易商//指定交易商方可交易&&(Symbol()==货币对1||Symbol()==货币对2||Symbol()==货币对3) //指定货币对&&(Period()==时间周期1||Period()==时间周期2) //指定时间周期运行){OrderSend(Symbol(),OP_BUY,下注数量,Ask,滑点,Ask-止损*Point,Ask+止盈*Point,""+ea名字+"",魔术号码,0,Green);限制一根柱子下注一次=Time[0];if(使用音乐){PlaySound("Conditions.wav");}if(使用弹出提示){Alert(" M",Period(),"",Symbol(),"buy开仓,余额资金::",AccountBalance()," ");}} // end if 结束如果////////////ea 不读这个注解///////////////////////if( //开始如果OrdersTotal()==0 //没有单可以下注&&Open[0]-Close[0]>200*Point //判断下降趋势&&Open[1]-Close[1]>200*Point //判断下降趋势&&Open[2]-Close[2]>200*Point //判断下降趋势&&Open[3]-Close[3]>200*Point //判断下降趋势&& 限制一根柱子下注一次!=Time[0] //限制一根柱子下注一次&& IsDemo() //限制模拟户口运行&& DayOfWeek()!=0 //礼拜不要交易&& DayOfWeek()!=6 //星期6不要交易&& DayOfWeek()!=5 //星期5不要交易&&(Hour()>开始交易时间&&Hour()<结束交易时间)//限制交易时间:早上3点到晚上10点可以交易&&Year()==2009 //限制交易时间:只限2009年可以运行&&(Year()<=死亡日期年&&Month()<=死亡日期月&&Day()<=死亡日期日&&Hour()<=死亡日期时) //ea死亡日期&& AccountNumber()==用户账户//指定用户账户&&(AccountBalance()<赢钱目标&&AccountBalance()>输钱目标) //赢太多了不要做单输太惨了不要做单&&AccountCompany()==交易商//指定交易商方可交易&&(Symbol()==货币对1||Symbol()==货币对2||Symbol()==货币对3) //指定货币对&&(Period()==时间周期1||Period()==时间周期2) //指定时间周期运行){OrderSend(Symbol(),OP_SELL,下注数量,Bid,滑点,Bid+止损*Point,Bid-止盈*Point,""+ea名字+"",魔术号码,0,Red);限制一根柱子下注一次=Time[0];if(使用音乐){PlaySound("Conditions.wav");}if(使用弹出提示){Alert(" M",Period(),"",Symbol(),"sell开仓,余额资金::",AccountBalance()," ");}} // end if结束如果////////////ea 不读这个注解///////////////////////return(0); //叫ea重复运行每秒大概可能重新运算100次} //startto end 结束主程式第2章:删除不是很重要的自定义为了方便学习1.////////////ea 不读这个注解///////////////////////2.#property copyright "柒侠伍义_初级EA教程_商业版本"3.datetime 限制一根柱子下注一次=0; //自定义4.extern double 下注数量=0.1; //自定义5.extern double 止损=200; //自定义6.extern double 止盈=200; //自定义7.extern double 滑点=30; //自定义8.extern bool 使用音乐=true; //true=要用false=不要用9.extern bool 使用弹出提示=false; //true=要用false=不要用10.string ea名字= "柒侠伍义_初级EA教程";11.//extern double 开始交易时间=3; //自定义交易时间12.//extern double 结束交易时间=23; //自定义交易时间13.double 魔术号码=16384; //自定义魔术号码14.//double 死亡日期年=2009; //自定义ea终止日期15.//double 死亡日期月=12; //自定义ea终止日期16.//double 死亡日期日=12; //自定义ea终止日期17.//double 死亡日期时=12; //自定义ea终止日期18.//double 用户账户=90240764; //自定义指定用户帐号19.//double 赢钱目标=10000;//自定义赢太多了不要做单20.//double 输钱目标=500; //自定义输太惨了不要做单21.//string 交易商= ""; //自定义交易商22.//extern string 货币对1 = "EURUSD"; //自定义指定货币对23.//extern string 货币对2 = "EURJPY"; //自定义指定货币对24.//extern string 货币对3 = "GBPUSD"; //自定义指定货币对25.//double 时间周期1=30,时间周期2=60; //自定义时间周期26.////////////ea 不读这个注解///////////////////////27.int start() //ea 开始运行28.{ //开始主程式29.30.HideTestIndicators(true);//命令ea隐藏ea中的指标31.if(AccountFreeMarginCheck(Symbol(),OP_BUY,下注数量)<=0|| GetLastError()==134) {return;}//命令ea如果保证金不足不要交易32.if(AccountFreeMarginCheck(Symbol(),OP_SELL,下注数量)<=0|| GetLastError()==134){return;}//命令ea如果保证金不足不要交易33.34.////////////ea 不读这个注解///////////////////////35.36.if( //开始如果37.OrdersTotal()==0 //没有单可以下注38.&&Close[0]-Open[0]>200*Point //判断上升趋势39.&&Close[1]-Open[1]>200*Point //判断上升趋势40.&&Close[2]-Open[2]>200*Point //判断上升趋势41.&&Close[3]-Open[3]>200*Point //判断上升趋势42.&& 限制一根柱子下注一次!=Time[0] //限制一根柱子下注一次43.//&& IsDemo() //限制模拟户口运行44.//&& DayOfWeek() !=0 //礼拜不要交易45.//&& DayOfWeek() !=6 //星期6不要交易46.//&& DayOfWeek() !=5 //星期5不要交易47.//&&(Hour()>开始交易时间&&Hour()<结束交易时间)//限制交易时间:早上3点到晚上10点可以交易48.//&& Year()==2009//限制交易时间:只限2009年可以运行49.//&&(Year()<=死亡日期年&&Month()<=死亡日期月&&Day()<=死亡日期日&&Hour()<=死亡日期时)//ea死亡日期50.//&& AccountNumber()==用户账户//指定用户账户51.//&&(AccountBalance()<赢钱目标&&AccountBalance()>输钱目标) //赢太多了不要做单输太惨了不要做单52.//&& AccountCompany()==交易商//指定交易商方可交易53.//&&(Symbol()==货币对1||Symbol()==货币对2||Symbol()==货币对3) //指定货币对54.//&&(Period()==时间周期1||Period()==时间周期2) //指定时间周期运行55.){56.OrderSend(Symbol(),OP_BUY,下注数量,Ask,滑点,Ask-止损*Point,Ask+止盈*Point,""+ea名字+"",魔术号码,0,Green);57.限制一根柱子下注一次=Time[0];58.if(使用音乐){PlaySound("Conditions.wav");}59.if(使用弹出提示){Alert(" M",Period(),"",Symbol(),"buy开仓,余额资金::",AccountBalance()," ");}60.} // end if 结束如果61.62.////////////ea 不读这个注解///////////////////////63.64.65.if( //开始如果66.OrdersTotal()==0 //没有单可以下注67.&&Open[0]-Close[0]>200*Point //判断下降趋势68.&&Open[1]-Close[1]>200*Point //判断下降趋势69.&&Open[2]-Close[2]>200*Point //判断下降趋势70.&&Open[3]-Close[3]>200*Point //判断下降趋势71.&& 限制一根柱子下注一次!=Time[0] //限制一根柱子下注一次72.//&& IsDemo() //限制模拟户口运行73.//&& DayOfWeek() !=0 //礼拜不要交易74.//&& DayOfWeek() !=6 //星期6不要交易75.//&& DayOfWeek() !=5 //星期5不要交易76.//&&(Hour()>开始交易时间&&Hour()<结束交易时间)//限制交易时间:早上3点到晚上10点可以交易77.//&& Year()==2009//限制交易时间:只限2009年可以运行78.//&&(Year()<=死亡日期年&&Month()<=死亡日期月&&Day()<=死亡日期日&&Hour()<=死亡日期时)//ea死亡日期79.//&& AccountNumber()==用户账户//指定用户账户80.//&&(AccountBalance()<赢钱目标&&AccountBalance()>输钱目标) //赢太多了不要做单输太惨了不要做单81.//&& AccountCompany()==交易商//指定交易商方可交易82.//&&(Symbol()==货币对1||Symbol()==货币对2||Symbol()==货币对3) //指定货币对83.//&&(Period()==时间周期1||Period()==时间周期2) //指定时间周期运行84.){85.OrderSend(Symbol(),OP_SELL,下注数量,Bid,滑点,Bid+止损*Point,Bid-止盈*Point,""+ea名字+"",魔术号码,0,Red);86.限制一根柱子下注一次=Time[0];87.if(使用音乐){PlaySound("Conditions.wav");}88.if(使用弹出提示){Alert(" M",Period(),"",Symbol(),"sell开仓,余额资金::",AccountBalance()," ");}89.} // end if 结束如果90.91.92.////////////ea 不读这个注解///////////////////////93.94.return(0); //叫ea 重复运行每秒大概可能重新运算100次95.} //start to end 结束主程式第3章:真正删除不重要的是不是好看一点了?哈哈和。

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

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

1、MT4 自带EA(MA)解析与实战分析2、MT4 自带EA(MACD)解析与实战分析1、MT4 自带EA(MA)解析与实战分析一、均线穿越交易系统EA详解MT4 平台自带了一个自动交易的EA 指标,那就是Moving Average ,下面详细解释该系统每条语句的功能说明,以便深入认识EA 的编程内核。

//+------------------------------------------------------------------+//| Moving Average.mq4 |//| Copyright ?2005, MetaQuotes Software Corp. |//| / |//+------------------------------------------------------------------+#define MAGICMA 20050610//定义本EA 操作的订单的唯一标识号码,由此可以实现在同一账户上多系统操作,各操作EA 的订单标识码不同,就不会互相误操作。

凡是EA 皆不可缺少,非常非常重要!extern double Lots = 0.1; //每单的交易量extern double MaximumRisk = 0.02;//本系统最大风险系数,即可以动用总资金的2%extern double DecreaseFactor = 3; //下跌因素个数extern double MovingPeriod = 12; //均线的计算周期=12 根K 线;extern double MovingShift = 6; //均线在K 线图中向右显示的偏移量=6 根K 线;//extern 确定从外部程序输入的变量,会直接显现输入数据窗口。

数列本身不能作为外部变量。

注意:iMA 中的MovingShift(均线偏移量)是指均线指标在图上绘制时向左、右移动的K线个数,主要为了使图中结果更好看,并不会对MA 的计算数值产生变化。

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轴以下,为向上趋势且与向下趋势的信号线相交。

MT4智能交易(程式的执行)

MT4智能交易(程式的执行)

MT4智能交易(程式的执行)在探讨程序的时候可以拿一个简单的EA可以拿来分析一下其执行的步骤。

这样对EA的执行会有一个更加明确的概念。

下面我就拿一个简单的EA来分析一下它的执行逻辑。

EA程式://--------------------------------------------------------------------int Count=0; // 整体变量//--------------------------------------------------------------------int init() // 特殊函数 init(){Alert ("Function init() triggered at start"); // 警报return; // 退出 init()}//--------------------------------------------------------------------int start() // 特殊函数 start(){double Price = Bid; // 局部变量Count++; // Tick 计数器Alert("New tick ",Count," Price = ",Price);// 警报return; // 退出 start()}//--------------------------------------------------------------------int deinit() // 特殊函数 deinit(){Alert ("Function deinit() triggered at deinitialization");// 警报return; // 退出 deinit()}//--------------------------------------------------------------------以上程式按照下列步骤运行:1. 当EA附到图表上之后,客户终端将控制权传给EA,然后EA开始运行。

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 ®
  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( )对于选择定单返回净盈利值 (除掉期和佣金外)。

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

相关文档
最新文档