int Fun_Error(int Error) // 处理错误的功能 { switch(Error) {// 不是关键的错误 case 4: Alert("Trade server is busy. Trying once again."); Sleep(3000);// 简单的解决方案 return(1);// 退出函数 case 135:Alert("Price changed. Trying once again..."); RefreshRates();// 刷新利率 return(1);// 退出函数 case 136:Alert("No prices. Waiting for a new tick..."); while(RefreshRates()==false) // 等待一个新的刻度线 Sleep(1);// 在循环中暂停 return(1);// 退出函数 case 137:Alert("Broker is busy. Trying once again."); Sleep(3000);// 简单的解决方案 return(1);// 退出函数 case 146:Alert("Trading subsystem is busy. Trying once again..."); Sleep(500);// 简单的解决方案 return(1);// 退出函数 // 严重错误 case 2: Alert("普通错误。")。 return(0);// 退出函数 case 5: Alert("Old terminal version."); 工作=false。// 终止操作 return(0);// 退出函数 case 64:Alert("账户被封锁。")。 Work=false;// 终止操作 return(0);// 退出函数 case 133:Alert("Trading forbidden."); return(0);// 退出函数 case 134:Alert("没有足够的钱 来执行操作。"); return(0);// 退出该函数 默认情况下。Alert("Error occurred: ",Error); // Other variants return(0);// 退出该函数 } }
有些东西可以作为EA的选项加入。
- 独特的魔法数字计算,当经纪人改变符号名称(例如从 "EURUSD "到 "EURUSD.m")时,也许能确保给出相同的结果
- 订单管理选项(追踪止损,收支平衡(以点或其他数值为单位,如psar,x条高/低,ma,等等),订单关闭)
- 通过订单票 进行广泛的订单信息处理(文本(或csv)文件似乎是最简单的合适方式)。GV是有限的,OrderComment()可以由经纪人改变。
我对分享我的自定义指标和EA有点担心,因为如果我这样做,每个人都开始使用它们,它们就不会再工作了......还有人同意吗?
我知道这听起来有点自私......但当我达到500万时,我将会分享;-)
大家好,如果我们只想得到简单和一般的解决方案,MQL4教程中的例子就足够了吗?
我的EA交易是按条计算,而不是按点计算。
int Fun_Error(int Error) // 处理错误的功能
{
switch(Error)
{// 不是关键的错误
case 4: Alert("Trade server is busy. Trying once again.");
Sleep(3000);// 简单的解决方案
return(1);// 退出函数
case 135:Alert("Price changed. Trying once again...");
RefreshRates();// 刷新利率
return(1);// 退出函数
case 136:Alert("No prices. Waiting for a new tick...");
while(RefreshRates()==false) // 等待一个新的刻度线
Sleep(1);// 在循环中暂停
return(1);// 退出函数
case 137:Alert("Broker is busy. Trying once again.");
Sleep(3000);// 简单的解决方案
return(1);// 退出函数
case 146:Alert("Trading subsystem is busy. Trying once again...");
Sleep(500);// 简单的解决方案
return(1);// 退出函数
// 严重错误
case 2: Alert("普通错误。")。
return(0);// 退出函数
case 5: Alert("Old terminal version.");
工作=false。// 终止操作
return(0);// 退出函数
case 64:Alert("账户被封锁。")。
Work=false;// 终止操作
return(0);// 退出函数
case 133:Alert("Trading forbidden.");
return(0);// 退出函数
case 134:Alert("没有足够的钱 来执行操作。");
return(0);// 退出该函数
默认情况下。Alert("Error occurred: ",Error); // Other variants
return(0);// 退出该函数
}
}
这可能是一个真正好的EA外壳/模板的基础。WHR是一位经验丰富的MT编码员。
它的初衷是作为有用的EA代码的来源,它不是一个 "即插即用 "的外壳。
我已经以几种方式更新了这个EA。
1.我修改了语法和变量名称,使其能够在当前版本的MQL4中编译。
我还增加了一些非常小的改动,以便它能够编译,并以 "Big Be "作为注释。
2.2.纳入了WHR放在线程中的所有额外代码部分。
我把它留在原地,但注释了被替换的部分。
在添加这些部分时可能会出现错误,尽管我已经尽可能地小心了。
缺乏与EA其他部分的完全整合也是可能的。
3.3.我还通过一个程序运行了它,该程序清理了文本格式以保证可读性。
它将开始在策略测试器中 运行。
它不会进行交易,因为进入规则的设置是留给你的。
我还没有进一步研究,因为我的时间还有其他要求。
需要的工作。
虽然整个过程中有评论,但许多需要澄清。如果不存在,也可以写出来。每个部分或功能是做什么的?
一个例子。CallAgain()说 "跳过无用的刻度",其方法或逻辑是什么?如果是追踪止损,它可能只取足够远的点位和/或在交易方向上的点位,但这需要一些研究来验证。
这样做将使它更好地发挥其作为思想来源的作用,并进一步实现作为EA外壳/模板的工作能力。
进一步测试。
添加一些进入规则,并测试每个部分是否在做它应该做的事。这需要在策略测试器中进行大量的研究。可能还要在这里和那里进行一些编码,以使它做它应该做的事。当它在那里工作时,再在模拟账户上进行大量测试。
警告。
至少有一个功能是不完整的,而且这段代码中可能有错误,或者在写完whrea后Metatrader发生了不允许的变化。
在不了解EA的情况下编写/使用它,有点像在不了解所有控制和如何使用它们的情况下试图驾驶飞机。
但是,按照你的意愿去做:这是你的钱。
请求
如果你有必要的广泛知识和一点时间,请帮忙。
大贝 (BigBe)
请你解释一下pips2dbl是什么?
要将PIPs转换为tick。
什么是TICK?-MQL4编程论坛
使用点数 意味着在4位数的经纪商、异类(例如,点差超过500点的USDZAR)和金属上的代码中断。计算PIP是什么并使用它,而不是点数。
如何用参数管理日元对?-MQL4编程论坛
以指数点定义的滑点 - 货币对 - 专家顾问和自动交易 - MQL5编程论坛