外汇MT4_EA智能系统MQ4编写详细举例_ea外汇交易系统介绍
外汇MT4_EA智能系统MQ4编写详细举例由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“ea外汇交易系统介绍”。
创建一简易的人工智能系统举例说明
让我们将MACD指标同获利能力、支撑移动止损位以及操作安全等因素结合起来考虑以创建人工智能系统。下面的例子是开立和控制一个单独的头寸。交易原则:.做多(买入)信号——即当MACD 指针是在0轴在以下,为向上的趋势并与向下的信号线相交(金叉).做空(卖出)信号——即当MACD 指针是在0轴以上,为向下趋势并与向上的信号线相交(死叉).多头平仓信号——即执行限价平仓指令或移动止损指令以获得利润或者在MACD指针与信号线相交(MACD指针在0轴以上且为向下趋势并与向上趋势的信号线相交)时平仓.空头平仓信号——即执行限价平仓指令或移动止损指令以获得利润或者在MACD指针与信号线相交(MACD指针在0轴以下且为向上趋势并与向下趋势的信号线相交)时平仓 重要提示: 在我们分析MACD指标时,为了排除MACD指示中一些并不重要的变化情况(即图表中的细微“小丘”),下面我们另外引荐一种控制“小丘”大小的方法: 指示范围至少为5个最小单位(5点,即USD/CHF=0.0005,USD/JPY=0.05)第一步:撰写人工智能系统说明 将鼠标指在导航窗口的人工智能系统,点击鼠标右键在弹出的菜单中CREATE A NEW EXPERT(创建一个智能系统)命令.正在初始化的WISARD OF EXPERT ADVISOR 会问你是否要输入数据.在弹出的窗口中你得写下NAME名字(人工智能系统的名字)、AUTHOR作者、与你的网址链接、须知—人工智能系统的测试样本.你也可以设定你想要的Lots(交易单位), Stop Lo(止损点), Take Profit(平仓)和 Trailing Stop(移动止损)的默认值.第二步:创立程序的初步结构 测试系统的代码仅仅为几页纸,即使是这几页纸仍然是难以理解的,特别是在我们这些不是专业的程序员的眼里是非常难的.不然,我们也不必写下这段说明,不是吗? 为了了解标准的人工智能系统的结构,我们来看一下下面的解释: 1.初始资料检查.检查图表,图表上棍的数量.检查外部变数值:LOTS,S/L,T/P,T/S 2.设置为快速数据存取的内部变量 3检查交易终端—是否有空间?如果有,然后.检查账户中的可用资金.是否可以做多(买入).建仓买入和平仓.是否可以做空(卖出).建仓卖出和平仓 4.定期控制已开立的头寸..若是多头合约.是否要平仓.是否要重新设定移动止损点..若是空头合约.是否要平仓.是否要重新设定移动止损点 这是相对简单的样板,仅仅只有4个主要单元.现在我们来试着逐渐将结构表中的每一部分的代码做出来: 1.初始资料检查 这一块的数据通常是经过稍稍修改后从一个系统移至另一系统的—这实际上是一单元检查.If Bars};4.定期控制已开立的头寸 for cnt=1 to TotalTrades { if Ordervalue(cnt,VAL_TYPE)Ordervalue(cnt,VAL_SYMBOL)=Symbol then // position from “our” chart? { CNT是周期变量,是在程序之开端进行描述的,方式如下: var: Cnt(0);.若是买入合约 If Ordervalue(cnt,VAL_TYPE)=OP_BUY then // long position opened {.是否需平仓? 平仓的条件信号: MACD指针与信号线相交,MACD指针在0轴以上,为向下趋势且与向上趋势的信号线相交.If MacdCurrent>0 and MacdCurrent MacdPrevious>SignalPrevious and MacdCurrent>(MACDCloseLevel*Point)then { CloseOrder(Ordervalue(cnt,VAL_TICKET),Ordervalue(cnt,VAL_LOTS),Bid,3,Violet);Exit;// exit };.是否需要重新设定移动止损点? 我们仅在持仓并已超过移动止损点数点还获利的情况下设定移动止损点, 即新的移动止损点比以前的更精确时才重设.If TrailingStop>0 then // if trailing stops are used { If(Bid-Ordervalue(cnt,VAL_OPENPRICE))>(Point*TrailingStop)then
{ If Ordervalue(cnt,VAL_STOPLOSS){ ModifyOrder(Ordervalue(cnt,VAL_TICKET),Ordervalue(cnt,VAL_OPENPRICE), Bid-Point*TrailingStop,Ordervalue(cnt,VAL_TAKEPROFIT),Red);Exit;};};若是空头合约 else // otherwise it is a short position {.是否需平仓? 平仓的条件信号: MACD指针与信号线相交,MACD指针在0轴以下,为向上趋势且与向下趋势的信号线相交.If MacdCurrentSignalCurrent and MacdPrevious(MACDCloseLevel*Point)then { CloseOrder(Ordervalue(cnt,VAL_TICKET),Ordervalue(cnt,VAL_LOTS),Ask,3,Violet);Exit;// exit };.是否需要重新设定移动止损点? 我们仅在持仓并已超过移动止损点数点还获利的情况下设定移动止损点, 即新的移动止损点比以前的更精确时才重设.If TrailingStop>0 then // the user has put a trailing stop in his settings {
// so, we set out to check it If(Ordervalue(cnt,VAL_OPENPRICE)-Ask)>(Point*TrailingStop)then {
If Ordervalue(cnt,VAL_STOPLOSS)=0 or
Ordervalue(cnt,VAL_STOPLOSS)>(Ask+Point*TrailingStop)then
{
ModifyOrder(Ordervalue(cnt,VAL_TICKET),Ordervalue(cnt,VAL_OPENPRICE),Ask+Point*TrailingStop,Ordervalue(cnt,VAL_TAKEPROFIT),Red);
Exit;
};};};// end.Closing all the curly bracket which remain open.};};};这样,跟着这套初学渐进程序,我们就学会了编写自己的人工智能系统.第三步: 将所有程序代码集合起来
我们将前面所有的代码集合过来 defines: MACDOpenLevel(3),MACDCloseLevel(2);defines: MATrendPeriod(56);var: MacdCurrent(0),MacdPrevious(0),SignalCurrent(0),SignalPrevious(0);var: MaCurrent(0),MaPrevious(0);var: cnt(0);// initial data checks // it is important to make sure that the Expert Advisor runs on a normal chart and that // the user has correctly set the external variables(Lots, StopLo, // TakeProfit, TrailingStop)// in our case we only check the TakeProfit If Bars// to simplify and speed up the procedure, we store the neceary // indicator data in temporary variables MacdCurrent=iMACD(12,26,9,0,MODE_MAIN);MacdPrevious=iMACD(12,26,9,1,MODE_MAIN);SignalCurrent=iMACD(12,26,9,0,MODE_SIGNAL);SignalPrevious=iMACD(12,26,9,1,MODE_SIGNAL);MaCurrent=iMA(MATrendPeriod,MODE_EMA,0);MaPrevious=iMA(MATrendPeriod,MODE_EMA,1);// now we have to check the status of the trading terminal.// we are going to see whether there are any previously opened positions or orders.If TotalTrades{// there are no opened orders // just to be on the safe side, we make sure we have free funds on our account.// the “1000” value is taken just as an example, usually it is poible to open 1 lot If FreeMargin// 'it is important to enter the market correctly, but it is even more important to exit it...' for cnt=1 to TotalTrades { if Ordervalue(cnt,VAL_TYPE)Ordervalue(cnt,VAL_SYMBOL)=Symbol then // does the instrument match? { If Ordervalue(cnt,VAL_TYPE)=OP_BUY then // long position opened
{ // we checkmaybe, we already may or it's already time to set a trailing stop? If TrailingStop>0 then // the user has put a trailing stop in his settings
{
// so, we set out to check it
If(Bid-Ordervalue(cnt,VAL_OPENPRICE))>(Point*TrailingStop)then
{
If Ordervalue(cnt,VAL_STOPLOSS)
{
ModifyOrder(Ordervalue(cnt,VAL_TICKET),Ordervalue(cnt,VAL_OPENPRICE),Bid-Point*TrailingStop,Ordervalue(cnt,VAL_TAKEPROFIT),Red);
Exit;
};
};
};
} else // otherwise it is a long position
{ // we checkmaybe, we already may or it's already time to set a trailing stop? If TrailingStop>0 then // the user has put a trailing stop in his settings
{
// so, we set out to check it
If(Ordervalue(cnt,VAL_OPENPRICE)-Ask)>(Point*TrailingStop)then
{
If Ordervalue(cnt,VAL_STOPLOSS)=0 or
Ordervalue(cnt,VAL_STOPLOSS)>(Ask+Point*TrailingStop)then
{
ModifyOrder(Ordervalue(cnt,VAL_TICKET),Ordervalue(cnt,VAL_OPENPRICE),Ask+Point*TrailingStop,Ordervalue(cnt,VAL_TAKEPROFIT),Red);
Exit;
};
};
};
};};};// the end.现在,我们只需给以下外部变量赋值就可以完成安装人工智能系统的全过程.LOTS=1,STOP LOSS(S/L)=0, TAKE PROFIT(T/P)=120(适用于一个小时的间 隔),TRAILING STOP(T/S)=30,当然你自己可以设定这些值.按VERIFY按纽,若无别的错误就按SAVE按纽.现在,我们来编辑人工智能系统.在MQL编辑器点击顶端的VERIFY图示(像一张有检查标记的纸.)。第四步: 检测人工智能系统的历史资料 我们已将人工智能系统编写完毕,现在我们已迫不及待地想用历史数据来对系统进行测试。让我们以EUR/USD的15分钟的间隔(大约4000棍)。为例, 打开环球银行交易平台中的EUR/USD15分钟图,用ATTACH TO A CHART命令将人工智能系统的MACD指针样本图粘贴在图表上(在导航窗口用鼠标选择MACD样本线, 点击鼠标右键选择所弹出菜单的命令).然后,到系统设置里,在这我们可以改变预设变量和用户自定义变量,如LOTS、STOP LOSS、PROFIT、TRAILING STOP等.为了让人工智能系统不仅只起到建议的作用,还能在营业账户上自动进行实时操作, 你需要击活ALLOW LIVE TRADING按纽.现在,我们来进行历史数据的测试了,我们不改变设置,转接到STRATEGY TESTER标签,击活ALLOWS ON THE CHART标记(要能在图表上看到箭头),然后,按START按纽开始测试.人工智能系统所有代码在Ready Expert Advisors页都可找到。当你对人工智能系统作出修改时必须紧记: 修改和测试环球银行交易平台的人工智能系统时必须注意以下细节:.在建立仓位之前,你必须检查你账户上可用保证金的有效性。假如可用保证金不足时,则开仓请求将会失败。必须注意的是,为了达到测试的目的,可用保证金最少应在1000元,另一张单的测试价格也是1000元。If FreeMargin 当开仓、平仓或者修改已有部位或删除预先设定的部位(即是执行以下任何的操作:SetOrder, CloseOrder, ModifyOrder or DeleteOrder)时,建议使用人工智能系统的Exit语句来完成这部分的操作,这将有10秒钟的限定时间间隔来执行该项操作。注意,10秒钟的限定时间不适用于测试模式(你可以在一行中做几次交易),另外,假如不是用Exit语句来完成人工智能系统的上述交易操作,人工智能系统的测试结果将和真实交易不同。SetOrder(OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,RED);// executing Exit;// exiting 为了防止在测试模式中用少于10秒的间隔来执行几项交易,你只需确保从上一次交易到下一次的交易已经超过10秒。//making sure that the current time value is greater than 10 seconds since the execution of the last trade If CurTime
LastTradeTime
+
Then
Begin SetOrder(OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,RED);// executing Exit;End;.历史数据可以用已引索的预设变量OPEN、CLOSE、HIGH、LOW、VOLUME来存取.在这种情况下,指数是指必须回头计算的周期数.// if the Close on the last bar is le than the Close on the last but one bar If Close.环球银行交易平台中的人工智能系统支持4种模式: · OHLC 点(Open/High/Low/Close)模式.因为系统在此的测试目的仅限于开盘价、收盘价、最高价、最低价,所以这个测试系统是相当快的.但是,这个测试结果与系统执行的实际交易的结果可能会不一样..每3点一次模式:在测试人工智能系统时,每增加三点就会加一个烛台图示.每2点一次模式: 在测试人工智能系统时,每增加二点就会加一个烛台图示.每1点一次模式: 在测试人工智能系统时,每增加一点就会加一个烛台图,这种模式是最慢的但是测试结果是最接近人工智能系统的实际交易的结果的。(每10秒钟间隔的交易观察结果).在编写和检验一人工智能系统时,同测试其它的程序一样,有时,需要输出一些额外的调试信息。MQL II语言就支持这类信息的输出.ALERT函数将包含由用户自定义数据的对话框发送至屏幕 Alert(“Free margin is ”, FreeMargin);.COMMENT函数将由用户定义的数据放置在图表的左上角。“N” 字符用于结束一行。Comment(“Free margin is ”, FreeMargin, “nEquity is ”, Equity);.PRINT函数是将由用户定义的数据输至系统记录 Print(“Total trades are ”, TotalTrades, “;Equity is ”, Equity, “;Credit is ”, Credit);.PrintTrade函数是将指定的未平仓合约的具体细节从系统记录中输出 PrintTrade(1);.当 人工智能系统 已测试完毕,测试结果会以扩展名为.LOG的文件形式储藏你安装环球银行交易平台所在的目录的下级子目录中。如果你经常性地测试你的人工智能系统,别忘了定期删除log档,这种档往往会占用数兆字节。