一、通过交易系统的平均线路EA详细信息
MT4平台包括Moving Average(自动交易的EA指标)。我们将详细说明此系统中每个语句的功能说明,详细了解EA的编程内核。我想给初学者一些帮助。
//-
//| Moving Average.mq4|
//|版权所有?2005,MetaQuotes软件公司|
//|/-
#define MAGICMA 20050610
//定义此EA操作的订单的唯一标识号,允许在同一个帐户中执行多系统操作。如果每个任务EA的订单标识码不同,则它们不能正常工作。凡是EA都是不可缺少的,很重要!
Extern double Lots=0.1//每张订单的成交量
Extern double MaximumRisk=0.02//系统最大风险系数,即资金总额的2%可用
extern double decrease factor=3;//下降因素数
Extern double MovingPeriod=12//平均计算周期=12个kk线;
extern double moving shift=6;//Kline处平均线的右偏移=Kline 6个;
//extern外部程序确定输入的变量后,将直接显示输入数据窗口。序列本身不能用作外部变量。
注:iMA的MovingShift(平均移动偏移)是指平均移动指针在图中绘制时左右移动的KK线数。主要是为了更好地查看图片的结果,MA的计算值没有变化。其中,此参数为正数,表示向右移动。负值表示向左移动。
//-
//| Calculate open positions
用户定义的函数(返回-整数数据)仓库查询和统计|
//-
intcalculatecurrentorders(string symbol)//函数作用,用于计算当前持有的仓库数
{
Int buys=0,sells=0;
//两个局部变量定义,整数类型,buys——多重单数,sells——空白单数,订单统计
//-
FOR(INT I=0;IORDERSTOTAL();I)。
//阶数周期(i=0至订单数,i=i 1)-循环目前的订单伫列
{
If (orderselect (I,select _ by _ pos,mode _ trades)==false)break;
//如果此系统交易没有仓库类型,则脱离循环
if(order symbol()==symbol()ordermagicnumber()==magic ma)
//如果仓库货币对是当前货币对,仓库号码是系统号码。
(判断该订单目前是否为EA运营,并防止EA错误地操纵其他程序控制的仓库列表。)
{
if(order type()==OP _ BUY)buys;
//如果仓库类型=多个订单:在多个单数中加上1。
if(order type()==OP _ SELL)sells;
//如果仓库类型=空列表,则在空单数中加上1。
}
}
//- return orders volume-返回订单数
IF(Buys 0)return(Buys);
//0多则返回(多单数)
ELSE Return(-Sells);
//否则返回(-null单数)
//此函数在查询计算结束时返回仓库数。此模式返回假定没有锁。
}
//-
//| Calculate optimal lot size
用户定义的函数(返回-小数数据)资金管理|
//-
Double LotsOptimized()//开放仓库计算函数(按需计算订货量,小数)
{
double lot=Lots(=0.1);//定义本地变量los小数类型
int orders=history total();//history orders total历史平昌单数(平昌)
int losses=0;//number of losses orders without a break-损失声明
//- select lot size
lot=normalize double(accountfreemargin()* maximum risk/1000 . 0,1);
//计算仓库未结订单数量=帐户可用资金*最大风险系数(=2%)/1000.0,保留1位小数的结果
(通过风险系数计算,目前门票需要采用的成交量除以1000,是因为大部分货币对汇率都在这附近。)。
//-calculate 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)
布雷克;}
//如果没有此系统交易记录,将显示“没有交易历史记录!”输出
If(OrderSymbol())!=symbol()| | order type()op _ sell)continue;
//如果订单的货币对不是当前货币对,或者订单类型为订单,则继续运行
//订单类型为整数类型0-BUY、1-SELL、2-BUYLIMT、3-BUYSTOP、4-SELLLIMT和5-SELLSTOP。在这里
If(OrderProfit()0)中断;
如果顺差为0,则从循环中跳下来。
if(order profit()0)losses;
//收益表数为0时:损失单数加1
}
if(los ses 1)lot=normalize double(lot-lot * losses/decrease factor,1);
//如果发生单数1损失,则重新计算订货量,保留小数点后1位,计算如下:
订货量=(lot-lot * losses/decrease factor(=3))。
}
//- return lot size-返回订货量
IF(lot 0.1)LOT=0.1;/
/如果计算的成交量小于0.1手,成交量为0.1手
返回(LOT);//退货(订货量)
}
//-
//| Check for open order conditions
//自定义函数(无返回值)思洛策略|
//-
Void CheckForOpen()//开闭检查(决定开闭条件及处理)
{
Double ma//将局部变量ma定义为十进制
Int RES//将局部变量RES定义为整数
//-go trading only for first tiks of new bar,
//仅对新Kline的第一个报价运行
If(卷[0]1)return;
//当前Kline的成交价大于1时返回
(不是KK线的开放时间。也就是说,如果当前KK行尚未关闭,则直接返回。否则,如果是KK线的第一个交易价格,就继续向下运营。)
//- get moving average-获取平均值
Ma=IMA (null,0,moving period,moving shift,mode _ SMA,price _ close,0);
//获取基于当前收盘价计算的平均值线值
Ima (null、0、12、6、mod _ SMA、price _ close、0)
//- sell conditions-销售条款
If(Open[1]ma Close[1]ma)
//如果前一条KK线通过平均值线(即KK线的开盘价大于平均值,收盘价小于平均值)。
{
Res=ordersend (symbol(),op _ sell,lotsoptimized(),bid,3,0,0,'',magicma,
//发货仓库清单(目前货币对、销售方向、开仓量计算()、购买价格、滑点=3、无损、无限胜、订单号码、红色箭头指示)
Return//返回
}
//- buy conditions-购买条款
If(Open[1]ma Close[1]ma)
//如果前一条KK线穿均线(即KK的开盘价小于平均值,收盘价大于平均值)。
{
Res=ordersend (symbol(),op _ buy,lotsoptimized(),ask,3,0,0,'',magicma
//发件仓库报表(当前货币对、购买方向、开仓量计算()、售价、滑点=3、无损、无止境的胜利、订单号码、蓝色箭头指示)
Return//返回
}
//-
}
//-
//| check for close order conditions
//自定义函数(无返回值)思洛策略|
//-
Void CheckForClose()//平仓检查(平仓条件及处理决定)
{
Double ma//定义本地变量ma小数类型
//-只有当一个K关闭另一个新的东西时才交易。
If(卷[0]1)return;//如果当前Kline的交易为1,则返回
//- get移动平均值//获取平均值
Ma=IMA (null,0,moving period,moving shift,mode _ SMA,price _ close,0);
//获取基于当前收盘价计算的平均值线值
FOR(INT I=0;IORDERSTOTAL();I) //阶次周期(变量i=1中的订单总数,一次增加1)
{
If (orderselect (I,select _ by _ pos,mode _ trades)==false)break;
//如果该系统没有交易的仓库,请脱离循环。
If(OrderMagicNumber())!=MAGICMA || OrderSymbol()!=Symbol())continue;
//如果仓库编号不是系统编号,或者仓库货币对不是当前货币对,请继续选择
if(order type()==op _ buy)
//如果是多页
{
if(open[1]maclose[1]ma)order close(order ticket()、orderlots()、bid、3、white)
//如果按第一个K线开盘价穿均线(即开盘价高于均价,收盘价低于均价)。
多个平坦的仓库(仓库编号、仓库数量、购买价格、滑点=3,用白色箭头表示)
布雷克;//偏离循环
}
if(order type()==op _ sell)
//如果为空
{
if(open[1]maclose[1]ma)order close(order ticket()、orderlots()、ask、3、white)
//如果对第一条K线的开盘价采用均线(即开盘价低于均价,收盘价高于均价)。
公平窗口(仓库编号、仓库数量、售价、滑点=3,用白色箭头表示)
布雷克;//偏离循环
}
}
//-
}
//-
//| Start function |
//-
Void start()//主程序-每个交易价下的计算过程
{
//- check for history and trading-确认交易历史记录
if(bars 100 | | istradeallowed()==false)return;
//kk行数小于100或允许智能事务=false时返回
//-calculate open orders by current symbol计算当前货币对的仓库打开订单
if(calculatecurrentorders(symbol())=0)checkforopen();
//如果计算出当前货币对仓库订单数=0(即无仓库),则执行仓库检查。
ElseCheckForClose();
//否则(即,如果当前存在仓库清单),则执行仓库检查。
//-
}
二、本EA战略分析
根据本EA系统的源代码,可以使用以下策略进行分析:
1、技术指标:12个周期平均系统;
2、幻灯片点:3分;
3、开放式平仓规则:Kay线穿均线,无仓库,开放式多仓;有空仓库的时候,平空的仓库;
如果在Kk线下穿均线,如果没有仓库,就打开空仓库。有多仓时,平多仓。
4、图片标志:打开多个仓库时,图片上会显示红色箭头。平仓,白色箭头标记;
打开空仓库时,图中没有蓝色箭头。平仓后,将显示白色箭头。
三、模拟交易中系统的结果分析
该EA系统经过详细分析,可以看到EA系统的基本结构和相关战略。下面是EA在模拟盘中1分钟EURUSD(欧元兑美元)的开仓、平昌结果图。
在该系统的模拟交易过程中,该战略的运营思想基本反映出来,其中4个订单中的2个空白订单和2个以上订单如下图所示。
【免责声明】本站收藏的文章均来源于网络,其原创性、真实性以及文中陈述文字和内容未经本站证实,所以对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请自行参考,并核实相关内容。如有侵权,可通过底部联系方式,做删除处理。
1.投资有风险,交易需谨慎!本站所有数据资料均来自网络,仅作为用户的参考信息~本站不为所有内容负责~