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

合集下载

mt4指数平均线指标

mt4指数平均线指标

mt4指数平均线指标摘要:一、MT4指数平均线指标简介二、指数平均线指标计算方法三、指数平均线指标应用策略四、实战案例与分析五、总结与建议正文:【一、MT4指数平均线指标简介】MT4指数平均线指标,是一种在MetaTrader 4交易平台上常用的技术分析工具。

它通过计算不同时间段的平均价格,帮助投资者更好地把握市场趋势,从而制定相应的投资策略。

指数平均线指标在金融市场中具有广泛的应用,适用于外汇、股票、期货等多种投资品种。

【二、指数平均线指标计算方法】指数平均线指标(Index Moving Average,简称IMA)的计算方法如下:1.确定计算周期:选择一个适当的时间段,如5、10、20、40等。

2.计算周期内收盘价的算术平均值。

3.连续计算不同时间段的平均值,形成指数平均线。

【三、指数平均线指标应用策略】1.判断市场趋势:当指数平均线呈上升趋势时,表示市场处于上涨行情;反之,呈下降趋势时,市场处于下跌行情。

2.确定支撑与阻力位:在图表上绘制指数平均线,可以帮助投资者找到可能的支撑与阻力位,以便于制定买入或卖出的策略。

3.确认买卖信号:结合其他技术指标,如随机指标(Stochastic Oscillator)等,可以确认买卖信号,提高交易准确性。

【四、实战案例与分析】以某外汇交易品种为例,如图所示,指数平均线指标表现出以下特点:1.指数平均线呈上升趋势,说明市场处于上涨行情。

2.在指数平均线附近,存在较强的支撑与阻力位。

3.结合其他技术指标,如随机指标,可以发现买入信号。

【五、总结与建议】MT4指数平均线指标是一种实用的技术分析工具,通过对市场价格走势的计算与分析,有助于投资者更好地把握市场趋势。

在实际操作中,投资者可以将指数平均线指标与其他技术指标相结合,以提高交易准确性。

同时,注意根据市场环境及时调整计算周期,以适应市场变化。

MA和MACD的介绍

MA和MACD的介绍

金叉:是指
是由一根时 间短的均线 在下方向上 穿越时间长 一点的均线, 则此均线组 合为“均线 金叉”。一 般金叉看涨, 为买进信号。
金叉
金叉
移动平均线-MA (Moving Average)
死叉:是
指下降中 的短期移 动平均线 由上而下 穿过下降 的长期移 动平均线, 行情看跌, 是卖出信 号。
6. 价格向上突破 MA,但又立刻回到 MA 之下,而且 MA 仍在继续 下跌时,是卖出时机。
前期买入后, 如看到这样 的趋势应卖 出,且在死 叉之后,也 是一个卖出 信号
移动平均线-MA (Moving Average)
7. 价格在 MA 之下并上涨,但未突破 MA 又告回落,是卖出时机。
这里呈死叉状 态,如若之前 买入 ,此时 应卖出。
动能柱的背离:就是价格与动能 柱的背离。
平滑异同移动平均线-MACD (Moving Average Convergence and Divergence)
金叉:是指
DIFF(时间 短的均线) 自下方向上 穿越DEA(时 间长一点的 均线),则 此均线组合 为“均线金 叉”。一般 金叉看涨, 为买进信号
平滑异同移动平均线-MACD (Moving Average Convergence and Divergence)
点所 MACD的公式=(DIFF-DEA)*2
特点:该指标可以去除掉简单移动平均线经常出
现的假信号,又保留了移动平均线的优点。但由 于 MACD 指标对价格变动的灵敏度不高,滞后性 较移动平均线更强,适用于中长期投机活动,属 于中长线指标,因此在盘整行情中的使用效果较 差。
移动平均线:利用统计学上的“移动平均”原理,
将每天的市场价格进行移动平均计算,求出一个趋 势值,用来作为价格走势的研判工具。在技术分析 领域中,移动平均线是必不可少的指标工具。 计算公式: MA = (C1+C2+C3+C4+C5+....+Cn)/n C 为收盘价,n 为移动平均周期数。 例如,现货黄金的 5 日移动平均价格计算方法为: MA 5 = (前四天收盘价+前三天收盘价+前天收盘 价+昨天收盘价+今天收盘价)/5

