行业分析
外汇EA智能交易使用方法
2019-01-10 18:46  浏览:170
价格:未填
品牌:外汇EA智能交易使用方法
起订:1
供应:961
发货:1天内
发送询价

 

Short (SELL) entry  MACD 指标在零以上,从上至下并且穿过顶端的信号线。


Long exit  赢利上限的执行,追踪止损的执行或当穿过 MACD 的信号线 (MACD 指标在零以上,从上至下并且穿过顶端的信号线)。 Short exit  赢利上限的执行,追踪止损的执行或当穿过 MACD 的信号线 (MACD指标在零以下, 从下至上并且穿过低端的信号线)。

重要提示:从我们的分析上排除一些 MACD 指标微不足道的变化 (图表上的小 山丘 ),我们介绍一种补充检测 山丘 大小的办法如下:指标的大小应该在最低价的最后5个单元(5*Point,对于 USD/CHF = 0.0005 和 USD/JPY = 0.05).

步骤 1 编写智能交易的描述


在智能交易的导航窗口处,点击鼠标右键并且选择在菜单中的 创建新智能交易 。创建智能交易的初始提醒将会询问你进入数据中心。在显示窗口,填写智能交易的名称(名称) MACD Sample,作者(作者) -指出你的名字, 链接 (连接) -你网页的链接,注解 (注解) MACD-基本智能交易的测试范例。


步骤 2 创建程序的基本结构

测试智能交易的源代码将只占据一点位置,但是还是有些量经常很难抓住,特别是我们不是专业的编成工作者 另外,我们不需要这些描述,不是吗? 

一个标准智能交易的结构构想,让我们看看以下部分的描述:

初始变量 初始数据检测 检测图表,图表中的柱数 检测外部变量值:标准手, S/L, T/P, T/S
初始变量
所有使用在智能交易程序中的变量必须按照 metaQuotes Language 4 要求的指定。这就是为什么我们在程序的开始插入初始变量的原因

 

extern double TakeProfit = 50;
extern double Lots = 0.1;
extern double TrailingStop = 30;
extern double MACDOpenLevel=3;
extern double MACDCloseLevel=2;
extern double MATrendPeriod=26;

metaQuotes语言4 是需要 外部变量 辅助的。外部变量可以从外部设定,在智能交易程序源代码设定之后不可以修改。提供一个额外的灵活性。在我们的程序中,MATrendPeriod 变量作为外部变量指定。 在程序开始我们插入这个变量。

extern double MATrendPeriod=26;
检测初始数据
该代码部分通常使用在所有的智能交易中。因为是一个标准的检测:

 

// 初始数据检测
// 确认智能交易运行正常非常重要
//图表和用户设置不能出现任何错误
// 变量(Lots, StopLoss, TakeProfit,
// TrailingStop) 我们的情况需要检测TakeProfit
// 图表中少于100 柱
 if(Bars 100)
 Print( 少于 100柱 
 return(0);
 if(TakeProfit 10)
 Print( 赢利少于10 
 return(0); // 检测TakeProfit
 }
对于数据的快速通道设置内部变量
在源代码中经常需要注意指标值或计算值。简化代码和数据放置在内部变量中。

 

int start()
 double MacdCurrent, MacdPrevious, SignalCurrent;
 double SignalPrevious, MaCurrent, MaPrevious;
 int cnt, ticket, total;
// 简化代码
//数据放置在内部变量中
 MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
 MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
 SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
 SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
 MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
 MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);

现在,用 iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)代替,您可以在源代码中使用 MacdCurrent。

检测交易终端 是空的吗?如果是:
在我们的智能交易中,我们仅使用开单和操作挂单。不过,使更安全,我们来认识一种 对于先前定单交易终端检测:

 

 total=OrdersTotal();
 if(total 1)
 {
检测: 账户上的可用保证金
在分析市场状况之前,检测你的账户上可用的自由保证金可以开仓。

 

 if(AccountFreeMargin() (1000*Lots))
 Print( 没有资金.自由保证金 = , AccountFreeMargin());
 return(0);
 }
可能是看涨仓位 (BUY)?
进入看涨仓位的条件: MACD 低于零, 向上并且穿过信号线向下。这就是我们在 MQL4中描述的 (注意我们在指标上的业务值保存在先前的变量中):

 

 // 尽可能检测看涨仓位 (BUY)
 if(MacdCurrent 0 MacdCurrent SignalCurrent 
 MacdPrevious
 MathAbs(MacdCurrent) (MACDOpenLevel*Point) 
 MaCurrent MaPrevious)
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,
 macd sample ,16384,0,Green);
 if(ticket 0)
 if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
 Print( BUY 开单 : ,OrderOpenPrice());
 else Print( 错误 opening BUY order : ,GetLastError());
 return(0);
 }

附加的检验 山丘 的大小上面已经给出了描述。 MACDOpenLevel变量是一个用户指定变量,它不可能改变程序文本,但是却有很大的灵活性。在程序开始我们插入这个变量的描述。

可能是卖空仓位(SELL)?
进入卖空仓位的条件: MACD高于零,向上并且穿过信号线向下。注解如下:

 

 // 尽可能的检测卖空仓位(SELL)
 if(MacdCurrent 0 MacdCurrentSignalPrevious 
 MacdCurrent (MACDOpenLevel*Point) MaCurrent
 ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,
 macd sample ,16384,0,Red);
 if(ticket 0)
 if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
 Print( SELL 开单 : ,OrderOpenPrice());
 else Print( 错误SELL定单开仓 : ,GetLastError());
 return(0);
 }

