MT4 跟单ea源码码怎么限制时间

一步一步解读MT4的例子EA(init,sta… - CSDN博客
一步一步解读MT4的例子EA(init,sta…
在MT4安装后,默认会给用户提供几个例子程序,这些程序对于新学习EA开发过程中有很大的帮助,下面我们就来对MACD
Sample这个例子EA来做个解读,来看看别人是如何开发一个EA的。
首先是注释,在MQL语言中所有//的这一行就是注释行,系统本身不会去执行它,它只是用来解释当前代码的含义的,我们在代码中加入这些注释为了是让我们能够清楚的阅读代码的含义,在程序中加入详细的注释是一个很好的编程习惯,我们鼓励大家多加入注释。很多人觉得注释这东西因为没用在写代码中觉得很麻烦而忽略它,但是即使是自己编写的程序如果不加注释过几天就会忘记意思,还要再一行一行地看这些代码,所以注释是非常重要的。
下面这些就是定义变量,我们发现前面加上了extern关键字,如果在定义变量的前面有这个词说明这个变量将会被作为EA运行的参数,举个例子,比如我要编写一个EA,在使用过程中我想改变它的止盈和止损值,如果我程序都是事先编好的止盈止损,那么以后要改动它必须要改代码,这样不仅麻烦也不灵活,如果我把这些信息作为EA运行参数,那么在EA运行中就可以随时调整它了。
extern double TakeProfit = 50;
extern double Lots = 0.1;
extern double TrailingStop = 30;
extern double MACDOpenLevel=3;
extern double MACDCloseLevel=2;
extern double MATrendPeriod=26;
上面定义了6个变量并且都是当作参数,这里设定变量名称的时候尽量使用用户可以理解的词汇,在EA的参数设置里这些变量名就是参数的名字。值得注意的是EA里变量名称是可以用中文的。
int start()
start()函数是EA运行的核心,MQL语言规定了几个默认函数,其中EA第一次运行时会调用init()函数,在这个函数里我们可以放入一些需要初始化的信息,start()函数中放我们EA的核心代码,每次一个TICK(换句话说就是新报价)来到后,系统会自动调用start()函数。deinit()函数是当EA关闭的时候调用的,这里放一些我们程序停止后需要“善后”的代码。start()函数是必须要有的,其它两个函数如果不需要可以不用写。
if(Bars&100)
& Print("bars less than 100");
& return(0); &
上面代码的意思是如果当前图表中的k线少于100根将会在日志信息里输出提示信息并且结束start()函数的执行。return的意思是返回,如果在程序中判断出有错误,下面的代码无法继续执行了,我们调用return()函数让他退出start()函数的执行。
if(TakeProfit&10)
& Print("TakeProfit less than 10");
& return(0); &// check
TakeProfit
上面的代码意思是如果参数里的TakeProfit变量小于10也提示一条信息并结束执行,TakeProfit从字面的意思中我们可以知道是止盈的意思,有些平台会限制下单时的止盈点数不得小于某个点,如果小于某值会在下单时报错,为了避免这种错误我们会限制参数中止盈的设定。
其实这里可以调用MarketInfo()函数得到我们当前平台中允许的止盈止损最小值从而根据平台的不同自动计算出最小的止盈点数,详细情况请参阅文档MarketInfo()函数的描述。
MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
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,PRICE_CLOSE,0);
MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);
以上语句是调用了MQL的一些内置指标函数,在MQL语言中,对于常用的指标如均线,MACD,KD等MQL已经提供给我们现成的函数,我们只要调用他即可得到指标的值(相见文档技术指标部分:/cn/indicators)。
就上面的代码,MacdCurrent的值是参数为12,26,9的MACD主线当前K线的值,MacdPrevious则是MacdCurrent前一根K线的值,SignalCurrent和SignalPrevious则是相同参数信号线的当前值和前一根值。
后两个是调用均线指标函数,这里的均线周期参数则是使用了EA的参数变量MATrendPeriod,这样写是个好习惯,把调用指标的参数放到EA参数里,这样可以随时在运行中调整这些参数方便我们改变策略。MaCurrent和MaPrevious是得到26均线的当前K线值和前一根的值。
total=OrdersTotal();
if(total&1)
上面的代码就是判断我们当前是否有单子在做,他调用了OrdersTotal()函数,它可以计算当前账户中一共还没有平仓的单子和挂单的个数,如果它小于1说明当前没有任何单子,这种判断方法只是一种简单的判断法,如果这个EA在运行过程中人为也去下单则EA永远不会下单了,如果要更加精确的计算这个EA所下的单子数量还需要利用其他方法,这些技巧我们会在以后的文章中介绍。
if(AccountFreeMargin()&(1000*Lots))
& Print("We have no money. Free Margin = ",
AccountFreeMargin());
& return(0); &
上面的代码是计算当前的剩余保证金是否小于1000,如果太少钱会不够用,所以会输出下当前的保证金还剩多少并退出。
if(MacdCurrent&0 && MacdCurrent&SignalCurrent
&& MacdPrevious(MACDOpenLevel*Point) &&
MaCurrent&MaPrevious)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd
sample",16384,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);&
上面这段就是多单开仓部分了,条件是这样:如果当前MACD主线在0轴以下,MACD“金叉”,MACD的主线不在0轴附近(这块是EA的参数来指定0轴附近多少点)并且还要当前的均线是上升的。
这里最精彩的部分在于如何判断MACD“金叉”,如何判断MACD值不在0轴附近和均线目前是上升的还是下降的。
“金叉”的判断是EA里用的比较多的,这里我们用了判断大小的方法就能很容易的计算它,首先得到MACD两根线当前的值和上一根K线的MACD值,如果上一根K线的MACD主线大于信号线并且当前的MACD主线小于信号线那么就相当于这两根线做了一个“交叉”,因此我们可以认为MACD“金叉”了。从这里我们也能看出来用计算机的方法来解决我们人类所认知的问题靠的都是这种具体数值的计算,所以计算机还是比较“死板”的,如果两根线“扭”在了一起那么用计算机程序很难判断出来,这些就是目前计算机程序的缺点。
本文已收录于以下专栏:
相关文章推荐
MT4自带的EA,高手做的详细注解
//+------------------------------------------------------------------+
//|  ...
MT4平台自带的EA :Moving Average 详解
使用过MT4平台的人都知道,MT4平台自带了一个自动交易的EA指标,那就是Moving Average ,下面我们详细解释一下该指标的语句...
在前面的序列中,我们知道Basic Paxos可以用来确定1条日志。而Multi-Paxos就是针对每条日志都执行1个2PC的Paxos协议,从而确定多条日志,也就是一个日志流。有了日志流,就能基于日...
小e随笔:今天小e的博客正式开通,欢迎同学们莅临指导
blog:http://blog.csdn.net/elvis_dataguru
案例2:非归档模式下部分脱机备份(tablespace of...
他的最新文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)请教一个关于提醒时间的问题 - MT4指标EA分享 - 智能交易网,程序化交易,自动交易,量化交易 - Powered by Discuz!
后使用快捷导航没有帐号?
只需一步,快速开始
扫一扫,访问微社区
查看: 1127|回复: 7
请教一个关于提醒时间的问题
各位高手,我想请教一下,我用ALERT在做指标时,有两个问题让我很困惑
第一个就是提醒次数或提醒时间的问题,当价格到达某条均线价格时,会反复好久才过去,我就是说报警会有很多次,不停的响,不知怎么设置可以解决这个问题
第二个就是alert默认是默认一种alert.wav,我想让它到达不同预设值时,用不同声音来提醒,我尝试过用sleep,playsound全没有,请问怎么解决,感谢。
alter是 当有一个价格波动的时候 就判断是否满足报警条件 满足就报警啊。
那是因为 你的条件一直满足 他才报警的啊。
你想让他只抱一次 就得用一个变量开关来控制 满足后 报警 然后把开关关闭
alter是 当有一个价格波动的时候 就判断是否满足报警条件 满足就报警啊。
那是因为 你的条件一直满足 他才 ...
高手,我不太懂,你能不能把开关写一下,或者,你曾经含有开关的例子给一个,十分感谢
谢谢楼主分享!!!
谢谢楼主分享!!!
谢谢楼主分享!!!
谢谢楼主分享!!!
Powered by鏈?枃鏉ヨ嚜
wangtong0532鍙戝竷杩囩殑甯栧瓙
璇锋暀锛屽?浣曠敤涓

我要回帖

更多关于 ea时间限制 的文章

 

随机推荐