MT4技术指标及使用技巧

MT4技术指标及使用技巧

MT4技术指标及使用技巧MT4(MetaTrader 4)是一种流行的外汇和差价合约(CFD)交易平台,这款平台在全球范围内广泛使用。

它具有强大的交易功能和技术分析工具,其中包括各种技术指标。

本文将介绍一些常用的MT4技术指标以及使用技巧。

1. 移动平均线(Moving Average):移动平均线是一种最常用的技术指标之一、它可以帮助确定价格趋势的方向以及支撑和阻力区域。

在MT4中,你可以选择简单移动平均线(SMA)或指数移动平均线(EMA)。

通常情况下,当价格在移动平均线上方时,可以看作是一个上升趋势,当价格在移动平均线下方时,可以看作是一个下降趋势。

2. 相对强弱指数(Relative Strength Index,RSI):RSI是一种用于测量价格变动的速度和幅度的指标。

它的值范围从0到100,通常情况下,当RSI值超过70时,可以认为价格被过度买入,当RSI值低于30时,可以认为价格被过度卖出。

RSI指标可以帮助你确定价格超买和超卖的区域。

3. 随机指数(Stochastic Oscillator):随机指数也是一种用于测量价格速度和幅度的指标。

它的值范围从0到100,通常情况下,当随机指数高于80时,可以认为价格被过度买入,当随机指数低于20时,可以认为价格被过度卖出。

与RSI指标类似,随机指数也可以帮助你确定价格超买和超卖的区域。

4. 布林带(Bollinger Bands):布林带是一种基于移动平均线的技术指标。

它包括一个中轨线和两条分别位于中轨线上方和下方的标准差线。

布林带可以帮助你确定价格的波动性。

当价格接触到布林带上轨线时,可能是一个价格高位,当价格接触到布林带下轨线时,可能是一个价格低位。

5. MACD指标(Moving Average Convergence Divergence):MACD指标是一种结合了移动平均线的趋势指标。

它通过两条移动平均线的差异来衡量价格的动力。

MACD_sample详细解释,MQL4语言EA范例,外汇黄金基础编程。MT4平台。

MACD_sample详细解释,MQL4语言EA范例,外汇黄金基础编程。MT4平台。

MACD_sample详细解释,MQL4语言EA范例,外汇黄金基础编程。

MT4平台。