应该平仓吗?
退出看涨仓位的条件: MACD 穿过信号线, MACD 高于零,向上并穿过信号线向下。

 

if(MacdCurrent 0 MacdCurrentSignalPrevious 
 MacdCurrent (MACDCloseLevel*Point))
 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //平仓
 return(0); //退出
 }
应该重设追踪止损马?
我们设定追踪止损只有在仓位盈利已经超过追踪水平点,并且新的止损水平点好于先前的水平。

 

// 检测追踪止损
if(TrailingStop 0)
 if(Bid-OrderOpenPrice() Point*TrailingStop)
 if(OrderStopLoss()
 OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,
 OrderTakeProfit(),0,Green);
 return(0);
 }

应该平仓吗?
退出卖空仓位的条件: MACD穿过信号线,MACD低于零,向上并且穿过信号线向下。

 

if(MacdCurrent 0 MacdCurrent SignalCurrent 
 MacdPrevious(MACDCloseLevel*Point))
 OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); //平仓
 return(0); // 退出
 }
应该重设追踪止损吗?
我们设定追踪止损只有在仓位盈利已经超过追踪水平点,并且新的止损水平点好于先前的水平。

 

// 检测追踪止损
if(TrailingStop 0)
 if((OrderOpenPrice()-Ask) (Point*TrailingStop))
 if((OrderStopLoss() (Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
 OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,
 OrderTakeProfit(),0,Red);
 return(0);
 }

步骤3 集中程序的结果代码

让我们打开智能交易的设定:使用按钮打开 属性 菜单。在窗口内指定运行参量的外部设定:


//+------------------------------------------------------------------+ //| MACD Sample.mq4 | //| Copyright 2005, metaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double MACDOpenLevel=3; extern double MACDCloseLevel=2; extern double MATrendPeriod=26; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt, ticket, total; // 检测初始化数据 // 确定智能交易在图表中运行正常非常重要 // 用户在外部变量交易中不会产生任何错误 // 外部变量 (标准手数, 止损,赢利, // 追踪止损) 在这种情况下,我们检测图表中赢利水平要小于100 柱 if(Bars 100) Print( 少于 100柱 return(0); if(TakeProfit 10) Print( 赢利少于10 return(0); // 检测赢利水平 // 简化代码和加速通道 // 数据被放置在内部变量中 MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); total=OrdersTotal(); if(total 1) // 没有指定开单 if(AccountFreeMargin() (1000*Lots)) Print( 没有资金. 自由保证金 = , AccountFreeMargin()); return(0); // 尽可能检测看涨仓位 (BUY)  if(MacdCurrent 0 MacdCurrent SignalCurrent MacdPrevious SignalPrevious MathAbs(MacdCurrent) (MACDOpenLevel*Point) MaCurrent MaPrevious) ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point, macd sample ,16384,0,Green); if(ticket 0) if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print( BUY 定单开仓 : ,OrderOpenPrice()); else Print( 错误BUY定单开仓 : ,GetLastError()); return(0); // 尽可能检测卖空仓位(SELL) if(MacdCurrent 0 MacdCurrent SignalCurrent MacdPrevious SignalPrevious MacdCurrent (MACDOpenLevel*Point) MaCurrent MaPrevious) ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point, macd sample ,16384,0,Red); if(ticket 0) if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print( SELL 定单开仓 : ,OrderOpenPrice()); else Print( 错误SELL定单开仓 : ,GetLastError()); return(0); return(0); // 正确进入市场很重要, // 但正确退出市场更重要... for(cnt=0;cnt total;cnt++) OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType() =OP_SELL // 检测开仓 OrderSymbol()==Symbol()) // 检测货币对 if(OrderType()==OP_BUY) // 看涨仓位开仓 // 需要平仓吗? if(MacdCurrent 0 MacdCurrent SignalCurrent MacdPrevious SignalPrevious MacdCurrent (MACDCloseLevel*Point)) OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); //平仓 return(0); // 退出 // 检测追踪止损 if(TrailingStop 0) if(Bid-OrderOpenPrice() Point*TrailingStop) if(OrderStopLoss() Bid-Point*TrailingStop) OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); return(0); else // 去卖空仓位 // 需要平仓吗? if(MacdCurrent 0 MacdCurrent SignalCurrent MacdPrevious SignalPrevious MathAbs(MacdCurrent) (MACDCloseLevel*Point)) OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // 平仓 return(0); //退出 // 检测追踪止损 if(TrailingStop 0) if((OrderOpenPrice()-Ask) (Point*TrailingStop)) if((OrderStopLoss() (Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); return(0); return(0); // 结束

对于最后智能交易的确认,只需要指定外部变量值 Lots = 1 , Stop Loss (S/L) = 0 (not used), Take Profit (T/P) = 120 (appropriate for one-hour intervals), Trailing Stop (T/S) = 30 . 当然,你可以使用自己的值。按 编写 按钮,如果没有任何错误信息出现 (你可以从 metaEditor的列表中复制), 按 保存 键保存智能交易。

本文标签:外汇EA
联系方式
公司:顺水的鱼MT4外汇EA (未注册)
姓名:顺水的鱼
电话:18391752892
手机:18391752892
地址:全国各省市均有售后网点
邮件:3313198376@qq.com
QQ:3313198376
Skype:3313198376@qq.com
发表评论
0评