MT4自带EA解析

1606
1606 这家伙很懒,还没有设置简介...

0 人点赞了该文章 · 15 浏览

MT4自带EA解析

均线穿越买卖系统EA详解

MT4平台自带了一个自动买卖的EA目标,那就是Moving Average ,下面具体诠释该系统每条语句的功用说明,以便深入熟悉EA的编程内核。

//+------------------------------------------------------------------+

//| Moving Average.mq4 |

//| Copyright ?2005, MetaQuotes Software Corp. |

//| http://www.metaquotes.net/ |

//+------------------------------------------------------------------+

#define MAGICMA 20050610

//宏界说号令#define用法,界说本EA操纵的定单的唯一标识号码,由此可以实现在同一账户上多系统操纵,各操纵EA的定单标识码分歧,就不会相互误操纵。凡是EA皆不成缺少,很是很是重要!

extern double Lots = 0.1; //每单的买卖量

extern double MaximumRisk = 0.02;//本系统最大风险系数,即可以动用总资金的2%

extern double DecreaseFactor = 3; //下跌身分个数

extern double MovingPeriod = 12; //均线的计较周期=12,为MA必须的参数之一;

extern double MovingShift = 6; //均线转移量=6,为MA必须的参数之一;

//extern 肯定从内部法式输入的变量, 会间接显现输入数据窗口。数列自己不能作为内部变量。

留意:iMA中的MovingShift(均线偏移量)是指均线目标在图上绘制时向左、右移动的K线个数,首要为了使图中成果更都雅,并不会对MA的计较数值发生变化。其中,该参数为正时,代表向右移动;为负值,则代表向左移动。

//+------------------------------------------------------------------+

//| Calculate open positions

自界说函数(返回-整数型数据) 仓单查询与统计 |

//+------------------------------------------------------------------+

int CalculateCurrentOrders(string symbol)//函数感化,计较当前持仓单的数目

{

int buys=0,sells=0;

//界说两个部分变量,整数型,buys——多单数,sells——空单数,用于定单的统计

//----

for(int i=0;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 size

lot=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]

//假如前1根K线下穿均线(即K线的开盘价大于均线值、开盘价小于均线值)

{

res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);

//发送仓单(当前货币对,卖出偏向,开仓量计较(),买价,滑点=3,无止损,无止赢,定单编号,标上红色箭头)

return; //返回

}

//---- buy conditions-买入条件

if(Open[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

{

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);<="" span="">

//假如第1根K线开盘价下穿均线时(即开盘价高于均价而开盘价低于均价时),

则停止多头平仓(仓单编号,持仓数目,买价,滑点=3,用红色箭头显现)

break;//跳出循环

}

if(OrderType()==OP_SELL)

//假如是空单

{

if(Open[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 (即没有仓单),则停止开仓检查。

else CheckForClose();

//否则(即当前已经有仓单时),则停止平仓检查。

//----

}

本EA战略分析

按照本EA系统的源代码可以分析出:它利用的战略以下:

1、技术目标:12周期均线系统;

2、滑点数:3个点;

3、开平仓法例:K线上穿均线时,无仓,则开多仓;有空仓时,则凭空仓;

K线下穿均线时,无仓,则开空仓;有多仓时,则平多仓。

4、图上标识:开多仓时,在图中标示红色箭头;平仓时,则标示红色箭头;

开空仓时,在图中标未蓝色箭头;平仓时,则标示红色箭头。

该系统在模拟买卖中的成果分析

以上对该EA系统停止了具体的剖析,从中可以看出EA系统的根基结构与相关战略。下面是该EA在模拟盘中1分钟K线图EURUSD(欧元对美圆)中的开仓、平仓成果图。

在该系统的模拟买卖进程中,根基上表现了本战略的操纵思惟,其中四个下单中,两个空单和两个多单,以下图所示。

MT4自带EA剖析

被动支出是实现财政自在的重要身分,成为一个优异的买卖者无疑艰辛而坎坷,可是借助一个专业的团队和优异的系统却可以事半功倍,外汇EA买卖不需要自己盯盘,只需要交给专业的团队自动化买卖+野生预警,便可以实现24小时不中断自动盯盘,自动下单,免除野生下单的诸多范围,收益稳定,月化率稳定在5%-15%

感激阅读,文章内容仅供参考,不组成投资倡议。

凡说明为其他媒体来历的信息,均为转载,版权归版权一切人一切。

若有未说明作者及出处的文章和材料等素材,请版权一切者联系我们,我们将实时补上大概删除。

END

发布于 2023-03-27 12:24

免责声明:

本文由 1606 原创或收集发布于 火鲤鱼 ,著作权归作者所有,如有侵权可联系本站删除。

火鲤鱼 © 2024 专注小微企业服务 冀ICP备09002609号-8