//+------------------------------------------------------------------+//| MACD Sample.mq4 |//| Copyright ?2005, MetaQuotes Software Corp. |//| /doc/964228840.html,/ |//+------------------------------------------------------------------+extern double TakeProfit = 50; //盈利50点就出场extern double Lots = 0.1; //每单手数0.1extern double TrailingStop = 30;//移动止损30extern double MACDOpenLevel=3; //开仓指标之一extern double MACDCloseLevel=2; //平仓指标之一extern double MATrendPeriod=26; //取26指数平滑平均线//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start(){double MacdCurrent, MacdPrevious, SignalCurrent; //即当前MACD(红绿柱子),之前一根的MACD,和一般来说参数是9的对EMA 移动平均线double SignalPrevious, MaCurrent, MaPrevious; //前一根K线的signal,现在的MA,前一根的MAint cnt, ticket, total; //cnt是,ticket是判断开平仓是否成功的,其实就是flag.total是持仓单数量.// initial data checks// it is important to make sure that the expert works with a normal// chart and the user did not make any mistakes setting external// variables (Lots, StopLoss, TakeProfit,// TrailingStop) in our case, we check TakeProfit// on a chart of less than 100 barsif(Bars<100){Print("bars less than 100"); //如果K线小于100根,那么判断不能做.return(0);}if(TakeProfit<10) //如果设定的利润小于10点,那么判断程序有问题(10点太少了){Print("TakeProfit less than 10");return(0); // check TakeProfit}// to simplify the coding and speed up access// data are put into internal variablesMacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_ MAIN,0); //初始化MACD/signal与MA.MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_ MAIN,1); //iMacd最后一个参数是往回移动值,即取上一根K线的数据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,PRIC E_CLOSE,0);MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRI CE_CLOSE,1);total=OrdersT otal(); //total定义为orders数量.(持仓单)if(total<1) //如果total小于1,那么进入保证金充足判定.{// no opened orders identifiedif(AccountFreeMargin()<(1000*Lots)) //如果保证金足够(1手1000),那么进入下一个判定:开仓判定.{Print("We have no money. Free Margin = ", AccountFreeMargin());//如果不足,打印保证金不足return(0);}// check for long position (BUY) possibility //开仓判定:if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPreviousMathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious) //并且MA呈上升趋势,那么就尝试多单开仓.{ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakePr ofit*Point,"macd sample",16384,0,Green); //尝试多单开仓,盈利目标50点(TakeProfit)if(ticket>0) //无固定止损.ticket是1时成功.{ //if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); //表示多单已开仓.} //else Print("Error opening BUY order : ",GetLastError()); //ticket=0时开仓失败,打印错误结果.return(0);}// check for short position (SELL) possibilityif(MacdCurrent>0 && MacdCurrentSignalPrevious && //如果MACD大于0,并且MACD下破signal,并且Macd的绝对值大于3*1点MacdCurrent>(MACDOpenLevel*Point) && MaCurrent{ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red); //尝试空单开仓,盈利目标50点,无固定止损if(ticket>0){if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());//表示空单已开仓.}else Print("Error opening SELL order : ",GetLastError()); //否则开仓失败,打印错误结果.return(0);}return(0);}// it is important to enter the market correctly,// but it is more important to exit it correctly...for(cnt=0;cnt{OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); //选择第cnt个单子.if(OrderType()<=OP_SELL && // check for opened position //检验开仓类别OrderSymbol()==Symbol()) // check for symbol //Symbol - 交易系统称号{ //if(OrderType()==OP_BUY) // long position is opened //进入多单检验.{// should it be closed?if(MacdCurrent>0 && MacdCurrentSignalPrevious && //如果Macd高位死叉,出场.MacdCurrent>(MACDCloseLevel*Point)){OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close positionreturn(0); // exit}// check for trailing stopif(TrailingStop>0) //如果有移动止损,判定:{ //if(Bid-OrderOpenPrice()>Point*TrailingStop) //如果当前的卖价减去开仓价格大于移动止损{ //那么判定:(现在已经上升了一段了)if(OrderStopLoss(){OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);//那么更改止损值到现在的卖价-移动止损return(0);}}}}else // go to short position{// should it be closed?if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&MacdPrevious(MACDCloseLevel*Point)) //同理,判断空单是否需要平仓.{OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close positionreturn(0); // exit}// check for trailing stopif(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);}// the end.。

外汇MT4技术指标之MACD指数平滑异同平均线

外汇MT4技术指标之MACD指数平滑异同平均线

外汇MT4技术指标之MACD指数平滑异同平均线
核心提示:该指标主要是利用长短期二条平滑平均线,计算两者之间的差离值。

该指标可以去除掉移动平均线经常出现的假讯号,又保留了移动平均线的优点。

但由于该指标对价格变动的灵敏度不高,属于中长线指标,所以在盘整行情中不适用。

该指标主要是利用长短期二条平滑平均线,计算两者之间的差离值。

该指标可以去除掉移动平均线经常出现的假讯号,又保留了移动平均线的优点。

但由于该指标对价格变动的灵敏度不高,属于中长线指标,所以在盘整行情中不适用。

