初学者的问题 MQL5 MT5 MetaTrader 5 - 页 983 1...976977978979980981982983984985986987988989990...1503 新评论 Nikita Chernyshov 2019.01.21 08:00 #9821 同事们好。 问: 在mql4中,为了计算位置的数量,你可以这样写函数 //+------------------------------------------------------------------+ // Счетчик ордеров //+------------------------------------------------------------------+ int OrderCount(int type) { int count = 0; for (int trade = OrdersTotal() -1; trade >=0; trade--) { if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == type) count++; } } return(count); } 它在mql5中是如何实现的?如何按魔力或类型来计算职位的数量? Vladimir Karputov 2019.01.21 08:31 #9822 与本主题无关的评论已被移至 "MQL4 MT4 MetaTrader 4初学者的问题"。 Vladimir Karputov 2019.01.21 08:33 #9823 Nikita Chernyshov:同事们好。 问: 在mql4中,为了计算位置的数量,你可以这样写函数 它在mql5中是如何实现的?我们如何通过一个神奇的数字或一个类型来计算位置的数量?Ehlers_CG EA 代码中的例子,函数CalculateAllPositions。 Nikita Chernyshov 2019.01.21 10:15 #9824 Vladimir Karputov:Ehlers_CG EA 代码中的例子,函数CalculateAllPositions。非常感谢你。试图把它改成一个更容易理解的形式。但它返回的是0,并打开了无尽的订单,请告知,我在哪里搞砸了?我不想关注我的交易理念,我只想大致了解它。 #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh> #include <Trade\AccountInfo.mqh> #include <Trade\DealInfo.mqh> #include <Trade\OrderInfo.mqh> #include <Expert\Money\MoneyFixedMargin.mqh> CPositionInfo m_position; // trade position object CTrade trade; // trading object CSymbolInfo symbol_info; // symbol info object CAccountInfo m_account; // account info wrapper CDealInfo m_deal; // deals object COrderInfo m_order; // pending orders object CMoneyFixedMargin *m_money; input double lot = 0.01; input int TakeP = 300; input int StopL = 300; input int Magic = 123; input int Slip = 50; input int MA = 50; double ma[]; int handle; int digits; double point; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { handle = iMA(NULL,0,MA,0,MODE_SMA,PRICE_CLOSE); trade.SetExpertMagicNumber(Magic); trade.SetDeviationInPoints(Slip); trade.SetTypeFilling(ORDER_FILLING_FOK); trade.SetAsyncMode(false); digits=(int)SymbolInfoInteger(NULL,SYMBOL_DIGITS); point=SymbolInfoDouble(NULL,SYMBOL_POINT); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { CopyBuffer(handle,0,0,50,ma); ArraySetAsSeries(ma,true); double Ask=SymbolInfoDouble(NULL,SYMBOL_ASK); double Bid=SymbolInfoDouble(NULL,SYMBOL_BID); if(Ask > ma[1] && CalculateAllPositions(POSITION_TYPE_BUY) == 0) { double tp = NormalizeDouble(Ask+TakeP*point,digits); double sl = NormalizeDouble(Ask-StopL*point,digits); if(!trade.Buy(lot,NULL,Ask,sl,tp)) { //--- сообщим о неудаче Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(), ". Описание кода: ",trade.ResultRetcodeDescription()); } else { Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(), " (",trade.ResultRetcodeDescription(),")"); } } if(Bid < ma[1] && CalculateAllPositions(POSITION_TYPE_SELL) == 0) { double tp = NormalizeDouble(Bid-TakeP*point,digits); double sl = NormalizeDouble(Bid+StopL*point,digits); if(!trade.Sell(lot,NULL,Bid,sl,tp)) { //--- сообщим о неудаче Print("Метод Sell() потерпел неудачу. Код возврата=",trade.ResultRetcode(), ". Описание кода: ",trade.ResultRetcodeDescription()); } else { Print("Метод Sell() выполнен успешно. Код возврата=",trade.ResultRetcode(), " (",trade.ResultRetcodeDescription(),")"); } } Comment(CalculateAllPositions(POSITION_TYPE_BUY)); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Счетчик ордеров | //+------------------------------------------------------------------+ int CalculateAllPositions(const ENUM_POSITION_TYPE type) { int count=0; for(int i=PositionsTotal()-1;i>=0;i--) { if(m_position.SelectByIndex(i)) { if(m_position.Symbol()==NULL && m_position.Magic()==Magic && m_position.PositionType()==type) count++; } } return(count); } Vladimir Karputov 2019.01.21 10:17 #9825 Nikita Chernyshov:非常感谢你。试图把它改成 一个对我来说更有意义的形式。但它返回的是0,并打开了无尽的订单,请告知,我在哪里搞砸了?请不要关注我的交易理念,我只是想熟悉它。 你的错误的关键词是,我在我的EA中没有白写这么多验证代码。你几乎遗漏了所有的内部结构,特别是OnTradeTransaction。 Aleksey Vyazmikin 2019.01.22 04:53 #9826 我面临一个问题,基于指标的EA在真实账户上工作正常,但它在测试器中是躺着的,在按OHLC和按所有ticks的tick生成模式 下,结果是一样的。错误的结果是指标在零点的缓冲区是空的(只有当上层TF有一个新的柱子,用于计算指标的时候)。但是,我已经设法通过在我的专家顾问中添加睡眠来使指标得到计算。 但是我发现,根据生成ticks的模式,这个睡眠应该是不同的--对于从所有ticks产生的睡眠(15000)就足够了,而对于OHLC需要睡眠(30000)。 因此,问题出现了--睡眠的情况是否正常,因为从逻辑上讲,不同的延迟时间是根据嘀嗒声产生的模式在那里建模的!"。 亲爱的开发者,我请你解释一下指标的情况,因为我自己也不明白是什么原因--是代码中的错误还是测试人员的问题!? 我准备在PM中提供指标和专家顾问,但请告诉我给谁。 Ihor Herasko 2019.01.22 05:05 #9827 Aleksey Vyazmikin:我面临一个问题,基于指标的EA在真实账户上工作正常,但它在测试器中是躺着的,在按OHLC和按所有ticks的tick生成模式 下,结果是一样的。错误的结果是指标在零点的缓冲区是空的(只有当上层TF有一个新的柱子,用于计算指标的时候)。但是,我已经设法使指标通过添加睡眠来计算,并且发现,根据刻度生成的模式,这个睡眠应该是不同的 - 对于从所有刻度生成的睡眠(15000)是足够的,但对于OHLC睡眠(30000)是需要的。 因此,问题出现了--睡眠的情况是否正常,因为从逻辑上讲,不同的延迟时间是根据嘀嗒声产生的模式在那里建模的!"。 亲爱的开发者,我请你解释一下指标的情况,因为我自己也不明白是什么原因--是代码中的错误还是测试人员的问题!? 我准备在PM中给你指标和EA,但告诉我给谁。睡眠在这个指标中不起作用。此外,如果我们谈论的是测试器,甚至在专家顾问中也被忽略。 Aleksey Vyazmikin 2019.01.22 05:07 #9828 Ihor Herasko:睡眠在指标中不起作用。此外,如果我们谈论的是测试器,甚至在专家顾问中也被忽略。我已经写过,"睡眠 "在专家顾问中,如果它被忽略了,而且你对它有100%的把握,那么这就额外确认了错误在测试器中。延迟可能不会及时发生,但它可以为程序所模拟。 新增: 睡眠 在测试器中是有效的,这里有一个简单的代码来证实它。 Print(iClose(Symbol(),PERIOD_CURRENT,0)); Sleep(15000); Print(iClose(Symbol(),PERIOD_CURRENT,0)); 结果 2019.01.22 08:28:24.661 2019.01.21 23:49:00 66920.0 2019.01.22 08:28:24.661 2019.01.21 23:49:15 66928.0 fxsaber 2019.01.22 05:18 #9829 Ihor Herasko:睡眠在指标中不起作用。此外,即使在EA中,当涉及到测试者时,它也被忽略了。并非如此。 Ihor Herasko 2019.01.22 05:42 #9830 Aleksey Vyazmikin:我已经写了 "睡眠 "是在EA中,如果它被忽略了,而且你100%确定这一点,那么这就额外证实了错误是在测试器中。延迟可能不会及时发生,但它可以为程序所模拟。新增: 睡眠在测试器中是有效的,这里有一个简单的代码来证实它。结果你的帖子中原本就是这种情况。 然而,我设法通过添加 "睡眠 "来使指标读数,在这里,它被揭示了...... 这就是为什么我对 "睡眠"这个指标有反应。关于EA中的睡眠,我不明白你为什么要让它在4和5中表现不同。 在4中,它是这样的。void OnTick() { Print("Before: ", TimeCurrent()); Sleep(100000); Print("After: ", TimeCurrent()); } 2019.01.22 07:38:19.432 2018.11.08 00:02:05 Test AUDUSD,M5: After: 2018.11.08 00:02:05 2019.01.22 07:38:19.432 2018.11.08 00:02:05 Test AUDUSD,M5: Before: 2018.11.08 00:02:05 至于问题的事实。睡眠不应该对指标中的数据重新计算有任何影响。缓冲区的填充有问题。也许有一段可重复的代码? 1...976977978979980981982983984985986987988989990...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
同事们好。
问: 在mql4中,为了计算位置的数量,你可以这样写函数
它在mql5中是如何实现的?如何按魔力或类型来计算职位的数量?
同事们好。
问: 在mql4中,为了计算位置的数量,你可以这样写函数
它在mql5中是如何实现的?我们如何通过一个神奇的数字或一个类型来计算位置的数量?
Ehlers_CG EA 代码中的例子,函数CalculateAllPositions。
Ehlers_CG EA 代码中的例子,函数CalculateAllPositions。
非常感谢你。试图把它改成一个更容易理解的形式。但它返回的是0,并打开了无尽的订单,请告知,我在哪里搞砸了?我不想关注我的交易理念,我只想大致了解它。
非常感谢你。试图把它改成 一个对我来说更有意义的形式。但它返回的是0,并打开了无尽的订单,请告知,我在哪里搞砸了?请不要关注我的交易理念,我只是想熟悉它。
你的错误的关键词是,我在我的EA中没有白写这么多验证代码。你几乎遗漏了所有的内部结构,特别是OnTradeTransaction。
我面临一个问题,基于指标的EA在真实账户上工作正常,但它在测试器中是躺着的,在按OHLC和按所有ticks的tick生成模式 下,结果是一样的。错误的结果是指标在零点的缓冲区是空的(只有当上层TF有一个新的柱子,用于计算指标的时候)。但是,我已经设法通过在我的专家顾问中添加睡眠来使指标得到计算。 但是我发现,根据生成ticks的模式,这个睡眠应该是不同的--对于从所有ticks产生的睡眠(15000)就足够了,而对于OHLC需要睡眠(30000)。
因此,问题出现了--睡眠的情况是否正常,因为从逻辑上讲,不同的延迟时间是根据嘀嗒声产生的模式在那里建模的!"。
亲爱的开发者,我请你解释一下指标的情况,因为我自己也不明白是什么原因--是代码中的错误还是测试人员的问题!?
我准备在PM中提供指标和专家顾问,但请告诉我给谁。
我面临一个问题,基于指标的EA在真实账户上工作正常,但它在测试器中是躺着的,在按OHLC和按所有ticks的tick生成模式 下,结果是一样的。错误的结果是指标在零点的缓冲区是空的(只有当上层TF有一个新的柱子,用于计算指标的时候)。但是,我已经设法使指标通过添加睡眠来计算,并且发现,根据刻度生成的模式,这个睡眠应该是不同的 - 对于从所有刻度生成的睡眠(15000)是足够的,但对于OHLC睡眠(30000)是需要的。
因此,问题出现了--睡眠的情况是否正常,因为从逻辑上讲,不同的延迟时间是根据嘀嗒声产生的模式在那里建模的!"。
亲爱的开发者,我请你解释一下指标的情况,因为我自己也不明白是什么原因--是代码中的错误还是测试人员的问题!?
我准备在PM中给你指标和EA,但告诉我给谁。
睡眠在这个指标中不起作用。此外,如果我们谈论的是测试器,甚至在专家顾问中也被忽略。
睡眠在指标中不起作用。此外,如果我们谈论的是测试器,甚至在专家顾问中也被忽略。
我已经写过,"睡眠 "在专家顾问中,如果它被忽略了,而且你对它有100%的把握,那么这就额外确认了错误在测试器中。
延迟可能不会及时发生,但它可以为程序所模拟。
新增: 睡眠 在测试器中是有效的,这里有一个简单的代码来证实它。
结果
睡眠在指标中不起作用。此外,即使在EA中,当涉及到测试者时,它也被忽略了。
并非如此。
我已经写了 "睡眠 "是在EA中,如果它被忽略了,而且你100%确定这一点,那么这就额外证实了错误是在测试器中。
延迟可能不会及时发生,但它可以为程序所模拟。
新增: 睡眠在测试器中是有效的,这里有一个简单的代码来证实它。
结果
你的帖子中原本就是这种情况。
然而,我设法通过添加 "睡眠 "来使指标读数,在这里,它被揭示了......
这就是为什么我对 "睡眠"这个指标有反应。
关于EA中的睡眠,我不明白你为什么要让它在4和5中表现不同。 在4中,它是这样的。
至于问题的事实。睡眠不应该对指标中的数据重新计算有任何影响。缓冲区的填充有问题。也许有一段可重复的代码?