如何为多个交易对运行EA? - 页 3 12345 新评论 Huck Finn 2009.05.21 18:43 #21 雅克,我感谢你对这个话题的持续关注。 我仍然在调试我的第一个货币的EA,但如果发现合适的话,我打算在几个货币上使用它。 在这个前提下,我一直在考虑如何实现这一概念的策略。 因此,我对这个主题感兴趣。 根据你的要求,我又准备了三个货币对的图表,在这样做的时候,我发现其中两个货币对在24小时内有超过32,000个点(Excel中的图表数据限制)。 因此,我不得不将图表分成两个时期(第一个12小时,第二个12小时)。 为了保持相对一致,我把所有三个货币对分成了12小时的时段。 有一点要记住,这些图表上的垂直比例在水平线之间是成比例的,但水平比例不是与时间成比例的(即你不能假设1/12的刻度代表一个小时)。 我认为从这些图表中得到的最大启示是,所有的交易对在24小时内都有一些时间段,在这些时间段内,刻度之间有明显的间隔。 因此,如果你将多个货币对合并到一个EA中,我认为采用 "While "循环是明智的。 StraightTrader的参考资料https://book.mql4.com/special/index,题为 "复杂程序的一般特征",对这种技术有很好的讨论,并在本文的开头部分有一个图表。 GBPJPY 24小时内44,834点 欧元兑日元24小时内37,140点 英镑兑美元 24小时内29,313点 欧元兑美元24小时内22,627点 欢呼吧! slacktrader 2009.05.27 09:52 #22 FXtrader2008: 因此,如果您将多个货币对合并为一个EA,我认为采用 "While "循环是明智的。 StraightTrader的参考资料https://book.mql4.com/special/index,题为 "复杂程序的一般特征",对这种技术有很好的讨论,并在本文的开头部分有一个图表。 这正是情况。在一个EA中的多个货币对->使用while loop方法,而不是通过incomming ticks开始函数激活。 我想反对一个EA使用一个货币对。 我的长期方法是一个多币种多策略的EA。前段时间我准备了通用专家顾问方案,实现了其中一些想法。 后来,在我的帖子中没有提到,我接着开发了这个代码,并开始了谷歌代码项目,名为 Universaltrader。这个项目可以满足你的期望。唯一没有实施的是注意到的While cycle方法(易于实施)。 MULTICURRENCY MULTISTRATEGY EA的一些优势。 所有的策略都在一起 可以同时调整/设置所有的策略,也可以单独设置 可以开启/关闭不同的策略/货币对 我相信还有很多优点。 劣势。 一次只能回测一个货币对 - 你必须在关闭其他货币对的情况下,对你交易的货币对进行多次回测。 性能问题 - 我只在回测中注意到性能问题,但我确信在实际交易中也是如此 - 这取决于实施的策略的复杂性和数量。 这个项目还需要改进,如果有人有兴趣,我可以邀请他加入这个谷歌代码项目。 目前的脚本附在这里。 附加的文件: universaltradermultistrategy.mq4 43 kb jacques366 2009.06.06 21:51 #23 FXtrader2008 wrote>> 雅克,我感谢你对这个话题的持续关注。我仍然在调试我的第一个货币的EA,但如果发现合适的话,我打算在几个货币上使用它。在这个前提下,我一直在考虑如何实现这一概念的策略。因此,我对这个主题感兴趣。 根据你的要求,我又准备了三个货币对的图表,在这样做的时候,我发现其中两个货币对在24小时内有超过32,000个点(Excel中的图表数据限制)。因此,我不得不将图表分成两个时期(第一个12小时,第二个12小时)。为了保持相对一致,我把所有三个货币对分成了12小时的时段。 有一点要记住,这些图表上的垂直比例在水平线之间是成比例的,但水平比例不是与时间成比例的(即你不能假设1/12的刻度代表一个小时)。 我认为从这些图表中得到的最大启示是,所有的交易对在24小时内都有一些时间段,在这些时间段内,刻度之间有明显的间隔。因此,如果你将多个货币对合并到一个EA中,我认为采用 "While "循环是明智的。StraightTrader的参考资料https://book.mql4.com/special/index,题为 "复杂程序的一般特征",对这种技术有很好的讨论,并在本文的开头部分有一个图表。 GBPJPY 24小时内44,834点 欧元兑日元24小时内37,140点 英镑兑美元 24小时内29,313点 欧元兑美元24小时内22,627点 欢呼吧! 非常感谢你的图表。 让我们选择一个循环,而不是嘀嗒运行激活,对于那些需要分钟精度的人来说,这将是更科学的,而且实现起来也不是什么大问题。另一个好处是,你可以将EA附加到你想要的任何货币对上(当它在图表上画出对象时很有用)。 干杯 joetrader 2010.01.22 05:12 #24 cloudbreaker wrote>> 而你可以通过使用MarketInfo()函数检索当前图表之外的符号的最新卖出和买入价格。 所以你有如下选择。 - 将同一个EA连接到许多图表上,为每个图表的原始符号进行操作(使用Ask和Bid内置变量)。 - 将一个EA连接到一个特定的图表上,对所有选择的符号进行操作(对非本地符号使用MarketInfo()函数)--只是使用本地符号的ticks作为触发装置 - 在不同的图表上有主从EA,其中一个由另一个触发(例如,一个将数值写入文件,另一个不断读取文件,直到找到该数据,然后进行交易)。 现在,我正在使用这些策略中最简单的策略--我在四种货币的三个时间框架上有一个EA,所以总共有12个。它们都被设置为在时间框架的第一个刻度上运行。然而,我遇到了一个问题,即MT4并不总是执行所有的EA。我在启动函数后加了一个打印语句,想看看发生了什么,结果只找到了四个EA中的三个,例如H1,但它在不同的时间遗漏了不同的货币对,而且除了每个货币对的优化设置外,EA是相同的。 问题--当多个EA被设置为同时运行时,MT4是否一次只执行一个EA? 一个EA的执行是否以任何方式依赖于另一个EA的执行(除了交易环境繁忙),还是完全独立? 如果是这样,我可以使用第二个选项,我只是想让EA尽可能的简单,因为至少对我来说,我写的越复杂,我犯的错误就越多。 gordon 2010.01.22 05:26 #25 joetrader: 现在,我正在使用这些策略中最简单的策略--我在四个货币的三个时间框架上有一个EA,所以总共有12个。它们都被设置为在时间框架的第一个刻度上运行。然而,我遇到了一个问题,即MT4并不总是执行所有的EA。我在启动函数后加了一个打印语句,想看看发生了什么,结果只找到了四个EA中的三个,例如H1,但它在不同的时间遗漏了不同的货币对,而且除了每个货币对的优化设置外,EA是相同的。 问题--当多个EA被设置为同时运行时,MT4是否一次只执行一个EA? 一个EA的执行是否以任何方式依赖于另一个EA的执行(除了交易环境繁忙),还是完全独立? 如果是这样,我可以使用第二个选项,我只是想让EA尽可能的简单,因为至少对我来说,我写的越复杂,我犯的错误就越多。 我有多个EA在图表上运行,没有这样的问题。就我所知,它们是同时运行的,只有当其中一个使用交易环境时,它们才会相互注意。至于EA本身,它是完全独立的--每个EA都有自己的变量副本,等等。让我把话说清楚--你在12个图表上运行12个EA?也许你有内存问题? joetrader 2010.01.22 18:17 #26 gordon wrote>> 我有多个EA在图表上运行,没有这样的问题。就我所知,它们是同时运行的,只有当其中一个使用交易环境时,它们才会相互注意。至于EA本身,它是完全独立的--每个EA都有自己的变量副本,等等。让我把话说清楚--你在12个图表上运行12个EA?也许你有内存问题? 是的。 12个图表上的12个EA。 很新的电脑有6GB内存,所以我不认为 会是内存问题,但这值得考虑,我也不会排除它。 但你已经回答了我的问题--如果EA应该能够同时运行,那么也许我只是做错了什么。 这不是第一次了! 我将检查代码,再研究一下。谢谢你的帮助。 [删除] 2010.01.22 23:31 #27 你是否在MT4客户端的不同实例中运行图表?如果你在一个实例中打开所有的图表,那么它们将共享一个交易环境,你将需要在逻辑中编码以共享该环境--如果你的EA的行为意味着不止一个可能在同一时间执行交易操作。CB joetrader 2010.01.23 00:38 #28 cloudbreaker wrote>> 你是否在MT4客户端的不同实例中运行图表?如果你在一个实例中打开所有图表,那么它们将共享一个交易环境,你将需要在逻辑中编码以共享该环境--如果你的EA的行为意味着不止一个可能在同一时间执行交易操作。CB 是的 - 我在同一个MT4客户端上运行它们。 但我使用的是这篇文章中的一个交易背景繁忙 解决方案https://www.mql5.com/en/articles/1412,我没有得到任何交易背景繁忙的 错误。 它似乎甚至没有达到尝试开仓的地步。 在某些情况下,它似乎根本没有启动EA。 我这么说是因为我在启动函数的开头放了一个打印语句。 下面是我的启动函数。 void start(){//---- 只对新条的第一个点进行交易 if(Volume[0]>1) return;Print("Tick Check"); 如果(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose();} 我正在交易CADJPY,EURCHF,GBPUSD,和USDJPY。 而我得到的是这样的结果。 2010.01.22 8:59:45 [EAName]USDJPY,H1: Tick Check 2010.01.22 8:59:45 [EAName]CADJPY,H1: Tick Check 2010.01.22 8:59:45 [EAName]GBPUSD,H1: 勾选检查 2010.01.22 9:59:45 [EAName]EURCHF,H1: 勾选检查 2010.01.22 9:59:46 [EAName]GBPUSD,H1:勾选检查 2010.01.22 9:59:46 [EAName]CADJPY,H1:勾选检查 有些时候所有四个都会交易,有些只有三个。 如果是一个小时的H4交易,其中三个可能会交易,但通常不是所有四个和三个或四个H1交易。 我已经创建了一个变通方法,我把交易量增加到3或4个点,以确保所有的交易,但我正试图更好地了解MetaTrader,以便我能够解决根本问题。 所以我的问题是--既然我的EA只有一个tick可以运行, 它是否会同时运行每个EA,也许这就是它们没有全部运行的原因? 我的EA中有一个循环,比较了多达1500个过去的分形来寻找止损点,所以这可能需要一些时间。 再说一遍,可能只是我的代码中某个地方出了问题。 How to run EA Expert Advisor 的测试和优化 Dr. Tradelove 或我如何不再担忧并创建一个自训练 EA gordon 2010.01.23 07:09 #29 我猜测你的代码有问题,这与多个EA的主题无关。你需要针对那些没有开始使用标准Print()/Alert()方法的问题,看看哪些地方不工作。 Chee Chua 2010.08.16 13:44 #30 tigersoft: 这里有一个简单的代码,在一个图表上打开欧元兑美元和美元兑瑞郎。即使EA被添加到另一个图表上,它也会打开EURUSD和USDCHF。 //+------------------------------------------------------------------+ //| jkh.mq4 | //| Copyright © 2009, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" bool wannaBuy = true; bool wannaBuy1 = true; extern double LotSize = 0.01; extern string symbol1 = "EURUSD"; extern string symbol2 = "USDCHF"; extern int MaxDifference = 6; extern int Slippage = 3; extern int Magicnumber1 = 786; extern int Magicnumber2 = 123; int sendticket = 3; string pairs[18]; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- pairs[0] = symbol1; pairs[1] = symbol2; wannaBuy = true; wannaBuy1 = true; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- // Send order for EURUSD & USDCHF if (wannaBuy) { int ticket1; RefreshRates(); ticket1 = OrderSend(symbol1, OP_BUY, LotSize, MarketInfo(symbol1,MODE_ASK), Slippage, 0, 0, 0,0,Magicnumber1,0) & OrderSend(symbol2, OP_BUY, LotSize, MarketInfo(symbol2,MODE_ASK), Slippage, 0, 0, 0,0,Magicnumber2,0); if (ticket1 <0 ) { Print ("OrderSend failed with error #", GetLastError()); return(0); } wannaBuy = false; } //---- return(0); } //+------------------------------------------------------------------+ 不起作用? 用于回溯测试 得到了订单结束错误4106 订单发送功能 中的USDCHF符号名称不明 如果我在设置或EURUSD图表中选择符号EURUSD,Ordersend对EURUSD有效。 如果我换成另一个图表,我将得到EURUSD和USDCHF的未知符号。 谢谢!预先声明 12345 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
雅克,我感谢你对这个话题的持续关注。 我仍然在调试我的第一个货币的EA,但如果发现合适的话,我打算在几个货币上使用它。 在这个前提下,我一直在考虑如何实现这一概念的策略。 因此,我对这个主题感兴趣。
根据你的要求,我又准备了三个货币对的图表,在这样做的时候,我发现其中两个货币对在24小时内有超过32,000个点(Excel中的图表数据限制)。 因此,我不得不将图表分成两个时期(第一个12小时,第二个12小时)。 为了保持相对一致,我把所有三个货币对分成了12小时的时段。
有一点要记住,这些图表上的垂直比例在水平线之间是成比例的,但水平比例不是与时间成比例的(即你不能假设1/12的刻度代表一个小时)。
我认为从这些图表中得到的最大启示是,所有的交易对在24小时内都有一些时间段,在这些时间段内,刻度之间有明显的间隔。 因此,如果你将多个货币对合并到一个EA中,我认为采用 "While "循环是明智的。 StraightTrader的参考资料https://book.mql4.com/special/index,题为 "复杂程序的一般特征",对这种技术有很好的讨论,并在本文的开头部分有一个图表。
GBPJPY 24小时内44,834点
欧元兑日元24小时内37,140点
英镑兑美元 24小时内29,313点
欧元兑美元24小时内22,627点
欢呼吧!
因此,如果您将多个货币对合并为一个EA,我认为采用 "While "循环是明智的。 StraightTrader的参考资料https://book.mql4.com/special/index,题为 "复杂程序的一般特征",对这种技术有很好的讨论,并在本文的开头部分有一个图表。
这正是情况。在一个EA中的多个货币对->使用while loop方法,而不是通过incomming ticks开始函数激活。
我想反对一个EA使用一个货币对。
我的长期方法是一个多币种多策略的EA。前段时间我准备了通用专家顾问方案,实现了其中一些想法。
后来,在我的帖子中没有提到,我接着开发了这个代码,并开始了谷歌代码项目,名为 Universaltrader。这个项目可以满足你的期望。唯一没有实施的是注意到的While cycle方法(易于实施)。
MULTICURRENCY MULTISTRATEGY EA的一些优势。
劣势。
这个项目还需要改进,如果有人有兴趣,我可以邀请他加入这个谷歌代码项目。
目前的脚本附在这里。
雅克,我感谢你对这个话题的持续关注。我仍然在调试我的第一个货币的EA,但如果发现合适的话,我打算在几个货币上使用它。在这个前提下,我一直在考虑如何实现这一概念的策略。因此,我对这个主题感兴趣。
根据你的要求,我又准备了三个货币对的图表,在这样做的时候,我发现其中两个货币对在24小时内有超过32,000个点(Excel中的图表数据限制)。因此,我不得不将图表分成两个时期(第一个12小时,第二个12小时)。为了保持相对一致,我把所有三个货币对分成了12小时的时段。
有一点要记住,这些图表上的垂直比例在水平线之间是成比例的,但水平比例不是与时间成比例的(即你不能假设1/12的刻度代表一个小时)。
我认为从这些图表中得到的最大启示是,所有的交易对在24小时内都有一些时间段,在这些时间段内,刻度之间有明显的间隔。因此,如果你将多个货币对合并到一个EA中,我认为采用 "While "循环是明智的。StraightTrader的参考资料https://book.mql4.com/special/index,题为 "复杂程序的一般特征",对这种技术有很好的讨论,并在本文的开头部分有一个图表。
GBPJPY 24小时内44,834点
欧元兑日元24小时内37,140点
英镑兑美元 24小时内29,313点
欧元兑美元24小时内22,627点
欢呼吧!
非常感谢你的图表。
让我们选择一个循环,而不是嘀嗒运行激活,对于那些需要分钟精度的人来说,这将是更科学的,而且实现起来也不是什么大问题。另一个好处是,你可以将EA附加到你想要的任何货币对上(当它在图表上画出对象时很有用)。
干杯
而你可以通过使用MarketInfo()函数检索当前图表之外的符号的最新卖出和买入价格。
所以你有如下选择。
- 将同一个EA连接到许多图表上,为每个图表的原始符号进行操作(使用Ask和Bid内置变量)。
- 将一个EA连接到一个特定的图表上,对所有选择的符号进行操作(对非本地符号使用MarketInfo()函数)--只是使用本地符号的ticks作为触发装置
- 在不同的图表上有主从EA,其中一个由另一个触发(例如,一个将数值写入文件,另一个不断读取文件,直到找到该数据,然后进行交易)。
现在,我正在使用这些策略中最简单的策略--我在四种货币的三个时间框架上有一个EA,所以总共有12个。它们都被设置为在时间框架的第一个刻度上运行。然而,我遇到了一个问题,即MT4并不总是执行所有的EA。我在启动函数后加了一个打印语句,想看看发生了什么,结果只找到了四个EA中的三个,例如H1,但它在不同的时间遗漏了不同的货币对,而且除了每个货币对的优化设置外,EA是相同的。
问题--当多个EA被设置为同时运行时,MT4是否一次只执行一个EA? 一个EA的执行是否以任何方式依赖于另一个EA的执行(除了交易环境繁忙),还是完全独立?
如果是这样,我可以使用第二个选项,我只是想让EA尽可能的简单,因为至少对我来说,我写的越复杂,我犯的错误就越多。
现在,我正在使用这些策略中最简单的策略--我在四个货币的三个时间框架上有一个EA,所以总共有12个。它们都被设置为在时间框架的第一个刻度上运行。然而,我遇到了一个问题,即MT4并不总是执行所有的EA。我在启动函数后加了一个打印语句,想看看发生了什么,结果只找到了四个EA中的三个,例如H1,但它在不同的时间遗漏了不同的货币对,而且除了每个货币对的优化设置外,EA是相同的。
问题--当多个EA被设置为同时运行时,MT4是否一次只执行一个EA? 一个EA的执行是否以任何方式依赖于另一个EA的执行(除了交易环境繁忙),还是完全独立?
如果是这样,我可以使用第二个选项,我只是想让EA尽可能的简单,因为至少对我来说,我写的越复杂,我犯的错误就越多。
我有多个EA在图表上运行,没有这样的问题。就我所知,它们是同时运行的,只有当其中一个使用交易环境时,它们才会相互注意。至于EA本身,它是完全独立的--每个EA都有自己的变量副本,等等。让我把话说清楚--你在12个图表上运行12个EA?也许你有内存问题?
我有多个EA在图表上运行,没有这样的问题。就我所知,它们是同时运行的,只有当其中一个使用交易环境时,它们才会相互注意。至于EA本身,它是完全独立的--每个EA都有自己的变量副本,等等。让我把话说清楚--你在12个图表上运行12个EA?也许你有内存问题?
是的。 12个图表上的12个EA。 很新的电脑有6GB内存,所以我不认为 会是内存问题,但这值得考虑,我也不会排除它。 但你已经回答了我的问题--如果EA应该能够同时运行,那么也许我只是做错了什么。 这不是第一次了! 我将检查代码,再研究一下。谢谢你的帮助。
你是否在MT4客户端的不同实例中运行图表?如果你在一个实例中打开所有图表,那么它们将共享一个交易环境,你将需要在逻辑中编码以共享该环境--如果你的EA的行为意味着不止一个可能在同一时间执行交易操作。CB
是的 - 我在同一个MT4客户端上运行它们。 但我使用的是这篇文章中的一个交易背景繁忙 解决方案https://www.mql5.com/en/articles/1412,我没有得到任何交易背景繁忙的 错误。
它似乎甚至没有达到尝试开仓的地步。 在某些情况下,它似乎根本没有启动EA。 我这么说是因为我在启动函数的开头放了一个打印语句。
下面是我的启动函数。
void start()
{
//---- 只对新条的第一个点进行交易
if(Volume[0]>1) return;
Print("Tick Check");
如果(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
}
我正在交易CADJPY,EURCHF,GBPUSD,和USDJPY。
而我得到的是这样的结果。
2010.01.22 8:59:45 [EAName]USDJPY,H1: Tick Check
2010.01.22 8:59:45 [EAName]CADJPY,H1: Tick Check
2010.01.22 8:59:45 [EAName]GBPUSD,H1: 勾选检查
2010.01.22 9:59:45 [EAName]EURCHF,H1: 勾选检查
2010.01.22 9:59:46 [EAName]GBPUSD,H1:勾选检查
2010.01.22 9:59:46 [EAName]CADJPY,H1:勾选检查
有些时候所有四个都会交易,有些只有三个。 如果是一个小时的H4交易,其中三个可能会交易,但通常不是所有四个和三个或四个H1交易。
我已经创建了一个变通方法,我把交易量增加到3或4个点,以确保所有的交易,但我正试图更好地了解MetaTrader,以便我能够解决根本问题。
所以我的问题是--既然我的EA只有一个tick可以运行, 它是否会同时运行每个EA,也许这就是它们没有全部运行的原因? 我的EA中有一个循环,比较了多达1500个过去的分形来寻找止损点,所以这可能需要一些时间。
再说一遍,可能只是我的代码中某个地方出了问题。
这里有一个简单的代码,在一个图表上打开欧元兑美元和美元兑瑞郎。即使EA被添加到另一个图表上,它也会打开EURUSD和USDCHF。
不起作用?
用于回溯测试
得到了订单结束错误4106
订单发送功能 中的USDCHF符号名称不明
如果我在设置或EURUSD图表中选择符号EURUSD,Ordersend对EURUSD有效。
如果我换成另一个图表,我将得到EURUSD和USDCHF的未知符号。
谢谢!预先声明