Latest blog entry

关于MT4新版本中小数位的问题

随着MT4升级到最新的220版本,MT4中的报价也分别更改为5位或3位(日系货币对)了。这对我们ea的使用和开发产生了不小的影响。举个例子:一张EURUSD的多单,开仓价是1.2800,止损20点,就应该是1.2780;在升级到5位小数位后,开仓价就成了1.28000,这时候如果还是用20点止损的思路,止损就成了1.27920!在开发或使用ea的时候,往往会因为这样的原因,导致止损价格或止盈价格与现价相距太近而报错。如果你的EA是基于4位或2位小数位(日系货币对)来开发的,建议检查一遍代码,看看逻辑上会不会出现这样的错误。

11月 25, 2008 | 2条评论 | Permalink

善用MT4中的全局变量GlobalVariable

全局变量在MT4编程中有两层含义,一是编程领域中常规的全局变量含义,即独立于所有函数之外定义的变量,生命周期覆盖整个程序;还有一个就是MT4中独有的:在同一MT4客户端内,所有的指标、脚本和EA都可共享同一全局变量:
GlobalVariable,这个概念类似于编程领域中的共享内存区域;下面简单介绍一下其用法。
首先是必须用到的三个函数:GlobalVariableSet()、GlobalVariableGet()、GlobalVariableDel()。顾名思义,这三个函数的作用分别是设置、获取和删除GlobalVariable。在任何一个指标、脚本和EA中,可用GlobalVariableSet来设置一个GlobalVariable,如:

GlobalVariableSet(“test”, 1.2345);

这就设置好了,把这个指标挂到任何一张图表之上后,在同一个MT4客户端下运行的任何指标、脚本和EA都能读取到这个GlobalVariable了,读取方法:

GlobalVariableGet(“Test”);

最后,如果我们不需要这个GlobalVariable了,就可以这样把它删除了:

GlobalVariableDel(“Test”);

需要注意:一是GlobalVariable只能是double类型的数据,不能把string、数组之类的赋给它,否则编译的时候虽然不会报错,但其实是无效的;二是GlobalVariable的生命周期是名符其实的“全局”,在设置了一个GlobalVariable后,如果不用GlobalVariableDel来删除它,它将会一直存在,无论设置它的指标、脚本和EA是否已被删除,甚至MT4关闭后也会存在,下次重新启动MT4时这个GlobalVariable仍然是可用的!善用这点,在设计交易程序的时候可说是如虎添翼,呵呵!

11月 8, 2008 | 发表评论 | Permalink

一个改进的Comment函数

这个函数是我在forexfactory.com论坛上看到的,主要作用是在图表上输出多行的Comment(注释),觉得挺有用,所以和大家分享一下:

//Determines how many of your previous comments are shown
extern int MaxCommentsToShow=25;
//An array to hold all of the comments
string allcomments[];
 
//+------------------------------------------------------------------+
//| Manage comments - Written by DMS                                           |
//+------------------------------------------------------------------+
void managecomments(string addcomment)
   {
   string tempcomments[];
   int commentscroll;
   string output;
   int CommentCount = ArrayRange(allcomments, 0);
   if(CommentCount<MaxCommentsToShow)
      {
      ArrayResize(tempcomments,CommentCount+1);
      ArrayCopy(tempcomments,allcomments,1,0,WHOLE_ARRAY);
      }
   else
      {
      ArrayResize(tempcomments,MaxCommentsToShow);
      ArrayCopy(tempcomments,allcomments,1,0,MaxCommentsToShow-1);
      }   
   tempcomments[0]=addcomment;
   CommentCount = ArrayRange(tempcomments, 0);
   ArrayResize(allcomments,CommentCount);
   ArrayCopy(allcomments,tempcomments,0,0,CommentCount);
 
   for(commentscroll=0;commentscroll<CommentCount;commentscroll++)
      {
      output = output + allcomments[commentscroll] +"\n";
      }    
   Comment(output);
   }

那么怎么用呢?很简单,直接调用行了:

managecomments("show this on my chart!");
11月 8, 2008 | 1条评论 | Permalink

第一期MT4编程入门学习班现在开始接受报名

经过一段时间的筹备策划,现在第一期的MT4编程入门学习班现在开始接受报名了。这个学习班主要是针对之前从未接触过MT4编程的朋友而设计的,从零开始教授MQL语法。详情请下载参阅招生简章。

招生简章下载

11月 3, 2008 | 2条评论 | Permalink
粤ICP备08108171号