图中柱线由绿翻红是买入信号,由红翻绿是卖出信号。

MACD 曲线由高档二次向下交叉时,则股价下跌幅度会较深。

MACD 曲线由低档二次向上交叉时,则股价上涨幅度会较大。

股价高点比前一次高点高,而MACD指标的高点却比前一次高点低时,为牛背离,暗示股价会反转下跌。

参数:SHORT(短期)、LONG(长期)、M 天数,一般为12、26、9。

应用法则:
1.DIF与DEA均为正值,即都在零轴线以上时,大势属多头市场,DIF向上突破DEA,可作买,如果DIF向下跌破DEA,只可作为平仓信号。

2.DIF与DEA均为负值,即都在零轴线以下时,大势属空头市场,DIF向下跌破DEA,可作卖。

3.当DEA线与K线趋势发生背离时为反转信号。

4.DEA在盘局时,失误率较高,但如果配合RSI及KD,可以适当弥补缺憾。

5.分析MACD柱形图,由正变负时往往指示该卖,反之往往为买入信号。

【都哥说汇】【MT4指标】【EA交易】自动设置止损止盈EA说明

【都哥说汇】【MT4指标】【EA交易】自动设置止损止盈EA说明

自动设置止损止盈EA说明:
该EA说明:当EA运行的时候,每当下单就是自动设置止损,止盈和追踪止损,我一般把该EA运行在服务器24小时运行。

该指标可以预防你不设置止损的习惯,也有效避免黑天鹅。

止损的重要性都明白。

各参数说明:
止损:就是你设置的止损点,一般是小点计算,比如300,就是30点,欧美来说就是1.1500到1.1530
止赢:就是你设置的止盈点数,比如下图的1000,就是100点
第二个止赢:是追踪止损的设置,比如500,代表就是每当盈利50个点,就追踪止损
下面的参数是,字体大小,颜色,很好理解。

百度搜索:都哥说汇,免费下载更多精彩文章和指标。

一步一步解读MT的例子EAMACDSample

一步一步解读MT的例子EAMACDSample

//+ ----------------------------------------------------------------- +//| MACD Sample.mq4 |//| Copyright 2005-2014, MetaQuotes Software Corp. |//+ ----------------------------------------------------------------- + #property copyright "2005-2014, MetaQuotes Software Corp."// 该部分属于预处理程序,#property :编译参数定义,还有#define 定义常数,等。

input double TakeProfit =50;// 用input 输入变量,也可用Extern 声明外部变量,二者基本等效。

input double Lots =0.1;input double TrailingStop =30;input double MACDOpenLevel =3;input double MACDCloseLevel=2;input int MATrendPeriod =26;//+ ----------------------------------------------------------------- +//| |//+ ----------------------------------------------------------------- + void OnTick()/*void 为空值函数,不能有返回值(只能是return ),目的只是执行程序内容,每个价格波动就执行一次。

旧版int start() 函数:当数据变动时触发,对于自定义指标或者自动交易的编程主要依靠此函数进行,int start() 函数需要有返回值,如return(0) 。

MT4如何添加双线MACD指标

MT4如何添加双线MACD指标

MT4如何添加双线MACD指标MT4是MetaTrader 4的简称,是一种广泛使用的外汇交易平台。

MT4提供了广泛的技术指标供交易员使用,其中包括MACD指标。

MACD(Moving Average Convergence Divergence)是一种常用的价格动量指标,可用于判断价格走势的变化和趋势的转折点。

正常情况下,MT4只提供了单线表示MACD指标的选项,但是通过一些修改,可以在MT4上添加双线表示的MACD指标。

添加双线MACD指标需要进行一些简单的步骤,下面是具体的操作指南:1.打开MT4平台并登录您的交易账户。

2. 在MT4平台的顶部工具栏上,点击“插入”(Insert)选项。

