[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 333 1...326327328329330331332333334335336337338339340...432 新评论 [删除] 2013.05.09 19:53 #3321 亲爱的程序员们,你们好! 有必要进行以下分析--程序应分析给它的参数,并在一个单独的窗口中以一组日期的表格形式输出结果。这意味着该程序应分析历史并显示必要的日期。 是否可以在MQL4中做到这一点,或者最好是导出历史记录,用另一种语言编写的程序来分析数据? 提前感谢您! Andrey F. Zelinsky 2013.05.09 20:06 #3322 GygaByte: 正确,但正如实践所表明的--并非总是如此。如果第五个小数点=5(1.xxxx5),数值仍然是扭曲的。这个问题仍然有效... P.S. 一般来说,我需要给MagicNumber分配一个价格值...并在这里输入MagicNumber - int,并尝试通过以下方式进行转换 还有谁能给我建议?谢谢你。 你用不同的四舍五入进行输出--所以你没有看到完整的数字--你认为有些东西是扭曲的。默认情况下,当输出实数时,输出 被四舍五入到第四位。对于5位数的数字,你必须明确地将输出四舍五入。Alert ("bid= ",bid," bid_minus= ",DoubleToStr(bid_minus,Digits)," bid_plus= ",DoubleToStr(bid_plus,Digits), " Bid = ",DoubleToStr(Bid,Digits));看看你自己的图片--在没有DoubleToStr()和有DoubleToStr()的情况下输出标书。 Boris 2013.05.09 20:35 #3323 hoz: Artyom和Boris,感谢你们 "嚼碎 "了我的问题。我有一段时间会在相当简单的事情上卡住,就像这次的情况一样......。 现在有一个新的问题。 我在计算未平仓订单量t 的函数中加入了,搜索具有指定利润的指定类型的订单,并将其利润与某个指定值(目前为0) 进行比较。此外,如果没有未结订单,则用函数FindOrders()参数返回2个值为True的标志,这意味着你可以发送订单,但如果有订单,则检查利润以确保它高于设定值,如果它低于设定值,则用函数FindOrders()参数返回2个值为False的标志,因此当某个方向有亏损订单时,没有投资到亏损方向。 之后,我在信号函数中调用FindOrders()函数。 订单已经完全移动开来。这个逻辑似乎是正确的。也许,你能看出我哪里犯错了吗? 我明白,所有的事情都可以用一个单独的函数更容易地完成,我可以做到。但我想了解为什么它在这个版本中不起作用。 维克多,我不能完全理解你的算法,但我可以给你一些建议!我也遇到过这种情况,当逻辑上有错误时。如果在你的条件中发现模棱两可或相互排斥,程序就会停滞。也许你知道你想要什么,但不能正确建立代码的逻辑。寻找这些故障,并在一张纸上写下你想要执行的条件的整个顺序,一个一个地用箭头标出,以示清楚好运! Viktar Dzemikhau 2013.05.09 23:22 #3324 borilunad: 维克多,我不能完全理解你的算法,但我可以给你一些建议!当逻辑上有错误时,我也会发生这种情况。如果在你的条件中发现模棱两可或相互排斥,程序就会停滞。也许你知道你想要什么,但不能正确建立代码的逻辑。寻找这些故障,并在一张纸上写下你想要执行的条件的整个顺序,一个一个地用箭头标出,以示清楚好运! 所以那里有一个简单的逻辑。如果没有打开的订单,订单将被信号打开。而如果有订单打开,那么订单应该由一个特定的信号打开,如果在特定方向(买入或卖出)的订单的利润高于某个值,即至少不在负值。(我在那里设置了0,用于测试)。我发现了一个逻辑上的错误。以下是已经出来的内容。//+-------------------------------------------------------------------------------------+ //| Поиск своих ордеров | //+-------------------------------------------------------------------------------------+ int FindOrders(bool& long, bool& short) { 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 (OrderProfit() < 0) // Если профит ордера ниже заданного значения,.. long = false; // .. покупка запрещена } if (OrderType() == OP_SELL) // Найден ордер типа OP_SELL { if (OrderProfit() < 0) // Если профит ордера ниже заданного значения,.. short = false; // .. продажа запрещена } t++; } } return (t); } //+-------------------------------------------------------------------------------------+ //| Получаем общий торговый сигнал | //+-------------------------------------------------------------------------------------+ int GetGeneralSignal() { bool short = true, long = true; if (FindOrders(short, long) > 3) return (-1); if (GetRSI(1) < i_RSIToUpLimit) if (GetRSI(0) > i_RSIToUpLimit) { if (long == true) return (SIGNAL_BUY); } if (GetRSI(1) > i_RSIToDnLimit) if (GetRSI(0) < i_RSIToDnLimit) { if (short == true) return (SIGNAL_SELL); } return (-1); }现在,卖单在坐席上正确打开,但多头却根本没有打开。虽然该标志的两个变量的值都是1,即真。 mikhail12 2013.05.10 07:51 #3325 我在mt4上有这个问题。 随着mt4经纪商软件(即我上周使用的3个)在我的电脑上启动,我的电脑上出现了 "以用户身份运行 "的窗口(与使用 "以用户身份运行 "相同)。在任何行动选择下,MT4正常打开。 我怎样才能让mt4.eh恢复到没有这个窗口的运行状态?也许谁知道或了解什么是错的...... [删除] 2013.05.10 08:41 #3326 下午好,遇到了需要快速取消所有待处理订单 的情况。 OrderClose 忽略了挂单。哪种操作员使用起来更方便,是否有这种选择? Viktar Dzemikhau 2013.05.10 09:06 #3327 Notter:下午好,遇到了需要快速取消所有待处理订单的情况。 OrderClose 忽略了挂单。哪种操作员使用起来更方便,是否有这种选择? 你只能关闭市场订单,你需要OrderDelete 操作符来删除挂单。 [删除] 2013.05.10 10:13 #3328 ǞǞǞ谢谢你! Boris 2013.05.10 10:26 #3329 hoz: 所以,一切的逻辑都很简单。我们需要,如果没有订单,订单将被信号打开。 而如果有订单打开,那么订单应该由一个特定的信号打开,如果在特定方向(买入或卖出)的订单的利润高于某个值,即至少不在负值。(我在那里设置了0,用于测试)。 我发现了一个逻辑上的错误。以下是已经出来的内容。 现在,卖单在坐席上正确打开,但多头却根本没有打开。虽然该标志的两个变量的值都是1,即为真。 维克多,做一些检查!通过注释多头买入,在日志中看看空头卖出是如何进行的!反之亦然,然后看看有什么区别,并找出它不工作的原因! Viktar Dzemikhau 2013.05.10 11:50 #3330 borilunad: 维克多,让我们检查一下!通过注释长边,检查短边在日志中是如何工作的!反之亦然,然后看看有什么区别,并找到它不工作的原因! Boris,如果你把intGetGeneralSignal() 中的一个条件注释掉,开口就清楚了。我已经跟踪了。当当前未结订单的利润率为负数时,该标志不会改变其值。这里是重写的函数,它应该将标志短线 和长线 的值设置为假,即禁止我们在有负数订单时开仓。//+-------------------------------------------------------------------------------------+ //| Поиск своих ордеров | //+-------------------------------------------------------------------------------------+ 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; } if (OrderType() == OP_SELL) // Найден ордер типа OP_SELL { Print("if (OrderType() == OP_SELL)"); profitS = OrderProfit(); if (profitS < OrderProfit()) if (profitS < 0) long = false; } t++; } } return (t); }这里是调用函数。//+-------------------------------------------------------------------------------------+ //| Получаем общий торговый сигнал | //+-------------------------------------------------------------------------------------+ int GetGeneralSignal() { bool short = true, long = true; if (FindOrders(short, long) > 15) return (SIGNAL_NO); Print("long = ", long); Print("short = ", short); if (GetRSI(1) < i_RSIToUpLimit) if (GetRSI(0) > i_RSIToUpLimit) { if (long == true) return (SIGNAL_BUY); } if (GetRSI(1) > i_RSIToDnLimit) if (GetRSI(0) < i_RSIToDnLimit) { if (short == true) return (SIGNAL_SELL); } return (SIGNAL_NO); } 1...326327328329330331332333334335336337338339340...432 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
有必要进行以下分析--程序应分析给它的参数,并在一个单独的窗口中以一组日期的表格形式输出结果。这意味着该程序应分析历史并显示必要的日期。
是否可以在MQL4中做到这一点,或者最好是导出历史记录,用另一种语言编写的程序来分析数据?
提前感谢您!
正确,但正如实践所表明的--并非总是如此。
如果第五个小数点=5(1.xxxx5),数值仍然是扭曲的。
这个问题仍然有效...
P.S. 一般来说,我需要给MagicNumber分配一个价格值...并在这里输入MagicNumber - int,并尝试通过以下方式进行转换
还有谁能给我建议?
谢谢你。
你用不同的四舍五入进行输出--所以你没有看到完整的数字--你认为有些东西是扭曲的。默认情况下,当输出实数时,输出 被四舍五入到第四位。对于5位数的数字,你必须明确地将输出四舍五入。
看看你自己的图片--在没有DoubleToStr()和有DoubleToStr()的情况下输出标书。
Artyom和Boris,感谢你们 "嚼碎 "了我的问题。我有一段时间会在相当简单的事情上卡住,就像这次的情况一样......。
现在有一个新的问题。
我在计算未平仓订单量t 的函数中加入了,搜索具有指定利润的指定类型的订单,并将其利润与某个指定值(目前为0) 进行比较。此外,如果没有未结订单,则用函数FindOrders()参数返回2个值为True的标志,这意味着你可以发送订单,但如果有订单,则检查利润以确保它高于设定值,如果它低于设定值,则用函数FindOrders()参数返回2个值为False的标志,因此当某个方向有亏损订单时,没有投资到亏损方向。
之后,我在信号函数中调用FindOrders()函数。
订单已经完全移动开来。这个逻辑似乎是正确的。也许,你能看出我哪里犯错了吗?
我明白,所有的事情都可以用一个单独的函数更容易地完成,我可以做到。但我想了解为什么它在这个版本中不起作用。
维克多,我不能完全理解你的算法,但我可以给你一些建议!当逻辑上有错误时,我也会发生这种情况。如果在你的条件中发现模棱两可或相互排斥,程序就会停滞。也许你知道你想要什么,但不能正确建立代码的逻辑。寻找这些故障,并在一张纸上写下你想要执行的条件的整个顺序,一个一个地用箭头标出,以示清楚好运!
所以那里有一个简单的逻辑。如果没有打开的订单,订单将被信号打开。
而如果有订单打开,那么订单应该由一个特定的信号打开,如果在特定方向(买入或卖出)的订单的利润高于某个值,即至少不在负值。(我在那里设置了0,用于测试)。
我发现了一个逻辑上的错误。以下是已经出来的内容。
现在,卖单在坐席上正确打开,但多头却根本没有打开。虽然该标志的两个变量的值都是1,即真。
我在mt4上有这个问题。
随着mt4经纪商软件(即我上周使用的3个)在我的电脑上启动,我的电脑上出现了 "以用户身份运行 "的窗口(与使用 "以用户身份运行 "相同)。在任何行动选择下,MT4正常打开。
我怎样才能让mt4.eh恢复到没有这个窗口的运行状态?也许谁知道或了解什么是错的......
下午好,遇到了需要快速取消所有待处理订单 的情况。 OrderClose 忽略了挂单。哪种操作员使用起来更方便,是否有这种选择?
下午好,遇到了需要快速取消所有待处理订单的情况。 OrderClose 忽略了挂单。哪种操作员使用起来更方便,是否有这种选择?
你只能关闭市场订单,你需要OrderDelete 操作符来删除挂单。
ǞǞǞ
谢谢你!
所以,一切的逻辑都很简单。我们需要,如果没有订单,订单将被信号打开。
而如果有订单打开,那么订单应该由一个特定的信号打开,如果在特定方向(买入或卖出)的订单的利润高于某个值,即至少不在负值。(我在那里设置了0,用于测试)。
我发现了一个逻辑上的错误。以下是已经出来的内容。
现在,卖单在坐席上正确打开,但多头却根本没有打开。虽然该标志的两个变量的值都是1,即为真。
维克多,让我们检查一下!通过注释长边,检查短边在日志中是如何工作的!反之亦然,然后看看有什么区别,并找到它不工作的原因!
Boris,如果你把intGetGeneralSignal() 中的一个条件注释掉,开口就清楚了。
我已经跟踪了。当当前未结订单的利润率为负数时,该标志不会改变其值。这里是重写的函数,它应该将标志短线 和长线 的值设置为假,即禁止我们在有负数订单时开仓。
这里是调用函数。