[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 66 1...596061626364656667686970717273...631 新评论 Alekseu Fedotov 2012.04.11 19:14 #651 Fox_RM: 下午好!我在打开一定数量(用户定义的)的订单时遇到了一个问题。我已经写了一个小代码来解决这个问题。但有些时候会开出任意数量的订单,通常是在测试接近尾声的时候。下面是代码本身。 如果你有更简单的解决方案,我很乐意收到评论。 这可能更好。 extern string Kolichestvo_orderov = "Количество единовременно открытых ордеров"; extern int OrederBuy = 1; extern int OrederSell = 1; int OrdS,OrdB,ticketBuy,ticketSell,lastticketSell=0,lastticketBuy=0; //========================================================================================================// //Подсчет количества ордеров BUY & SELL// //========================================================================================================// for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderType()==OP_BUY) { OrdB++ } if(OrderType()==OP_SELL) { OrdS++ } } } //========================================================================================================// //---- Открытие ордеров SELL ----// //========================================================================================================// if(OrdS<=OrederSell) { //----- start if(trendDn==true && SthFast>88.2 && SthSlow<38.2) { ticketSell=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0,0,magick,0,Blue); //--- Если ордер открыт параметр OrdS увеличиваю } } //-----end //========================================================================================================// //----Открытие ордеров BUY ----// //========================================================================================================// if(OrdB<=OrederBuy) { //-----start if(trendUp==true && SthFast<11.8 && SthSlow>61.8) { ticketBuy=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,0,magick,0,Red); //--- Если ордер открыт параметр OrdB увеличиваю } } //------end //========================================================================================================// Artyom Trishkin 2012.04.11 23:47 #652 Lians: 谢谢,但这对我来说有点复杂,你的函数一次输出4条信息,而我需要一条。原来一行中不超过64个字符? 不,你把你的长信息分成你能在屏幕上看到的尽可能多的部分,但不超过四个。最主要的是,每个部分不应超过64个字符。如果你的信息很短,你可以用一个部分把它传递给一个函数。 看,我在预告片中附上了一个提示器来测试这个功能。在测试器中以可视化模式运行,并将Win_Inform指标放在可视化图表中(在我之前的预告片中的信息中)。你会立即看到这个功能是如何工作的。 附加的文件: luihrmxh_iprint.mq4 9 kb Сергей 2012.04.12 06:19 #653 r772ra: 这可能更好。这是我用来开始升级我的代码。你的版本有3个问题。 - 只要OP_BUY和 OP_SELL 订单被打开, OrdB和 OrdS 参数就会在每个tick 上自动增加,所以我只在相应的tick(卖出或买入)变化时添加了重新计算条件。 - 所有订单的重新计算会导致OrdB和 Ord 的错误,我们只需要考虑订单的最后一次变化。 - 在你的版本中, 如果 (OrdB<=OrederBuy),如果(OrdS<=OrederSell),没有减少 参数OrdB和 Ord来进一步开仓 。 情况似乎是这样的。 Alekseu Fedotov 2012.04.12 06:55 #654 Fox_RM: 我开始升级我的大约这个代码。你的版本有3个问题。 - 只要OP_BUY和 OP_SELL 订单被打开, OrdB和 OrdS 参数就会在每个tick上自动增加,所以我只在相应的tick(卖出或买入)变化时添加了重新计算条件。 - 所有订单的重新计算会导致OrdB和 Ord 的错误,我们只需要考虑订单的最后一次变化。 - 在你的版本中, 如果 (OrdB<=OrederBuy),如果(OrdS<=OrederSell),没有减少 参数OrdB和 Ord来进一步开仓 。 似乎是这样的。 没错,我们需要在for循环之前将订单的计数器清零。 //========================================================================================================// //Подсчет количества ордеров BUY & SELL// //========================================================================================================// OrdS=0; OrdB=0; for(int i = OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderType()==OP_BUY) { OrdB++ } if(OrderType()==OP_SELL) { OrdS++ } } } [Deleted] 2012.04.12 11:10 #655 下午好!请帮助我理解金的功能。 double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) { if (sy=="" || sy=="0") sy=Symbol(); double f=0; int d=MarketInfo(sy, MODE_DIGITS), s; if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2; for (s=2; s<100; s++) { f=iFractals(sy, tf, mode, s); if (f!=0) return(NormalizeDouble(f, d)); } Print("FindNearFractal(): Фрактал не найден"); return(0); } 我不明白这句话 if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2; 为什么在第一个if后面没有标志,当表达式被写成这样时会发生什么?StringFind 是做什么的,为什么要用JPY来搜索字符串?d=0,在哪种情况下分配2,在哪种情况下分配4,怎么可能?我将非常感谢您的回答,提前感谢)))。 Сергей 2012.04.12 13:35 #656 r772ra: 这就对了,在for循环之前,我们需要将订单计数器重置为零 ))由于某些原因,我自己没有想到这一点,于是开始摸索。 Alekseu Fedotov 2012.04.12 14:26 #657 Fox_RM: ))不知为什么,我自己没有想到,开始上气不接下气。 摆脱困境的好办法。 GaryKa 2012.04.12 14:26 #658 Lisi4ka330: 为什么在第一个if后面没有标志,如果表达式是这样写的会怎样?d=0,在哪种情况下分配2,在哪种情况下分配4,怎么可能?如果能得到答案,我将非常感激,提前感谢))))。 我认为这更有意义 if (d==0) { if (StringFind(sy, "JPY")<0) { d=4; } else { d=2; } } d - 报价精度(小数点后的数字)。 如果有一个日元对,那么主要货币的汇率是xxx.xx。 如果货币对中没有日元,那么主要货币的汇率将是x.xxxx(因此被称为"四位数")。 Сергей 2012.04.12 15:28 #659 r772ra: 是的,在for循环之前,我们需要将订单计数器重置为零。 我还忽略了另一点。 - 在你的版本中, 如果 (OrdB<=OrederBuy),如果(OrdS<=OrederSell),没有减少 参数OrdB和 OrdS , 以便进一步开立 订单。 在新版本中,例如,我们已经开了5个订单,重新计算了它们,但是if条件不会让我们再开任何订单。在我的旧变体中,OrdB--和 OrdS-- 被使用。 [Deleted] 2012.04.12 16:15 #660 GaryKa: 我认为这更有意义 d - 报价精度(小数点后的数字)。 如果有一个日元对,那么主要货币的汇率是xxx.xx。 如果货币对中没有日元,那么主要货币的汇率约为x.xxxx(因此称为 "四位数")。 GaryKa,谢谢你的回答,有点不清楚d怎么可能是0,因为函数 d=MarketInfo(sy, MODE_DIGITS) 返回小数点后的数字,所以d总是大于0,条件总是假的。 1...596061626364656667686970717273...631 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
下面是代码本身。
如果你有更简单的解决方案,我很乐意收到评论。
这可能更好。
谢谢,但这对我来说有点复杂,你的函数一次输出4条信息,而我需要一条。原来一行中不超过64个字符?
不,你把你的长信息分成你能在屏幕上看到的尽可能多的部分,但不超过四个。最主要的是,每个部分不应超过64个字符。如果你的信息很短,你可以用一个部分把它传递给一个函数。
看,我在预告片中附上了一个提示器来测试这个功能。在测试器中以可视化模式运行,并将Win_Inform指标放在可视化图表中(在我之前的预告片中的信息中)。你会立即看到这个功能是如何工作的。
这可能更好。
这是我用来开始升级我的代码。你的版本有3个问题。
- 只要OP_BUY和 OP_SELL 订单被打开, OrdB和 OrdS 参数就会在每个tick 上自动增加,所以我只在相应的tick(卖出或买入)变化时添加了重新计算条件。
- 所有订单的重新计算会导致OrdB和 Ord 的错误,我们只需要考虑订单的最后一次变化。
- 在你的版本中, 如果 (OrdB<=OrederBuy),如果(OrdS<=OrederSell),没有减少 参数OrdB和 Ord来进一步开仓 。
情况似乎是这样的。
我开始升级我的大约这个代码。你的版本有3个问题。
- 只要OP_BUY和 OP_SELL 订单被打开, OrdB和 OrdS 参数就会在每个tick上自动增加,所以我只在相应的tick(卖出或买入)变化时添加了重新计算条件。
- 所有订单的重新计算会导致OrdB和 Ord 的错误,我们只需要考虑订单的最后一次变化。
- 在你的版本中, 如果 (OrdB<=OrederBuy),如果(OrdS<=OrederSell),没有减少 参数OrdB和 Ord来进一步开仓 。
似乎是这样的。
没错,我们需要在for循环之前将订单的计数器清零。
下午好!请帮助我理解金的功能。
我不明白这句话
为什么在第一个if后面没有标志,当表达式被写成这样时会发生什么?StringFind 是做什么的,为什么要用JPY来搜索字符串?d=0,在哪种情况下分配2,在哪种情况下分配4,怎么可能?我将非常感谢您的回答,提前感谢)))。
这就对了,在for循环之前,我们需要将订单计数器重置为零
))不知为什么,我自己没有想到,开始上气不接下气。
摆脱困境的好办法。
我认为这更有意义
d - 报价精度(小数点后的数字)。
如果有一个日元对,那么主要货币的汇率是xxx.xx。
如果货币对中没有日元,那么主要货币的汇率将是x.xxxx(因此被称为"四位数")。
是的,在for循环之前,我们需要将订单计数器重置为零。
我还忽略了另一点。
- 在你的版本中, 如果 (OrdB<=OrederBuy),如果(OrdS<=OrederSell),没有减少 参数OrdB和 OrdS , 以便进一步开立 订单。
在新版本中,例如,我们已经开了5个订单,重新计算了它们,但是if条件不会让我们再开任何订单。在我的旧变体中,OrdB--和 OrdS--
被使用。
我认为这更有意义
d - 报价精度(小数点后的数字)。
如果有一个日元对,那么主要货币的汇率是xxx.xx。
如果货币对中没有日元,那么主要货币的汇率约为x.xxxx(因此称为 "四位数")。