新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 15 1...8910111213141516171819202122...1953 新评论 Artyom Trishkin 2016.11.23 21:45 #141 Vitalie Postolache: 循环必须按相反顺序计算,从OrdersTotal()-1到0。 当在一个循环中关闭时。 Vitaly Muzichenko 2016.11.23 21:49 #142 Vitalie Postolache: 循环需要向后计数,从OrdersTotal()-1到0。 这些都是Kim的功能,它们的工作没有遗漏,问题出在其他方面 Vitalie Postolache 2016.11.23 22:18 #143 所以你不小心在同一个符号上打开了几个顾问,很多人都这么做了。 Renat Akhtyamov 2016.11.24 06:00 #144 Neron_76: 你好!我已经在我的模拟账户上 安装了我的外汇机器人,它已经运行了第二个月了。我今天打开终端,一个信号有两个未结订单,尽管我以前只下过一个订单。我对订单的数量有限制。原因可能是什么?从代码来看,你似乎有一个挂单,而不是一个市场订单。 对未结订单数量的限制只适用于市场订单。这就是为什么没有错误,因此没有问题。 Neron_76 2016.11.24 12:26 #145 Renat Akhtyamov:从代码来看,你似乎有一个挂单,而不是一个市场订单。 对未结订单数量的限制只适用于市场订单。因此,没有错误,因此也没有问题。 这一限制适用于未平仓和挂单。这是我在一个半月内遇到的第二个案例;其他案例都是正确的。 Vitaly Muzichenko 2016.11.24 14:06 #146 Neron_76: 该限制适用于未结订单 和待定订单。这是一个半月内的第二次,所有其他案件都是如此。这样试试吧。if(NumberOfPositions(Symb,-1,Magik_number)==0 && NumberOfOrders(Symb,-1,Magik_number)==0 && Delta_Buy<Low[1] && sar>Close[1]) { SetOrder(NULL,OP_BUYSTOP,Lts,sar,sar-SL*Point(),sar+TP*Point(),Magik_number); return(0);}if(NumberOfPositions(Symb,-1,Magik_number)==0 && NumberOfOrders(Symb,-1,Magik_number)==0 && Delta_Sell>High[1] && sar<Close[1]) { SetOrder(NULL,OP_SELLSTOP,Lts,sar,sar+SL*Point(),sar-TP*Point(),Magik_number); return(0);}//===============================================================================================//------------------------------- Возвращает количество позиций --------------------------------+//===============================================================================================int NumberOfPositions(string sy="", int op=-1, int mn=-1) {int kp=0; if(sy=="") sy=Symbol(); for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(mn<0 || OrderMagicNumber()==mn) kp++;}}}} return(kp);}//===============================================================================================//------------------------------- Возвращает количество ордеров --------------------------------+//===============================================================================================int NumberOfOrders(string sy="", int op=-1, int mn=-1) {int kp=0; if(sy=="") sy=Symbol(); for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if(OrderType()>1 && OrderType()<6) { if(mn<0 || OrderMagicNumber()==mn) kp++;}}}} return(kp);} Any questions from newcomers [警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 [WARNING CLOSED!] Any newbie Neron_76 2016.11.24 17:45 #147 Vitaly Muzichenko:这样试试吧。if(NumberOfPositions(Symb,-1,Magik_number)==0 && NumberOfOrders(Symb,-1,Magik_number)==0 && Delta_Buy<Low[1] && sar>Close[1]) { SetOrder(NULL,OP_BUYSTOP,Lts,sar,sar-SL*Point(),sar+TP*Point(),Magik_number); return(0);}if(NumberOfPositions(Symb,-1,Magik_number)==0 && NumberOfOrders(Symb,-1,Magik_number)==0 && Delta_Sell>High[1] && sar<Close[1]) { SetOrder(NULL,OP_SELLSTOP,Lts,sar,sar+SL*Point(),sar-TP*Point(),Magik_number); return(0);}//===============================================================================================//------------------------------- Возвращает количество позиций --------------------------------+//===============================================================================================int NumberOfPositions(string sy="", int op=-1, int mn=-1) {int kp=0; if(sy=="") sy=Symbol(); for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(mn<0 || OrderMagicNumber()==mn) kp++;}}}} return(kp);}//===============================================================================================//------------------------------- Возвращает количество ордеров --------------------------------+//===============================================================================================int NumberOfOrders(string sy="", int op=-1, int mn=-1) {int kp=0; if(sy=="") sy=Symbol(); for(int i=0; i<OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) { if(OrderType()>1 && OrderType()<6) { if(mn<0 || OrderMagicNumber()==mn) kp++;}}}} return(kp);} 我更换了功能,它在测试中工作正常。让我们看看它在模拟交易中的表现如何。但由于某些原因,在我看来,在我的案例中,这些和这些功能都是执行同样的任务,即回答是否有订单和头寸的问题。 Vitaly Muzichenko 2016.11.24 18:12 #148 Neron_76: 功能已被替换,在测试中工作正常。让我们看看它在模拟交易中的表现如何。但出于某种原因,在我看来,这两个函数执行的是同样的任务,即它们回答了是否存在订单和头寸的问题。 如果我重复两次设置订单,那么应该重新考虑"SetOrder"函数,也许它给出了两个请求,在第一个请求之后没有退出函数,它有时间来发送第二个请求。 Neron_76 2016.11.24 19:56 #149 Vitaly Muzichenko: 如果重复设置订单,那么应该审查"SetOrder"函数,也许它给出了两个请求,在第一个请求后没有退出函数,并设法发送第二个请求。 如果是这样的话,为什么不总是这样,在抽签之间发生了什么?我对这个不是很在行。 Artyom Trishkin 2016.11.24 20:06 #150 Neron_76: 如果是这样的话,为什么不总是发生,在抽搐之间的东西?我对这个不是很在行。 在一个符号的跳动之间,可能会有另一个符号的跳动。如果EA是多币种的,它可以看到来自另一个符号的ticks。另外,定时器事件--OnTimer()和OnChartEvent() 事件可能会在刻度之间发生--我几乎写成了 "活动事件"。将是一个设置... 1...8910111213141516171819202122...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
循环必须按相反顺序计算,从OrdersTotal()-1到0。
循环需要向后计数,从OrdersTotal()-1到0。
你好!我已经在我的模拟账户上 安装了我的外汇机器人,它已经运行了第二个月了。我今天打开终端,一个信号有两个未结订单,尽管我以前只下过一个订单。我对订单的数量有限制。原因可能是什么?
从代码来看,你似乎有一个挂单,而不是一个市场订单。
对未结订单数量的限制只适用于市场订单。
这就是为什么没有错误,因此没有问题。
从代码来看,你似乎有一个挂单,而不是一个市场订单。
对未结订单数量的限制只适用于市场订单。
因此,没有错误,因此也没有问题。
该限制适用于未结订单 和待定订单。这是一个半月内的第二次,所有其他案件都是如此。
这样试试吧。
SetOrder(NULL,OP_BUYSTOP,Lts,sar,sar-SL*Point(),sar+TP*Point(),Magik_number);
return(0);
}
if(NumberOfPositions(Symb,-1,Magik_number)==0 && NumberOfOrders(Symb,-1,Magik_number)==0 && Delta_Sell>High[1] && sar<Close[1]) {
SetOrder(NULL,OP_SELLSTOP,Lts,sar,sar+SL*Point(),sar-TP*Point(),Magik_number);
return(0);
}
//===============================================================================================
//------------------------------- Возвращает количество позиций --------------------------------+
//===============================================================================================
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
int kp=0;
if(sy=="") sy=Symbol();
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if(OrderType()==OP_BUY || OrderType()==OP_SELL) {
if(mn<0 || OrderMagicNumber()==mn) kp++;
}}}}
return(kp);
}
//===============================================================================================
//------------------------------- Возвращает количество ордеров --------------------------------+
//===============================================================================================
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
int kp=0;
if(sy=="") sy=Symbol();
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if(OrderType()>1 && OrderType()<6) {
if(mn<0 || OrderMagicNumber()==mn) kp++;
}}}}
return(kp);
}
这样试试吧。
SetOrder(NULL,OP_BUYSTOP,Lts,sar,sar-SL*Point(),sar+TP*Point(),Magik_number);
return(0);
}
if(NumberOfPositions(Symb,-1,Magik_number)==0 && NumberOfOrders(Symb,-1,Magik_number)==0 && Delta_Sell>High[1] && sar<Close[1]) {
SetOrder(NULL,OP_SELLSTOP,Lts,sar,sar+SL*Point(),sar-TP*Point(),Magik_number);
return(0);
}
//===============================================================================================
//------------------------------- Возвращает количество позиций --------------------------------+
//===============================================================================================
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
int kp=0;
if(sy=="") sy=Symbol();
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if(OrderType()==OP_BUY || OrderType()==OP_SELL) {
if(mn<0 || OrderMagicNumber()==mn) kp++;
}}}}
return(kp);
}
//===============================================================================================
//------------------------------- Возвращает количество ордеров --------------------------------+
//===============================================================================================
int NumberOfOrders(string sy="", int op=-1, int mn=-1) {
int kp=0;
if(sy=="") sy=Symbol();
for(int i=0; i<OrdersTotal(); i++) {
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if(OrderType()>1 && OrderType()<6) {
if(mn<0 || OrderMagicNumber()==mn) kp++;
}}}}
return(kp);
}
功能已被替换,在测试中工作正常。让我们看看它在模拟交易中的表现如何。但出于某种原因,在我看来,这两个函数执行的是同样的任务,即它们回答了是否存在订单和头寸的问题。
如果重复设置订单,那么应该审查"SetOrder"函数,也许它给出了两个请求,在第一个请求后没有退出函数,并设法发送第二个请求。
如果是这样的话,为什么不总是发生,在抽搐之间的东西?我对这个不是很在行。