第6号错误 - 页 10 1...34567891011121314151617...32 新评论 Forex Trader 2005.08.12 09:51 #91 [引用 你的例子是一个更好的例子。 [/quote] 这个例子并不奏效。它给出了错误。你作为一个更有经验的开发者,能否帮助使其发挥作用? 恭敬地说。 夸克 Forex Trader 2005.08.12 09:54 #92 <br/ translate="no"> 问题: while(!IsStopped())是如何做到的??从帮助中不太清楚,我以为是对允许实时交易的检查。 。 这是一个检查,看他们是否想在外部关闭专家顾问 。 问题:这些同时和睡眠不会使系统变慢? 。 系统不会被减慢。只有单一的专家顾问 。 问题:在测试模式下,Sleep和semaphore会被正确处理吗? 在测试中不处理滑移,它被简单地跳过。在测试中更复杂。真正活跃的EA可能会竞争这个信号。我们在测试中根本不需要信号,因为只有一个EA被测试--我们不能组织交互式专家的同时测试。要在测试中排除信号处理,使用函数IsTesting 也是关于逻辑。在设置和删除信号灯之间,我们有两种(最大)的可能性来处理订单。首先是Buy()或Sell(),然后是下面的CloseOrder()。这两个 "活动 "不会相互竞争吗?尽管在EA内部,就像有两个专家顾问一样。还是说这个过程保证是线性的,在买入()返回之前,它不会进入CloseOrder()? 这些活动将不会相互竞争,因为现在的交易操作 是同步的,即专家会等到交易操作完成。"这个过程保证是线性的" Forex Trader 2005.08.12 09:57 #93 这个例子并不奏效。它给出了错误。你作为一个更有经验的开发者,能否帮助使其发挥作用?<br/ translate="no"> 我不会强求,等过几天有了GlobalVariableSetOnCondition函数,所有的访问控制问题就会解决了。 Forex Trader 2005.08.12 10:00 #94 Этот пример не работает. Дает ошибки. Не могли бы Вы, как более опытный разработчик, помочь заставить его работать? 我不会强迫它。等待几天后的GlobalVariableSetOnCondition函数,然后所有的访问定界问题将得到解决。 如果你的意思是,你打算在MT中引入GlobalVariableSetOnCondition函数,你能不能事先说一说呢?包括你建议在这种情况下如何使用它?几天时间--算上周末? Forex Trader 2005.08.12 10:03 #95 斯拉瓦,除了非常感谢你的有用建议外,我还想出了一个主意:)或者说,一个建议。我已经提过了。 你为什么不在MT做一个排队的订单。也就是说,你可以异步地写一个请求,在那里处理一个职位,而MT在一个单独的线程中会在有时间的时候处理这个请求,并且保证没有其他人会进入那里。 夸克 Forex Trader 2005.08.12 10:08 #96 如果你的意思是你打算在MT中引入GlobalVariableSetOnCondition函数,你能事先说一下吗?<br/ translate="no"> 包括在这种情况下,你打算如何使用它? 几天--算上周末? 我已经展示了一个例子 if(GlobalVariableSetOnCondition(SemaphoreName, 1.0, 0.0)==true) { bSemapred=true; break; } 如果一个全局变量 的值是0.0,那么将其设置为1.0并返回true。"几天"--我这么说是为了以防万一。 希望我们今天能发布。 Forex Trader 2005.08.12 10:09 #97 你是否想在MT中拥有一个订单队列。也就是说,你可以异步地写一个请求,在那里处理一个职位,MT会在有时间的时候在一个单独的线程中处理这个请求,并且保证没有其他人会进入那里。<br / translate="no">。 我们不会让订单排队 Forex Trader 2005.08.12 10:21 #98 <br / translate="no"> 我已经展示了一个例子 只是没有说它是什么 :)我以为这个功能是建议写给我的。 我说 "几天 "是为了以防万一。希望我们今天能发布。 谢谢。 Forex Trader 2005.08.12 10:34 #99 可选。 1.在这100个帖子中,有几个bug是在研究专家顾问时发现的,与它没有直接关系。例如,我注意到,即使取消了允许实时交易的复选框,专家顾问仍然继续交易。我希望你不会忘记他们。 2.下面又是我的专家顾问的代码。它产生了错误1、129、138。你能不能a)告诉我138(requote)是什么,为什么会发生,是否与semaphores有关,以及如何解决这个问题? b)为什么是129?价格与错误一起打印,它们似乎是正确的。 c) 关于1,也是。 让我提醒你的测试方法:12种货币的12分钟窗口。 恭敬地, 夸克 double dStopLoss; int nHoursToHold; datetime timePrev = 0; int nBars; int nDelaySeconds = 3; int nSlip = 50; double dLotSize = 0.1; int nMagic = 0; int nDigits; string strTradeSemaphore = "TradeSemaphore"; ////////////////// int init () { nBars = Bars; if(!IsTesting() && !GlobalVariableCheck(strTradeSemaphore)) GlobalVariableSet(strTradeSemaphore, 0.0); dStopLoss = 110 * Point; nHoursToHold = 1; nDigits = MarketInfo( Symbol(), MODE_DIGITS ); 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; 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; */ bool bIsBarEnd = false; if(nBars != Bars) { if(IsTesting() || (!IsTesting() && CurTime() > Time[0] + nMagic * nDelaySeconds)) { bIsBarEnd = true; nBars = Bars; } } if(!bIsBarEnd) return(0); // ------ if(!IsTesting()) { while(!IsStopped()) { if(GlobalVariableGet(strTradeSemaphore) == 0.0) GlobalVariableSet(strTradeSemaphore, nMagic); if(GlobalVariableGet(strTradeSemaphore) == nMagic) break; Sleep(1000); } } 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); } } } int nSignal = GetSignal(); if(nSignal == OP_BUY) Buy(); else if(nSignal == OP_SELL) Sell(); if(!IsTesting()) GlobalVariableSet(strTradeSemaphore, 0.0); return(0); } // ------ void Sell() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); double dNormalizer = MathPow(10, nDigits); double dBid = Bid;//MathFloor(Bid * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits); double dStop = Bid + dStopLoss;//MathFloor((Bid + dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits); int nResult = OrderSend(Symbol(), OP_SELL, dLotSize, dBid, nSlip, dStop, 0, "Friday", nMagic, 0, OrangeRed); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", sell: " + dBid + ", Stop: " + dStop + ", error: " + nError); } } // ------ void Buy() { if(AccountFreeMargin() < 500) return; dLotSize = GetLotSize(); double dNormalizer = MathPow(10, nDigits); double dAsk = Ask;//MathFloor(Ask * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits); double dStop = Ask - dStopLoss;//MathFloor((Ask - dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits); int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, dAsk, nSlip, dStop, 0, "Friday", nMagic, 0, Aqua); if(nResult == -1) { int nError = GetLastError(); Alert(Symbol() + ", buy: " + dAsk + ", Stop: " + dStop + ", error: " + 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); } Forex Trader 2005.08.12 12:00 #100 在这种情况下,使用RefreshRates函数并获取一个新的买入或卖出值,或者向MarketInfo询问一个新的价格。129是同样的错误,错误的价格--价格已经走得太远,在等待的时间里有几次价格变化。1 - 这根本不是一个错误。它出现在你试图用已经设定的相同数值修改一个订单时。 1...34567891011121314151617...32 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你的例子是一个更好的例子。
[/quote]
这个例子并不奏效。它给出了错误。你作为一个更有经验的开发者,能否帮助使其发挥作用?
恭敬地说。
夸克
。
这是一个检查,看他们是否想在外部关闭专家顾问 。
问题:这些同时和睡眠不会使系统变慢? 。
系统不会被减慢。只有单一的专家顾问 。
问题:在测试模式下,Sleep和semaphore会被正确处理吗?
在测试中不处理滑移,它被简单地跳过。在测试中更复杂。真正活跃的EA可能会竞争这个信号。我们在测试中根本不需要信号,因为只有一个EA被测试--我们不能组织交互式专家的同时测试。要在测试中排除信号处理,使用函数IsTesting
也是关于逻辑。在设置和删除信号灯之间,我们有两种(最大)的可能性来处理订单。首先是Buy()或Sell(),然后是下面的CloseOrder()。这两个 "活动 "不会相互竞争吗?尽管在EA内部,就像有两个专家顾问一样。还是说这个过程保证是线性的,在买入()返回之前,它不会进入CloseOrder()?
这些活动将不会相互竞争,因为现在的交易操作 是同步的,即专家会等到交易操作完成。"这个过程保证是线性的"
我不会强求,等过几天有了GlobalVariableSetOnCondition函数,所有的访问控制问题就会解决了。
我不会强迫它。等待几天后的GlobalVariableSetOnCondition函数,然后所有的访问定界问题将得到解决。
如果你的意思是,你打算在MT中引入GlobalVariableSetOnCondition函数,你能不能事先说一说呢?包括你建议在这种情况下如何使用它?几天时间--算上周末?
你为什么不在MT做一个排队的订单。也就是说,你可以异步地写一个请求,在那里处理一个职位,而MT在一个单独的线程中会在有时间的时候处理这个请求,并且保证没有其他人会进入那里。
夸克
包括在这种情况下,你打算如何使用它?
几天--算上周末?
我已经展示了一个例子
如果一个全局变量 的值是0.0,那么将其设置为1.0并返回true。"几天"--我这么说是为了以防万一。 希望我们今天能发布。
我们不会让订单排队
只是没有说它是什么 :)我以为这个功能是建议写给我的。
我说 "几天 "是为了以防万一。希望我们今天能发布。
谢谢。
1.在这100个帖子中,有几个bug是在研究专家顾问时发现的,与它没有直接关系。例如,我注意到,即使取消了允许实时交易的复选框,专家顾问仍然继续交易。我希望你不会忘记他们。
2.下面又是我的专家顾问的代码。它产生了错误1、129、138。你能不能a)告诉我138(requote)是什么,为什么会发生,是否与semaphores有关,以及如何解决这个问题? b)为什么是129?价格与错误一起打印,它们似乎是正确的。 c) 关于1,也是。
让我提醒你的测试方法:12种货币的12分钟窗口。
恭敬地,
夸克