当年,要不是因为外汇买卖范畴渠道的各种暗淡,我估计会一向斗争在外汇和黄金种类上,外汇程序化买卖也不会停下脚步。
假设外汇范畴和股票及期货能够实在处于一个公正的线上,我必定会挑选做外汇买卖。不管是成交机制,仍是买卖准则,买卖时刻,外汇买卖都大大优于股票买卖及期货买卖。
且不管简直24小时工作的外汇走势能供给更多的买卖时机,单单是单子成交方面,外汇都是远胜于股票及期货。例如,我从前的期货程序化单子或许人工挂单,价格都到过目标价格几回了,但便是无法成交。这些是成交机制的问题,期货是促成成交机制,你要成交一个买单,必须有一个对应的卖单促成到了才干成交。同一个点位假设你的请求前面还有较多的请求(比方前面现已有一万手),你要等前面的一万手都成交了才干轮到你这笔请求成交。
这就造成了依据信号有时分该进的单没进到,该出的单没出掉,或许没有能够依照既定方案及点位来成交,这对买卖产生必定的影响。
关于期货程序化而言,这个促成成交的机制,也会导致期货程序化的测验和实盘作用无法完全一致。例如测验的时分体系只会依照信号去指示出开仓点位和平仓点位,并核算出点位盈亏成果。但测验的成果不会考虑实盘买卖的时分信号能否成交和怎么成交,所以实盘的成果和测验的成果是有或许不相同的。
依照促成成交机制,假设实盘中呈现买卖信号,体系天然会把开仓或平仓请求宣布去,可是假设动摇较剧烈,有或许还没轮到自己的请求单促成成交,价格就现已变动了,终究导致实盘没有单子成交,或许哪怕设置了短时刻若不成交就撤回原请求偏从头发新的请求,终究的成交也脱离了本来信号的志愿和点位。
我的程序化就经历过试过买卖信号尽管出来了,买卖程序也把开仓或平仓的请求宣布去了,但终究没有实在单子能够成交的状况。当然这仅仅期货程序化的问题之一,而期货程序化的问题并不止于这一个。
可是做过外汇的朋友都知道,外汇基本上只关键位抵达了单子必定成交。当年我挂外汇EA,没有遇到过有买卖信号出来但无法按信号成交的工作。
做股票和期货,最大优胜的当地,便是资金安全肯定有确保。外汇买卖的各方面都挺好,惋惜全部渠道(在咱们大陆)都没有资金安全的保证。比照之下,仍是资金安全最重要,不是吗?
假设未来咱们做外汇能够定心,我天然还会从头做起外汇来。今日讲一下外汇MT4编写买卖EA而且测验的大致进程。
第一步,翻开MT4,找到MQ言语修改器创立一个新EA,若有不会的朋友可参阅下面两个操作即可。
在软件上方找到修改器按钮(新订单按钮周围那个像书本相同的按钮),点击翻开后创立一个EA。也能够在导航器中找到EA买卖一栏,鼠标右键挑选“MetaEtidor”创立一个EA。第二步,依照MQL导向,一向“下一步”直到完结。这进程只需求自己给EA起个姓名就能够了,比方下面我树立一个叫“双均线”的EA。
第三步,在EA修改器里修改买卖公式。
MT4的EA编写大约(默许)有以下几个部分,都是英文和代码,详细意思不逐个深究,感爱好的朋友请材料查找相关材料去学习即可。
写代码并不是好玩的事,除非有爱好或许很酷爱。我写代码水平不可,仅仅为了要搞自己需求的EA才自学了点皮裘。
关于自己现已有代码的朋友,能够把修改区域清空,并仿制自己的代码进去就能够了。代码编写完结后,点击上方“编写”打钩按钮,让软件检测是否有代码过错。假设有过错,会在底下有阐明,假设无误,会显现没过错(0 errors)
我自己有个双均线穿插的EA代码,这儿共享出来,仅供参阅。
//+------------------------------------------------------------------+
//| 双均线.mq4 |
//| |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "metaquotes.net"
//--- input parameters
extern int shortp=10;
extern int longp=20;
extern double Lots=0.1;
int Crossed (double line1 , double line2)
{
static int last_direction = 0;
static int current_dirction = 0;
if(line1>line2)current_dirction = 1; //up
if(line1<line2)current_dirction = 2; //down
if(current_dirction != last_direction) //changed
{
last_direction = current_dirction;
return (last_direction);
}
else
{
return (current_dirction);
}
}
int start()
{
int cnt, ticket, total;
double shortma, longma;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
shortma = iMA(NULL,0,shortp,0,MODE_SMA,PRICE_CLOSE,1);
longma = iMA(NULL,0,longp,0,MODE_SMA,PRICE_CLOSE,1);
//开仓----------------------------------------------------------------
int isCrossed = Crossed (shortma,longma);
total = OrdersTotal();
if(total < 1)
{
if(isCrossed == 1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"My MA",12345,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
if(isCrossed == 2)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"My MA",12345,0,Red);
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);
}
//平仓-------------------------------------------------------------------------------------------------------
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) // long position is opened
{
if(isCrossed == 2)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);// close position
return(0); // exit
}
}
if(OrderType()==OP_SELL) // go to short position
{
if(isCrossed == 1)
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);// close position
return(0); // exit
}
}
}
}
return(0);
}
代码里均线参数是10和20并非表明这两数字是最好的参数,实际上也没有哪个是最好的参数,任何目标,任何参数,都只能够习惯某个种类或许某个时期或许某种类型的走势,不或许应对得了市场上全部行情。
任何目标,一旦你固定为某个参数,或许又有人以为你是参数拟合。所以声明一下,参数是能够自在改动的,请在上面自己修改为自己需求的参数即可。
第四步,把编写好的EA加载到走势图里。
导航器的EA买卖栏里自身现已有默许的两个EA,一个是MACD目标,一个是均线Moving目标。当你编写好自己的EA,它会呈现在导航器的EA买卖栏目下。
鼠标对着EA点右键挑选“附加到图标”,或许鼠标直接拖到走势图上。在拖进去的进程中,记住在EA特点框“常用”项下的“答应实时主动买卖”打钩。确认后,EA圆脸就呈现在走势图的右上角方位了。
第五步,对EA进行测验。操作如下:
软件上方点“显现”,再点“EA买卖测验”调出测验设置终端。挑选好需求测验的EA、测验的买卖种类、周期盘面等等,就能够点“开端”按钮进行测验了。
最好是把“复盘显现”的勾给打上,这样能够看到复盘测验的进程。
复盘测验的进程能够看出信号是否依照预订的规划进行,复盘显现后边的速度条能够快可慢,依据个人需求。能够一边看复盘测验进程,一边看净值图,以便调查什么样的行情会让产生盈余,什么样的行情会导致资金亏本回撤。
假设需求测验跨度很长的周期,需求先下载该种类更前期的前史数据。在“东西”中的“前史数据中心”里边下载即可。
外汇软件中,MT4现在依然是比较盛行的,但盛行的主角迟早会转移到MT5上,主张做外汇的朋友多多学习MT5,究竟两者的EA代码编写规矩不相同。
本次的内容就到这儿吧,需求学习的朋友能够把文章保藏起来渐渐看。重视我,别跟丢了。