3. 从下拉菜单中选择“指标”(Indicators),然后选择“趋势”(Trend)。

4. 在弹出的菜单中,找到“移动平均线收敛/发散”(Moving Average Convergence Divergence)并点击。

5. 在弹出的“移动平均线收敛/发散”窗口中,调整指标参数。

默认参数为12、26、9,分别代表短期EMA(Exponential Moving Average)、长期EMA和信号线的周期。

6. 在“可视化”(Visualize)选项中,将“双线”(Two lines)选项设置为“是”(Yes)。

7.点击“确定”(OK)按钮,指标将显示在您的交易图表上。

添加双线MACD指标后,您将看到两条线分别代表MACD线和信号线。

MACD线是通过计算长期EMA和短期EMA之间的差异而得出的,信号线则是MACD线的移动平均。

当MACD线从下方穿过信号线,表示买入信号;当MACD线从上方穿过信号线,表示卖出信号。

同时,MACD线的上升和下降也可以用来判断市场趋势的变化。

需要注意的是,MACD指标的使用需要结合其他技术分析工具和交易策略进行参考,不能单独作为决策依据。

另外,在使用指标时要注意合理设置参数,适应当前市场的特点和交易的时间周期。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 的计算数值产生变化。

其中,该参数为正时,代表向右移动;为负值,则代表向左移动。

