第6号错误 - 页 8 123456789101112131415...32 新评论 Forex Trader 2005.08.11 17:17 #71 尸检显示错误代码139的使用不正确。事实上,它是 "贸易环境繁忙",由于某种原因没有特殊代码。今天在英语论坛"贸易调度员:所有贸易环境繁忙 " 中讨论了类似的问题。 所有的EA都只有一个交易环境。正确的解决方案是在全局变量上建立你自己的信号系统。 我在4分钟内运行了4个EA,在10分钟内发生了7次错误139。 Forex Trader 2005.08.11 17:25 #72 尸检发现错误代码139被误用。事实上,它是 "贸易环境繁忙",由于某种原因,没有特殊的代码。今天在英语论坛上讨论了一个类似的问题"Trade Dispatcher: all trade context is busy" 所有的EA都只有一个交易环境。正确的解决方案是在全局变量上建立你自己的信号系统。 我在10分钟内运行了4个EA,7次错误139 你能告诉我,至少在一般情况下,这个信号系统应该是什么? 1.特别是,应该如何进行交易,以便不干扰他人。 2.滑动、检查、超时(曾承诺在多线程MT中不存在这些问题,但是拜托了)。 最后。不要把这看作是一种责备。你有一本教科书。在其中,专家被赋予了。给我看看那里的信号灯。 这是我的专家。像裤子一样简单,只需20卢布。每小时翻转一个位置。如果你真的关心交易者和经纪人的利润(我不知道大家怎么想的,但我想先得到一个稳定工作的EA,然后再从模拟转为真实),那么请以我的这个EA为例,告诉我应该怎么做才对。 真诚的。 夸克 P.S.错误2、6、138和4109的起源问题仍未解决,这些错误有时也会出现。 Forex Trader 2005.08.11 17:56 #73 <br / translate="no">今天在英文论坛"Trade Dispatcher: all trade context is busy " 讨论了一个类似的问题。 我已经阅读了英语的主题。是啊...这些人需要紧急学习俄语。 这不是类似,是同一个问题。的确,他们还没有得到错误2、6、138和4109。他们只是在谈论139。 说实话,我不认为IsTradeAllowed有什么意义。斯拉瓦自己解释说,有十个专家顾问被允许使用这个功能,然后突然开始交易,除了第一个专家之外,其他人都会感到失望。 最好的办法是对请求进行排队,让它们堆积起来,生存一段时间,然后被执行或删除。但这都是一个梦。 相反,我们必须创建一个全局变量nTrading,例如,在那里存储专家顾问的名字。那么其他EA应该怎么做呢?回到MT3的挂单中去还是有其他的想法? 顺便说一下,我们可以不使用全局变量,比如说 如果(nPending == OP_BUY) nPending = 买入(); 否则如果(nPending == OP_SELL) nPending = 卖出()。 其中Buy()和Sell()失败时返回OP_BUY / OP_SELL,成功时返回-1。 其缺点是显而易见的 - 经纪人将收到10个订单来打开(关闭),而不是一个。如果是自动的,那就一切都好。如果是人--就会被冒犯。更糟的是,如果自动机和人按照不同的逻辑行事。例如,自动机没有队列(正如斯拉瓦向我们解释的那样,一个线程,订单竞争而不是形成一个队列),而人类有。然后交易者开始在真实的交易中,他甚至不明白为什么,因为他(我--在Alpari的研讨会上)被保证,模拟和真实之间没有区别。 第二种选择--每个专家和货币都被分配了自己的Mn,因此专家顾问+货币的组合是独一无二的。然后,我们以这样的方式编写代码:带有IM1的EA将在第一秒进行交易,带有IM7的EA将在第七秒进行交易,等等,在条形图打开后。这将使系统有一秒钟的时间进行交易。 向斯拉瓦提问--一秒钟足以避免问题吗? 亲爱的开发者(以及所有的人)。谢谢你的澄清。在这个帖子和以前的帖子中仍有一些未回答的问题。等待答案。 夸克 Forex Trader 2005.08.11 18:15 #74 还有一个问题。所讨论的情况是否指的是止损单?专家们是否为其执行力而竞争? Forex Trader 2005.08.11 18:19 #75 //+------------------------------------------------------------------+ //| TestQuark.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" double dStopLoss; int nHoursToHold; datetime timePrev = 0; int nSlip = 5; double dLotSize = 0.1; int nMagic = 0; string SemaphoreName="TradeSemaphore"; ////////////////// int init () { if(!GlobalVariableCheck(SemaphoreName)) GlobalVariableSet(SemaphoreName,0.0); timePrev = 0; dStopLoss = 110 * Point; nHoursToHold = 1; if(Symbol() == "EURUSD") nMagic = 1; else if(Symbol() == "EURJPY") nMagic = 2; else if(Symbol() == "USDCHF") nMagic = 3; else if(Symbol() == "GBPUSD") nMagic = 4; else if(Symbol() == "GBPJPY") nMagic = 5; else if(Symbol() == "GBPCHF") nMagic = 6; else if(Symbol() == "USDJPY") nMagic = 7; else if(Symbol() == "AUDUSD") nMagic = 8; else if(Symbol() == "EURGBP") nMagic = 9; else if(Symbol() == "USDCAD") nMagic = 10; else if(Symbol() == "EURCHF") nMagic = 11; else if(Symbol() == "EURAUD") nMagic = 12; timePrev += nMagic; // Open nMagic seconds after the new bar return(0); } // ------ int deinit() { return(0); } // ------ int start() { if(Bars < 5) return(0); // The previous bar just closed bool bIsBarEnd = false; if(timePrev != Time[0] + nMagic) bIsBarEnd = true; timePrev = Time[0] + nMagic; if(!bIsBarEnd) return(0); // ------ int nSignal = GetSignal(); bool bSemaphored=false; while(!IsStopped()) { if(GlobalVariableGet(SemaphoreName)==0.0) { GlobalVariableSet(SemaphoreName,1.0); bSemaphored=true; break; } Sleep(1000); } if(nSignal == OP_BUY) Buy(); else if(nSignal == OP_SELL) Sell(); for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--) { OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES); if(OrderMagicNumber() == nMagic) { if(CurTime() - OrderOpenTime() > (nHoursToHold - 1) * 60 * 60) { if(OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua); else if(OrderType() == OP_SELL) OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed); } } } if(bSemaphored) GlobalVariableSet(SemaphoreName,0.0); return(0); } // ------ void Sell() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); int nResult = OrderSend(Symbol(), OP_SELL, dLotSize, Bid, nSlip, Bid + dStopLoss, 0, "Friday", nMagic, 0, OrangeRed); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", " + nError); } } // ------ void Buy() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, Ask, nSlip, Ask - dStopLoss, 0, "Friday", nMagic, 0, Aqua); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", " + nError); } } // ------ double GetLotSize() { double dLot = 0.1; return(dLot); } // ------ int GetSignal() { int nSignal; if(MathMod(Hour(), 2) == 0) nSignal = OP_BUY; else nSignal = OP_SELL; return(nSignal); } //+------------------------------------------------------------------+ 如果做一个函数来设置一个全局变量的值,前提是这个变量有一定的值,这样就不会有结构 。 如果(GlobalVariableGet(SemaphoreName)==0.0) { GlobalVariableSet(SemaphoreName,1.0); bSemaphored=true; break; } 那么它将是100%可靠的 ,如 。 if(GlobalVariableSetOnCondition(SemaphoreName,1.0,0)==true) { bSemaphored=true; break; } Forex Trader 2005.08.11 18:21 #76 还有一个问题。所讨论的情况是否指的是止损单?专家顾问是否为其执行而竞争? 不,停止是在服务器上执行的。 Forex Trader 2005.08.11 18:23 #77 相反,我们必须建立一个全局变量nTrading,比如说,把当前交易的专家顾问的名字写在里面。那么其他EA应该怎么做呢?回到MT3的挂单中去还是有其他想法?对我个人而言,交易之间有一个强制性的停顿(可调整,现在是30秒)。这几乎不是交易获利的障碍,但它可以防止类似情况发生。它是通过一个全局变量实现的。讯号和暂停--二合一=) 关于队列--我有个想法,想做一个EA,执行写在文件中的 订单。而所有其他专家只是向这个文件写命令。 但对我来说,这并不容易(在有能力实施的意义上)......。但也可以尝试。通过共同的努力=))。 Forex Trader 2005.08.11 18:36 #78 谢谢 :) 这是我不明白的一段话: <br/ translate="no">如果做一个函数来设置一个全局变量的值,前提是该变量有一定的值,这样就不会有构造 if(GlobalVariableGet(SemaphoreName)==0.0) { GlobalVariableSet(SemaphoreName,1.0); bSemaphored=true; break; } 现在说说本案的逻辑。对不起,纠缠你,但...如果我没有理解错的话,我们正坐在一个while循环中,直到我们设法设置semaphore。对吗?然后我们进行交易,知道除了我们之外没有人在交易。然后我们将信号灯返回到它的原始状态。问题: while(!IsStopped())如何工作??我以为这是一个允许现场交易的检查。问题是:那些 "同时 "和 "睡眠 "不会造成系统的滞后吗?问题:在 测试模式 下,Sleep和semaphore会被正确处理吗?另一个合乎逻辑的问题。在设置和删除信号灯之间,我们有两种(最大)的可能性来处理订单。首先是Buy()或Sell(),然后在它下面是CloseOrder()。这两个 "活动 "不会相互竞争吗?尽管在EA内部,就像有两个专家顾问一样。还是说这个过程保证是线性的,直到Buy()返回才会到达CloseOrder()?预先感谢你。夸克 Forex Trader 2005.08.11 18:38 #79 И еще один вопрос. Относится ли обсуждаемая ситуация к стоп ордерам? Конкурируют ли эксперты за их исполнение? 不,止损是在服务器上处理的。在我们的案例中,客户的专家交易流存在竞争。 我说错话了。应该OrderSend(OP_BUYSTOP...还用设置和删除信号灯的代码包围它?愚蠢的问题。当然,你应该。 Forex Trader 2005.08.11 19:02 #80 我把第4页第1个帖子中的专家顾问附在eur - m15上。 重做了交易功能(连接了我的库),并将其连接到另一个欧元区--M15。当然,Meijic已经被改变。 我会让你知道结果如何;) 123456789101112131415...32 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
所有的EA都只有一个交易环境。正确的解决方案是在全局变量上建立你自己的信号系统。
我在4分钟内运行了4个EA,在10分钟内发生了7次错误139。
所有的EA都只有一个交易环境。正确的解决方案是在全局变量上建立你自己的信号系统。
我在10分钟内运行了4个EA,7次错误139
你能告诉我,至少在一般情况下,这个信号系统应该是什么?
1.特别是,应该如何进行交易,以便不干扰他人。
2.滑动、检查、超时(曾承诺在多线程MT中不存在这些问题,但是拜托了)。
最后。不要把这看作是一种责备。你有一本教科书。在其中,专家被赋予了。给我看看那里的信号灯。
这是我的专家。像裤子一样简单,只需20卢布。每小时翻转一个位置。如果你真的关心交易者和经纪人的利润(我不知道大家怎么想的,但我想先得到一个稳定工作的EA,然后再从模拟转为真实),那么请以我的这个EA为例,告诉我应该怎么做才对。
真诚的。
夸克
P.S.错误2、6、138和4109的起源问题仍未解决,这些错误有时也会出现。
我已经阅读了英语的主题。是啊...这些人需要紧急学习俄语。
这不是类似,是同一个问题。的确,他们还没有得到错误2、6、138和4109。他们只是在谈论139。
说实话,我不认为IsTradeAllowed有什么意义。斯拉瓦自己解释说,有十个专家顾问被允许使用这个功能,然后突然开始交易,除了第一个专家之外,其他人都会感到失望。
最好的办法是对请求进行排队,让它们堆积起来,生存一段时间,然后被执行或删除。但这都是一个梦。
相反,我们必须创建一个全局变量nTrading,例如,在那里存储专家顾问的名字。那么其他EA应该怎么做呢?回到MT3的挂单中去还是有其他的想法?
顺便说一下,我们可以不使用全局变量,比如说
其中Buy()和Sell()失败时返回OP_BUY / OP_SELL,成功时返回-1。
其缺点是显而易见的 - 经纪人将收到10个订单来打开(关闭),而不是一个。如果是自动的,那就一切都好。如果是人--就会被冒犯。更糟的是,如果自动机和人按照不同的逻辑行事。例如,自动机没有队列(正如斯拉瓦向我们解释的那样,一个线程,订单竞争而不是形成一个队列),而人类有。然后交易者开始在真实的交易中,他甚至不明白为什么,因为他(我--在Alpari的研讨会上)被保证,模拟和真实之间没有区别。
第二种选择--每个专家和货币都被分配了自己的Mn,因此专家顾问+货币的组合是独一无二的。然后,我们以这样的方式编写代码:带有IM1的EA将在第一秒进行交易,带有IM7的EA将在第七秒进行交易,等等,在条形图打开后。这将使系统有一秒钟的时间进行交易。
向斯拉瓦提问--一秒钟足以避免问题吗?
亲爱的开发者(以及所有的人)。谢谢你的澄清。在这个帖子和以前的帖子中仍有一些未回答的问题。等待答案。
夸克
如果做一个函数来设置一个全局变量的值,前提是这个变量有一定的值,这样就不会有结构 。
那么它将是100%可靠的 ,如 。
不,停止是在服务器上执行的。
关于队列--我有个想法,想做一个EA,执行写在文件中的 订单。而所有其他专家只是向这个文件写命令。
但对我来说,这并不容易(在有能力实施的意义上)......。但也可以尝试。通过共同的努力=))。
这是我不明白的一段话:
if(GlobalVariableGet(SemaphoreName)==0.0)
{
GlobalVariableSet(SemaphoreName,1.0);
bSemaphored=true;
break;
}
现在说说本案的逻辑。对不起,纠缠你,但...如果我没有理解错的话,我们正坐在一个while循环中,直到我们设法设置semaphore。对吗?然后我们进行交易,知道除了我们之外没有人在交易。然后我们将信号灯返回到它的原始状态。问题: while(!IsStopped())如何工作??我以为这是一个允许现场交易的检查。问题是:那些 "同时 "和 "睡眠 "不会造成系统的滞后吗?问题:在
测试模式 下,Sleep和semaphore会被正确处理吗?另一个合乎逻辑的问题。在设置和删除信号灯之间,我们有两种(最大)的可能性来处理订单。首先是Buy()或Sell(),然后在它下面是CloseOrder()。这两个 "活动 "不会相互竞争吗?尽管在EA内部,就像有两个专家顾问一样。还是说这个过程保证是线性的,直到Buy()返回才会到达CloseOrder()?预先感谢你。夸克
不,止损是在服务器上处理的。在我们的案例中,客户的专家交易流存在竞争。
我说错话了。应该OrderSend(OP_BUYSTOP...还用设置和删除信号灯的代码包围它?愚蠢的问题。当然,你应该。
重做了交易功能(连接了我的库),并将其连接到另一个欧元区--M15。当然,Meijic已经被改变。
我会让你知道结果如何;)