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. |
//| aquotes/ |
//+------------------------------------------------------------------+
#define MAGICMA 20050610
//定义本 EA 操作的订单的唯一标识号码,由此可以实现在同一账户上多系统操作,各操作
EA 的订单标识码不同,就不会互相误操作。凡是 EA 皆不可缺少,非常非常重要!
extern double 沐浴桶Lots = 0.1; //每单的交易量
extern double MaximumRisk = 0.02;//本系统最大风险系数,即可以动用总资金的 2%
extern double DecreaFactor = 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,lls=0;
//定义两个局部变量,整数型,buys——多单数,lls——空单数,用于订单的统计
//----
for(int i=0;i<OrdersTotal();i++)
怎么使眼袋消除//计次循环(986是什么意思i=0 至订单数目,i=i+1)自尊心强什么意思-循环检测当前的订单队列
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==fal) break;
//如果
没有本系统交易的仓单类型,则跳出循环
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
//如果
仓单货币对是当前货币对 且 仓单编号是本系统编号 时
(判断这个订单是不是当前 EA 操作的,避免 EA 误操作其他程序控制的持仓单)
{
if(OrderType()==OP_BUY) buys++;
//如果 仓单类型=多单,则:在多单数上加 1;
if(OrderType()==OP_SELL) lls++;
//如果 仓单类型=空单,则,在空单数上加 1。
}
}
//---- return orders volume-返回订单数目
if(buys>0) return(buys);
//如果 多单>0,则返回(多单数)
el return(-lls);
//否则,返回(-空单数)
//本函数返回查询计算结束时的持仓单的个数.这种模式返回是假设不存在锁单的。
}
//+------------------------------------------------------------------+
//| Calculate optimal lot size
自定义函数(返回-小数型数据) 资金管理 |
//+------------------------------------------------------------------+
double LotsOptimized()//
开仓量计算函数(根据要求计算出订单交易量,小数型)
{
double lot=Lots(=0.1); //定义局部变量 los 小数型
int orders=HistoryTotal(); // 二次世界大战history orders total 历史平仓单数(已平仓)
int loss=0; // number 听过很多流行歌of loss orders without a break-亏损单
//---- lect lot size
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//计算 开仓下单量=帐户可用资金*最大风险系数(=2%)/1000.0,并将结果保留小数点 1
位
(通过风险系数的计算获得当前入场单应该采用的交易量,除以 1000 是因为大多货币对汇
价都在这个附近。)
//---- calcuulate number of loss orders without a break-计算亏损单数目
if(DecreaFactor(=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)==fal) { Print("Error in history!");