//+------------------------------------------------------------------+//| Calculate open positions自定义函数(返回-整数型数据)仓单查询与统计|//+------------------------------------------------------------------+int CalculateCurrentOrders(string symbol)//函数作用,计算当前持仓单的数量{int buys=0,sells=0;//定义两个局部变量,整数型,buys——多单数,sells——空单数,用于订单的统计//----for(int i=0;i<OrdersTotal();i++)//计次循环(i=0 至订单数目,i=i+1)-循环检测当前的订单队列{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;//如果没有本系统交易的仓单类型,则跳出循环if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)//如果仓单货币对是当前货币对且仓单编号是本系统编号时(判断这个订单是不是当前EA 操作的,避免EA 误操作其他程序控制的持仓单){if(OrderType()==OP_BUY) buys++;//如果仓单类型=多单,则:在多单数上加1;if(OrderType()==OP_SELL) sells++;//如果仓单类型=空单,则,在空单数上加1。

}}//---- return orders volume-返回订单数目if(buys>0) return(buys);//如果多单>0,则返回(多单数)else return(-sells);//否则,返回(-空单数)//本函数返回查询计算结束时的持仓单的个数.这种模式返回是假设不存在锁单的。

}//+------------------------------------------------------------------+//| Calculate optimal lot size自定义函数(返回-小数型数据)资金管理|//+------------------------------------------------------------------+double LotsOptimized()//开仓量计算函数(根据要求计算出订单交易量,小数型){double lot=Lots(=0.1); //定义局部变量los 小数型int orders=HistoryTotal(); // history orders total 历史平仓单数(已平仓)int losses=0; // number of losses orders without a break-亏损单//---- select lot sizelot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);//计算开仓下单量=帐户可用资金*最大风险系数(=2%)/1000.0,并将结果保留小数点1位(通过风险系数的计算获得当前入场单应该采用的交易量,除以1000 是因为大多货币对汇价都在这个附近。

)//---- calcuulate number of losses orders without a break-计算亏损单数目if(DecreaseFactor(=3)>0) //如果下跌因素个数(=3)>0{for(int i=orders-1;i>=0;i--)//计次循环(i=历史平仓单数-1,到i=0, 递减1){if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!");break; }//如果没有本系统交易记录,输出“无交易历史!”,跳出if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;//如果订单的货币对不是当前货币对,或者订单类型为挂单时,继续运行//订单类型为整数型,0-BUY,1-SELL,2-BUYLIMT,3-BUYSTOP,4-SELLLIMT,5-SELLSTOP,其中“>OP_SELL”代表挂单if(OrderProfit()>0) break;如果盈利单数目>0,跳出循环if(OrderProfit()<0) losses++;//如果盈利单数目<0,则在:亏损单数上加1}if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);//如果亏损单数>1 时,则重新计算下单量,并保留小数点后1 位,其计算公式为:下单量=(lot-lot*losses/DecreaseFactor(=3))。

}//---- return lot size-返回下单量if(lot<0.1) lot=0.1;//如果算出的交易量小于0.1 手,则取交易量为0.1 手return(lot);//返回(下单量)}//+------------------------------------------------------------------+//| Check for open order conditions//自定义函数(无返回值)开仓策略|//+------------------------------------------------------------------+void CheckForOpen()//开仓检查(判断开仓条件及其处理){double ma; //定义局部变量ma 为小数型int res; //定义局部变量res 为整数型//---- go trading only for first tiks of new bar,//只有在新K 线的首次报价时执行if(Volume[0]>1) return;//如果当前K 大于1线的成交价次数时,返回(不是K 线的开盘时间点,即当前k 线还没收盘确定,则直接返回;否则,如果是K 线第一个成交价,则向下继续运行)//---- get Moving Average –获取均线数值ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);//获取当前以收盘价为基准计算出的均线数值iMA(NULL,0,12,6,MOD_SMA,PRICE_CLOSE,0)//---- sell conditions-卖出条件if(Open[1]>ma && Close[1]<ma)//如果前1 根K 线下穿均线(即K 线的开盘价大于均线值、收盘价小于均线值){res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);//发送仓单(当前货币对,卖出方向,(),买价,滑点=3,无止损,无止赢,开仓量计算订单编号,标上红色箭头)return; //返回}//---- buy conditions-买入条件if(Open[1]<ma && Close[1]>ma)//如果前1 根K 线上穿均线(即K 线的开盘价小于均线值、收盘价大于均线值){res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);//发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)return;//返回}//----}//+------------------------------------------------------------------+//| Check for close order conditions//自定义函数(无返回值)平仓策略|//+------------------------------------------------------------------+void CheckForClose()//平仓检查(判断平仓条件及其处理){double ma;//定义局部变量ma 小数型//---- 只在一个k 收盘另一个新出现时交易if(Volume[0]>1) return;//如果当前K 线的成交价次数>1时,则返回//---- get Moving Average //获取均线数值ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);//获取当前以收盘价为基准计算出的均线数值for(int i=0;i<OrdersTotal();i++) //计次循环(变量i=0 至定单总数,每次递增1){if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;//如果没有本系统所交易的仓单时,跳出循环if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;//如果仓单编号不是本系统编号,或者仓单货币对不是当前货币对时,继续选择if(OrderType()==OP_BUY)//如果是多单{if(Open[1]>ma && Close[1]<ma) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);//如果第1 根K线开盘价下穿均线时(即开盘价高于均价而收盘价低于均价时),则进行多头平仓(仓单编号,持仓数量,买价,滑点=3,用白色箭头显示)break;//跳出循环}if(OrderType()==OP_SELL)//如果是空单{if(Open[1]<ma && Close[1]>ma) OrderClose(OrderTicket(),OrderLots(),Ask,3,White););//如果第1 根K线开盘价上穿均线时(即开盘价低于均价而收盘价高于均价时),则进行空头平仓(仓单编号,持仓数量,卖价,滑点=3,用白色箭头显示)break;//跳出循环}}//----}//+------------------------------------------------------------------+//| Start function |//+------------------------------------------------------------------+void start()//主程序—-每次成交价所驱动的运算过程{//---- check for history and trading—对交易历史进行检查if(Bars<100 || IsTradeAllowed()==false) return;//如果K 少于100 根,或者如果智能交易交易=假时,返回线数允许//---- calculate open orders by current symbol-计算当前货币对的开仓订单if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();//如果计算出当前货币对开仓订单数=0 (即没有仓单),则进行开仓检查。

相关文档
最新文档