[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 334 1...327328329330331332333334335336337338339340341...432 新评论 Boris 2013.05.10 12:40 #3331 hoz: Boris,如果你把intGetGeneralSignal() 中的一个条件注释掉,开口就清楚了。 我已经追踪到它了。当当前未结订单的利润率为负数时,该标志不会改变其值。下面是重写的函数,它应该将空头 和多头 标志设置为假,也就是说,如果有减去的订单,就禁止开仓。 调用函数是这样的。 也许贝氏的条件更适合?诚然,由于欧元下跌非常疲软,我今天只开出了卖盘,但仍旧是有总比没有好!"。 Viktar Dzemikhau 2013.05.10 13:03 #3332 borilunad: 也许条件更适合白族人?的确,今天只有卖盘被打开,因为欧元下跌非常疲软,但还是有总比没有好!"。 没有。信号写在int函数GetGeneralSignal() 中,它的工作原理很清楚。信号很原始,我只是为了测试而采取的。如果PCI已经越过上界--买入,如果越过下界--卖出。我自己不使用指数,但我决定检查一下,这只是一个实验。所以,你去那里。没有旗帜,一切工作都很完美。但旗帜却不是这样。当int FindOrders(bool&long,bool&short) 函数包含一个给定类型的订单且其利润低于零时,我的函数根据对函数GetGeneralSignal() 的引用,必须向某个标志传递假值,但事实上标志总是显示为真。//+-------------------------------------------------------------------------------------+ //| Поиск своих ордеров | //+-------------------------------------------------------------------------------------+ int FindOrders(bool& long, bool& short) { int t, total = OrdersTotal() - 1; double profitL, // Профит лонговой позиции profitS; // Профит шортовой позиции for (int i=total; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; { if (OrderType() == OP_BUY) // Найден ордер типа OP_BUY { if (profitL < OrderProfit()) { profitL = OrderProfit(); pr("profitL =" + profitL); if (profitL < 0) long = false; } } else if (OrderType() == OP_SELL) // Найден ордер типа OP_SELL { if (profitS < OrderProfit()) { pr("profitS =" + profitS); profitS = OrderProfit(); if (profitS < 0) long = false; } } t++; } } return (t); } 我可以在打印机中看到它,但不清楚为什么旗帜没有变化。顺便说一下,我在印刷品中显示了订单的盈利能力。//+-------------------------------------------------------------------------------------+ //| Поиск своих ордеров | //+-------------------------------------------------------------------------------------+ int FindOrders(bool& long, bool& short) { int t, total = OrdersTotal() - 1; double profitL, // Профит лонговой позиции profitS; // Профит шортовой позиции for (int i=total; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; { if (OrderType() == OP_BUY) // Найден ордер типа OP_BUY { Print("if (OrderType() == OP_BUY)"); profitL = OrderProfit(); pr("profitL =" + profitL); if (profitL < OrderProfit()) if (profitL < 0) long = false; } else if (OrderType() == OP_SELL) // Найден ордер типа OP_SELL { Print("if (OrderType() == OP_SELL)"); profitS = OrderProfit(); pr("profitS =" + profitS); if (profitS < OrderProfit()) if (profitS < 0) long = false; } t++; } } return (t); }而在打印标志的值时,这就是所显示的。也就是说,很明显,当利润率低于零时,相应的标志应该被设置为假,但这并没有发生......。一切似乎都是基本的,但有些事情却没有发生。 Boris 2013.05.10 13:10 #3333 hoz: 不,在intGetGeneralSignal() 函数中有一个信号,效果很好。信号很原始,我只是为了测试而采取的。如果PCI已经越过上界--买入,如果越过下界--卖出。我自己不使用指数,但我决定检查一下,这只是一个实验。 所以,你去那里。没有旗帜,一切工作都很完美。但旗帜却不是这样。当int FindOrders(bool&long,bool&short) 函数包含一个给定类型的订单且其利润低于零时,我的函数根据对函数GetGeneralSignal() 的引用,必须向某个标志传递假值,但标志总是包含真。 我在印刷品中看到了它,但我不明白为什么旗帜没有变化。 看,你在两种情况下都写了long=false,那么它将如何打开? Vladyslav Goshkov 2013.05.10 13:13 #3334 hoz: 我在印刷品中可以看到,但为什么旗帜没有变化,这一点并不清楚。//+-------------------------------------------------------------------------------------+ //| Поиск своих ордеров | //+-------------------------------------------------------------------------------------+ int FindOrders(bool& long, bool& short) { int t, total = OrdersTotal() - 1; double profitL, // Профит лонговой позиции profitS; // Профит шортовой позиции for (int i=total; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; { if (OrderType() == OP_BUY) // Найден ордер типа OP_BUY { Print("if (OrderType() == OP_BUY)"); profitL = OrderProfit(); if (profitL < OrderProfit()) if (profitL < 0) long = false; } else if (OrderType() == OP_SELL) // Найден ордер типа OP_SELL { Print("if (OrderType() == OP_SELL)"); profitS = OrderProfit(); if (profitS < OrderProfit()) if (profitS < 0) long = false; /// ?????????????????????? } t++; } } return (t); } Viktar Dzemikhau 2013.05.10 13:23 #3335 纠正了错别字。//+-------------------------------------------------------------------------------------+ //| Поиск своих ордеров | //+-------------------------------------------------------------------------------------+ int FindOrders(bool& long, bool& short) { int t, total = OrdersTotal() - 1; double profitL, // Профит лонговой позиции profitS; // Профит шортовой позиции for (int i=total; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; { if (OrderType() == OP_BUY) // Найден ордер типа OP_BUY { if (profitL < OrderProfit()) { profitL = OrderProfit(); pr("profitL =" + profitL); if (profitL < 0) long = false; } } else if (OrderType() == OP_SELL) // Найден ордер типа OP_SELL { if (profitS < OrderProfit()) { pr("profitS =" + profitS); profitS = OrderProfit(); if (profitS < 0) short = false; } } t++; } } return (t); }这里有一张截图。你可以看到,在图表上,白氏是微不足道的,旗帜=TRU都是如此。 first_may 2013.05.10 14:02 #3336 晚上好,请你告诉我如何使警报 表格只在条件发生时出现一次,而不是每次条件满足时都出现? Boris 2013.05.10 14:03 #3337 我为你感到难过!我将给你写下它如何在没有循环的情况下工作,因为循环会被函数拖慢!这就是我的想法。这是你的代码,但我该把它改成什么呢!?//+-------------------------------------------------------------------------------------+ //| Поиск своих ордеров | //+-------------------------------------------------------------------------------------+ bool& long, bool& short) double profitL, // Профит лонговой позиции profitS; // Профит шортовой позиции // int start() //......................................... if(ExistPositions() == false) { if(long == true) { OrderSend(.......OPEN_BUY........................) } if(short == true) { OrderSend(.......OPEN_SELL.........................) } } if(ExistPositions() == true) { if(profitL > 0 && long == true && short == false) { OrderSend(.......OPEN_BUY........................) } if(profitS > 0 && short == true && long == false) { OrderSend(.......OPEN_SELL.........................) } } 这个方案没有抽筋,而且立即见效!这是个很好的方案。摒弃不必要的功能!你可以在Dear Kim的实用函数中找到ExistPositions()函数。 Viktar Dzemikhau 2013.05.10 19:29 #3338 borilunad:我为你感到难过!我将给你写下它如何在没有循环的情况下工作,因为循环会被函数拖慢!这就是我的想法。这是你的代码,但我该把它改成什么呢!? 这个计划很简单,而且立即见效!摒弃不必要的功能!你可以在Kim的有用函数中找到ExistPositions()函数 Boris,ExistPositions 函数也有同样的循环,只是它有更多不必要的检查,所以它不会一路疲软。你的逻辑我很清楚,但以前的版本无法操作的原因并没有披露,这很奇怪:)你也使用这些旗帜。 if(profitL > 0 && long == true && short == false)而我正在示范,他们没有正确地返回。因此,同样地,如果profitL和profitS变量将出现在这个函数中,那么就不需要这些标志了。结果就是这样。//+-------------------------------------------------------------------------------------+ //| Поиск своих ордеров | //+-------------------------------------------------------------------------------------+ int FindOrders(double& profitL, double& profitS) { int t, total = OrdersTotal() - 1; for (int i=total; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; { if (OrderType() == OP_BUY) // Найден ордер типа OP_BUY { if (profitL < OrderProfit()) { profitL = OrderProfit(); pr("profitL =" + profitL); // Выводим профим через коммент на график } } if (OrderType() == OP_SELL) // Найден ордер типа OP_SELL { if (profitS < OrderProfit()) { pr("profitS =" + profitS); // Выводим профим через коммент на график profitS = OrderProfit(); } } t++; } } return (t); } //+-------------------------------------------------------------------------------------+ //| Получаем общий торговый сигнал | //+-------------------------------------------------------------------------------------+ int GetGeneralSignal() { double profitL, // Профит лонговой позиции profitS; // Профит шортовой позиции if (FindOrders(profitL, profitS) > 30) return (SIGNAL_NO); if(ExistPositions() == false) { if (GetRSI(1) < i_RSIToUpLimit) { if (GetRSI(0) > i_RSIToUpLimit) { return (SIGNAL_BUY); } } if (GetRSI(1) > i_RSIToDnLimit) { if (GetRSI(0) < i_RSIToDnLimit) { return (SIGNAL_SELL); } } } if(ExistPositions() == true) { if (GetRSI(1) < i_RSIToUpLimit) if (GetRSI(0) > i_RSIToUpLimit) { if(profitL > 0) return (SIGNAL_BUY); } if (GetRSI(1) > i_RSIToDnLimit) { if (GetRSI(0) < i_RSIToDnLimit) if(profitS > 0) return (SIGNAL_SELL); } } return (SIGNAL_NO); }还是那句话,它不是在信号上打开,而是在任何情况下打开。 tommy27 2013.05.10 19:30 #3339 大家好!我正在做一个虚拟跟踪,遇到了一个问题,closelevel=profitpips-TrailingStop,也就是说,跟踪和GlobalVariableSet("tral",0)都打开了,因为它们应该是这样,但是变量closelevel 变量被指定为profitpips 的值(它是以点为单位的当前利润),而不是 profitpips-TrailingStop 的值,以及所有随之而来的后果o_o。void Trailing() { if(!GlobalVariableCheck("tral")&&profitpips>=TrailingStart) { closelevel=profitpips-TrailingStop; GlobalVariableSet("tral",0); } if(GlobalVariableCheck("tral")&&profitpips>=closelevel+TrailingStop)closelevel=profitpips; if(GlobalVariableCheck("tral")&&profitpips<=closelevel) { Print ("ВСЁ ОТЛИЧНО ЗАКРЫЛИСЬ ПО ТРАЛЛУ"); for (int i=0; i<NumberOfTry; i++) { CloseAll(); Lot=LOT; } } return;}我想明白了,那条线if(GlobalVariableCheck("tral")&&profitpips>=closelevel+TrailingStop)closelevel=profitpips; 改为...if(GlobalVariableCheck("tral")&&profitpips-TrailingStop>=closelevel+TrailingStop)closelevel=profitpips; 现在,当利润增加时,关闭级别不被修改......。我已经想好了。 Boris 2013.05.10 20:41 #3340 hoz: Boris,ExistPositions 函数也有同样的循环,但有更多不必要的检查,所以它不会一路上都很迟钝。你的逻辑我很清楚,但以前的版本无法操作的原因并没有披露,这很奇怪:) 你还在使用这些旗帜。 而且我已经证明它们没有被正确送回。 因此,同样,如果profitL和profitS变量将出现在这个函数中,那么就不需要这些标志了。 这就是它的结果。 同样,它不是通过信号打开,而是通过任何东西打开。 然后在你自己的地方做一些挖掘工作!你的代码的每一个字都有一个函数,你需要用变量来做。这就是使代码变得沉重的原因。当你不能不使用函数时,你应该使用它们!我在Kim的代码中评论了所有我不需要的东西,而且所有的工作都非常快!这就是为什么我们要使用函数。记住,我问大家如何使程序在许多条件下运行得更快。现在,在5分钟内对所有蜱虫进行了一年的测试!我梳理了所有的条件和功能,扔掉了所有不必要的东西。 1...327328329330331332333334335336337338339340341...432 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
Boris,如果你把intGetGeneralSignal() 中的一个条件注释掉,开口就清楚了。
我已经追踪到它了。当当前未结订单的利润率为负数时,该标志不会改变其值。下面是重写的函数,它应该将空头 和多头 标志设置为假,也就是说,如果有减去的订单,就禁止开仓。
调用函数是这样的。
也许条件更适合白族人?的确,今天只有卖盘被打开,因为欧元下跌非常疲软,但还是有总比没有好!"。
没有。信号写在int函数GetGeneralSignal() 中,它的工作原理很清楚。信号很原始,我只是为了测试而采取的。如果PCI已经越过上界--买入,如果越过下界--卖出。我自己不使用指数,但我决定检查一下,这只是一个实验。
所以,你去那里。没有旗帜,一切工作都很完美。但旗帜却不是这样。当int FindOrders(bool&long,bool&short) 函数包含一个给定类型的订单且其利润低于零时,我的函数根据对函数GetGeneralSignal() 的引用,必须向某个标志传递假值,但事实上标志总是显示为真。
我可以在打印机中看到它,但不清楚为什么旗帜没有变化。
顺便说一下,我在印刷品中显示了订单的盈利能力。
而在打印标志的值时,这就是所显示的。
也就是说,很明显,当利润率低于零时,相应的标志应该被设置为假,但这并没有发生......。一切似乎都是基本的,但有些事情却没有发生。
不,在intGetGeneralSignal() 函数中有一个信号,效果很好。信号很原始,我只是为了测试而采取的。如果PCI已经越过上界--买入,如果越过下界--卖出。我自己不使用指数,但我决定检查一下,这只是一个实验。
所以,你去那里。没有旗帜,一切工作都很完美。但旗帜却不是这样。当int FindOrders(bool&long,bool&short) 函数包含一个给定类型的订单且其利润低于零时,我的函数根据对函数GetGeneralSignal() 的引用,必须向某个标志传递假值,但标志总是包含真。
我在印刷品中看到了它,但我不明白为什么旗帜没有变化。
我在印刷品中可以看到,但为什么旗帜没有变化,这一点并不清楚。纠正了错别字。
这里有一张截图。
你可以看到,在图表上,白氏是微不足道的,旗帜=TRU都是如此。
我为你感到难过!我将给你写下它如何在没有循环的情况下工作,因为循环会被函数拖慢!这就是我的想法。这是你的代码,但我该把它改成什么呢!?
这个方案没有抽筋,而且立即见效!这是个很好的方案。摒弃不必要的功能!你可以在Dear Kim的实用函数中找到ExistPositions()函数。我为你感到难过!我将给你写下它如何在没有循环的情况下工作,因为循环会被函数拖慢!这就是我的想法。这是你的代码,但我该把它改成什么呢!?
这个计划很简单,而且立即见效!摒弃不必要的功能!你可以在Kim的有用函数中找到ExistPositions()函数Boris,ExistPositions 函数也有同样的循环,只是它有更多不必要的检查,所以它不会一路疲软。你的逻辑我很清楚,但以前的版本无法操作的原因并没有披露,这很奇怪:)
你也使用这些旗帜。
而我正在示范,他们没有正确地返回。
因此,同样地,如果profitL和profitS变量将出现在这个函数中,那么就不需要这些标志了。
结果就是这样。
还是那句话,它不是在信号上打开,而是在任何情况下打开。
改为...
现在,当利润增加时,关闭级别不被修改......。
我已经想好了。
Boris,ExistPositions 函数也有同样的循环,但有更多不必要的检查,所以它不会一路上都很迟钝。你的逻辑我很清楚,但以前的版本无法操作的原因并没有披露,这很奇怪:)
你还在使用这些旗帜。
而且我已经证明它们没有被正确送回。
因此,同样,如果profitL和profitS变量将出现在这个函数中,那么就不需要这些标志了。
这就是它的结果。
同样,它不是通过信号打开,而是通过任何东西打开。