任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 123 1...116117118119120121122123124125126127128129130...1178 新评论 Artyom Trishkin 2013.09.06 05:12 #1221 nick_travel: 日安! 请帮助并解释为什么专家顾问不能工作或交易? 也许他想吃东西?或者是在等着发工资... Artyom Trishkin 2013.09.06 05:26 #1222 hoz: 是的,顺便说一句,这种安排在执行上更有智慧。开始时的相关功能现在占用了更多空间。结果是这样的。没有什么可以优化的,是吗?我的意思是,当开始时根本没有什么东西,这就更方便了。而一切都纯粹是由函数调用。而上次的结果是,开始的时候有各种主要功能的过度增长和额外功能的过剩......。 如果你在一个函数中使用全局声明的数组名称,为什么要通过引用来传递数组?也许你应该这样做。 void FindOrders(int &massive[]) { int oType; ArrayInitialize(massive, 0); for (int i=OrdersTotal() - 1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; oType = OrderType(); massive[oType] = massive[oType] + 1; } } 而且你可以把它切下来一点儿。 void FindOrders(int &massive[]) { ArrayInitialize(massive, 0); for (int i=OrdersTotal() - 1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; massive[OrderType()] = massive[OrderType()] + 1; } } 那么从开始调用并显示信息的情况呢?在我看来,他们似乎弄错了什么。我们看不到pr()函数,所以我们没有任何建议。 我用快速算法检查了测试器中的订单数量。 FindOrders(mn0, OrdersMassive); Comment ("\n"+"Всего ордеров = "+OrdersTotal()+ "\n"+"Количество "+GetNameOP(0)+" = "+OrdersMassive[0]+ "\n"+"Количество "+GetNameOP(1)+" = "+OrdersMassive[1]+ "\n"+"Количество "+GetNameOP(2)+" = "+OrdersMassive[2]+ "\n"+"Количество "+GetNameOP(3)+" = "+OrdersMassive[3]+ "\n"+"Количество "+GetNameOP(4)+" = "+OrdersMassive[4]+ "\n"+"Количество "+GetNameOP(5)+" = "+OrdersMassive[5] ); 你可以将整个输出包裹在一个函数中,该函数将从数组中读取数据并以人性化的方式显示信息。 Viktar Dzemikhau 2013.09.06 06:39 #1223 nick_travel: 日安! 请帮助并解释为什么该EA不工作或不交易? 因为在这里。 不是全部 心灵感应者和 不是全部 和有远见的人! [删除] 2013.09.06 07:58 #1224 我明白了! 我的意思是,是否有一个设置或其他你需要的东西? Viktar Dzemikhau 2013.09.06 08:26 #1225 artmedia70: 如果你在函数中使用全局声明的数组名称,为什么要通过引用传递数组?也许应该是这样的。 void FindOrders(int &massive[]) { int oType; ArrayInitialize(massive, 0); for (int i=OrdersTotal() - 1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() != i_magic) continue; oType = OrderType(); massive[oType] = massive[oType] + 1; } } 事实上,是的,这很有意义。但你在这里也是通过引用来传递:))。我是在上次之后才有的,当时参数没有全局声明。 而关于pr的 功能。在这里,它是。 //+-------------------------------------------------------------------------------------+ //| Распринтовка на экран | //+-------------------------------------------------------------------------------------+ void pr (string txt) { string info []; ArrayResize(info, 20); string h, m, s, cm; int i; h = DoubleToStr(Hour(), 0); if (StringLen(h) < 2) h = "0" + h; m = DoubleToStr(Minute(), 0); if (StringLen(m) < 2) m = "0" + m; s = DoubleToStr(Seconds(), 0); if (StringLen(s) < 2) s = "0" + s; txt = h + ":" + m + ":" + s + " - " + txt; for (i=20-1; i>=1; i--) info[i] = info[i-1]; info[0] = txt; for (i=20-1; i>=0; i--) if (info[i] != "") { cm = info[i]; ObjectCreate ("txtw"+i, OBJ_LABEL, 0, 0, 0); ObjectSet ("txtw"+i, OBJPROP_CORNER, 1); ObjectSet ("txtw"+i, OBJPROP_XDISTANCE, 10); ObjectSet ("txtw"+i, OBJPROP_YDISTANCE, 30+15*i); ObjectSetText("txtw"+i, cm, 10, "Times New Roman", Green); } } Viktar Dzemikhau 2013.09.06 08:31 #1226 nick_travel: 我明白了! 我的意思是,是否有一个设置或其他你需要的东西? 我的意思是,我不认为这里有任何心灵感应者,即使有,只要试着让他们对这种壮举感兴趣......猜测和帮助... Boris 2013.09.06 08:42 #1227 hoz: 我的意思是,这里几乎没有心灵感应者,即使有,你最好设法让他们对这种壮举感兴趣......猜测和帮助... 也许还有一个非常好的系统,不允许错误地进入市场!我希望我有一个! Viktar Dzemikhau 2013.09.06 10:19 #1228 我在关闭所需的职位方面遇到了持续的停顿。底线是这样的。 1.正在跟踪关闭头寸的情况。 2.一旦最后一个仓位在外卖上关闭......所有未结头寸和待结头寸都应立即关闭。所有的东西都是按批次分类封闭的,也就是说,大批次的东西一次过,然后是小的。这只是为了获得订单方面的经验。 实施情况如下。 在start() 中的每一个刻度上。 for (int ord=OrdersTotal()-1; ord>=0; ord--) { if (!OrderSelect(ord,SELECT_BY_POS)) continue; if (OrderMagicNumber() != i_magic) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() == 6) continue; g_ticket = OrderTicket(); g_type = OrderType(); // Блок модификации ордеров if (i_sl != 0 || i_tp != 0) { if (OrderStopLoss() == 0 && OrderTakeProfit() == 0) { OrdersModifyer(g_ticket); } } // Закрытие всех ордеров, если последний ордер закрыт if (isCloseByTakeLastOpenPos(2)) { // if (g_type < 2) { ClosePosBySortLots(); } //else if (g_type > 1) { DeletePendingOrders(g_ticket); } } } 我们对关闭市场订单感兴趣,因为待定的订单已按要求删除。下面是我们的情况。 //+-------------------------------------------------------------------------------------+ //| Получаем состояние последней позиции (Открыта или закрыта) | //+-------------------------------------------------------------------------------------+ bool isCloseByTakeLastOpenPos(int delta) { datetime lastOrderCloseTime = -1, // Время закрытия последнего открытого ордера lastOOTHist = -1; // Время открытия последнего открытого ордера из истории int j = -1; pr ("Запустилась функция isCloseByTakeLastOpenPos"); for (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue; if (OrderMagicNumber() != i_magic) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() > 1) continue; // Все удалённые отложки нас не интересуют.. if (lastOrderCloseTime < OrderCloseTime()) // Находим время закрытия.. { lastOrderCloseTime = OrderCloseTime(); // ..последней закрытой позиции в истории j = i; pr ("j = " + j + " " + TimeToStr(TimeCurrent())); } } if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false); // pr ("OTP() = " + OrderTakeProfit() + "; OCP() " + OrderClosePrice() + " " + TimeToStr(TimeCurrent())); // pr ("OOP() = " + OrderOpenPrice() + "; OCP() " + OrderClosePrice() + " " + TimeToStr(TimeCurrent())); if (MathAbs(OrderTakeProfit() - OrderClosePrice()) > delta * pt) return (false); else { lastOOTHist = OrderOpenTime(); Comment("\n", "FUNC isCloseByTakeLastOpenPos: ", "\n", "j = ", j, "\n", "lastOOTHist = ", TimeToStr(lastOOTHist, TIME_SECONDS)); } } else { Comment("\n", "FUNC isCloseByTakeLastOpenPos: ", "\n", "j = ", j, "\n", "не удалось выбрать ордер в истории"); return(false); } for(int h=OrdersTotal()-1; h>=0; h--) { if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber() != i_magic) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() > 1) continue; if (lastOOTHist < OrderOpenTime()) return(false); // Выбранная рыночная позиция открыта позже закрытой по тейку } else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);} } return (true); } //+-------------------------------------------------------------------------------------+ //| Закрытие ордеров, отсортированных по размеру лотов | //+-------------------------------------------------------------------------------------+ void ClosePosBySortLots() { double a[][2]; int p = 0; for (int i=OrdersTotal()-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderMagicNumber() != i_magic) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() < 2) { p++; ArrayResize(a, p); a[p-1][0] = OrderLots(); a[p-1][1] = OrderTicket(); } } pr ("ClosePosBySortLots(): " + "p = " + p); if (p > 0) { ArraySort(a, WHOLE_ARRAY, 0, MODE_DESCEND); for(i=0; i<p; i++) { if (OrderSelect(a[i][1], SELECT_BY_TICKET, MODE_TRADES)) { if (OrderCloseTime() == 0) ClosePosBySelect(); } } } } //+-------------------------------------------------------------------------------------+ //| Закрытие одного, предварительно выбранного ордера | //+-------------------------------------------------------------------------------------+ void ClosePosBySelect() { bool fc; color clClose, clCloseBuy = Blue, clCloseSell = Red; double ll, pa, pb, pp; int err, it, NumberOfTry = 3; if (OrderType() == OP_BUY || OrderType() == OP_SELL) { for (it=1; it<=NumberOfTry; it++) { while (!IsTradeAllowed()) Sleep(5000); RefreshRates(); pa = MarketInfo(OrderSymbol(), MODE_ASK); pb = MarketInfo(OrderSymbol(), MODE_BID); if (OrderType() == OP_BUY) { pp = pb; clClose = clCloseBuy; } else { pp = pa; clClose = clCloseSell; } ll = OrderLots(); fc = OrderClose(OrderTicket(), ll, pp, 30, clClose); if (fc) { break; } else { err = GetLastError(); } } } else Print("Некорректная торговая операция. Close "); } 由于某些原因,一些订单没有被关闭。我看到一些片段就打印出来,我什么都不懂。下面是一个例子。 评论显示lastOOTHist=01:30:00,尽管这实际上并不正确。如果我们在结果窗口检查lastOOTHist,我们会看到 他们的关门时间是不同的... 这里有什么问题吗? Artyom Trishkin 2013.09.06 11:13 #1229 hoz: 事实上,是的,这很有意义。你在这里也有一个链接...:))这是我上次留下的,当时的参数不是全局的。 我认为,这里的数组必须通过引用来传递。否则,该函数就注定只能在一个硬编码的数组中工作。即使你在全球范围内定义了它。 Ivan Katsko 2013.09.06 16:30 #1230 很抱歉在周末需要,但我要问。 有没有人有过阅读已知发件人的邮箱上的信息的经验? 1...116117118119120121122123124125126127128129130...1178 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
日安!
请帮助并解释为什么专家顾问不能工作或交易?
是的,顺便说一句,这种安排在执行上更有智慧。开始时的相关功能现在占用了更多空间。结果是这样的。
没有什么可以优化的,是吗?
我的意思是,当开始时根本没有什么东西,这就更方便了。而一切都纯粹是由函数调用。而上次的结果是,开始的时候有各种主要功能的过度增长和额外功能的过剩......。
如果你在一个函数中使用全局声明的数组名称,为什么要通过引用来传递数组?也许你应该这样做。
而且你可以把它切下来一点儿。
那么从开始调用并显示信息的情况呢?在我看来,他们似乎弄错了什么。我们看不到pr()函数,所以我们没有任何建议。
我用快速算法检查了测试器中的订单数量。
你可以将整个输出包裹在一个函数中,该函数将从数组中读取数据并以人性化的方式显示信息。
日安!
请帮助并解释为什么该EA不工作或不交易?
因为在这里。 不是全部 心灵感应者和 不是全部 和有远见的人!
我明白了!
我的意思是,是否有一个设置或其他你需要的东西?
如果你在函数中使用全局声明的数组名称,为什么要通过引用传递数组?也许应该是这样的。
事实上,是的,这很有意义。但你在这里也是通过引用来传递:))。我是在上次之后才有的,当时参数没有全局声明。
而关于pr的 功能。在这里,它是。
我明白了!
我的意思是,是否有一个设置或其他你需要的东西?
我的意思是,我不认为这里有任何心灵感应者,即使有,只要试着让他们对这种壮举感兴趣......猜测和帮助...
我的意思是,这里几乎没有心灵感应者,即使有,你最好设法让他们对这种壮举感兴趣......猜测和帮助...
我在关闭所需的职位方面遇到了持续的停顿。底线是这样的。
1.正在跟踪关闭头寸的情况。
2.一旦最后一个仓位在外卖上关闭......所有未结头寸和待结头寸都应立即关闭。所有的东西都是按批次分类封闭的,也就是说,大批次的东西一次过,然后是小的。这只是为了获得订单方面的经验。
实施情况如下。
在start() 中的每一个刻度上。
我们对关闭市场订单感兴趣,因为待定的订单已按要求删除。下面是我们的情况。
由于某些原因,一些订单没有被关闭。我看到一些片段就打印出来,我什么都不懂。下面是一个例子。
评论显示lastOOTHist=01:30:00,尽管这实际上并不正确。如果我们在结果窗口检查lastOOTHist,我们会看到
他们的关门时间是不同的...
这里有什么问题吗?
事实上,是的,这很有意义。你在这里也有一个链接...:))这是我上次留下的,当时的参数不是全局的。
很抱歉在周末需要,但我要问。
有没有人有过阅读已知发件人的邮箱上的信息的经验?