[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 46 1...394041424344454647484950515253...652 新评论 ilunga 2011.08.04 06:26 #451 rustein: 问题到底出在哪里? Warstein 2011.08.04 06:27 #452 ilunga: 问题到底出在哪里? https://www.mql5.com/ru/forum/115354/page78 ilunga 2011.08.04 06:31 #453 rustein: https://www.mql5.com/ru/forum/115354/page78在你给出的代码中,如果只有一个订单,则循环 for(;Cnt>=0;Cnt--) { RefreshRates(); OrderSelect(Cnt,SELECT_BY_POS); if(OrderMagicNumber()==Magic) { TotalOpenOrders++; } } 第一次将是试图选择一个不存在的订单 Warstein 2011.08.04 06:35 #454 ilunga: 在上述代码中,如果只有一个订单,循环将 第一次将是试图选择一个不存在的订单 谢谢你,我将为自己纠正。 --- 2011.08.04 06:37 #455 artmedia70: 终端进入深思熟虑状态,大约15分钟后,我把它干掉了。 没有什么... 如果是我,不用等一分钟就会杀了它。 Дмитрий 2011.08.04 06:44 #456 PapaYozh: 在使用Ask和Bid之前,立即执行RefreshRates() 试过了,没有变化 订单发送功能,似乎都是标准的 int OpenPosition(string AdvisorName,int Position,int Magic,double Lots,double StopLoss){ int N; int Сount = 5; int Slippage = (CalculateSpread() * 2); string PeriodString = GetPeriod(Period()); if(Position == OP_BUY){double Price = NormalizeDouble(Ask,Digits); string OrderName = " - Покупка по рынку"; string ErrorName = "Ошибка открытия ордера на покупку"; string CriticalErrorName = "Невозможно открыть ордер на покупку"; string MailCriticalErrorName = "Ошибка открытия"; color Arrow = Gold;} if(Position == OP_SELL){Price = NormalizeDouble(Bid,Digits); OrderName = " - Продажа по рынку"; ErrorName = "Ошибка открытия ордера на продажу"; CriticalErrorName = "Невозможно открыть ордер на продажу"; MailCriticalErrorName = "Ошибка открытия"; Arrow = YellowGreen;} while(IsTradeContextBusy() || !IsTradeAllowed()){int Interval = MathRand()+1000; Print("Торговый поток занят. Повторная проверка через "+DoubleToStr((Interval/1000),0)+" сек"); Sleep(Interval);} RefreshRates(); while(N < Сount){RefreshRates(); int Ticket = OrderSend(Symbol(),Position,Lots,Price,Slippage,StopLoss,0,AdvisorName+ OrderName,Magic,0,Arrow); if(Ticket > 0){if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)){int Flag = 1; PlaySound("recharge.wav"); break;}} else{Flag = 0; int PRM = GetLastError(); string ERR = Error(PRM,"OrderSend()"); ErrorProcessing(AdvisorName+" "+PeriodString,ErrorName+" "+PRM+" ("+ Error(PRM,"OrderSend()")+")","","OrderSend()"); N++; Sleep(5000);} if(N == Сount){ErrorProcessing(AdvisorName+" "+PeriodString,CriticalErrorName, MailCriticalErrorName+" "+PRM+" ("+Error(PRM,"OrderSend()")+")","OrderSend()");}} return(Flag);} PapaYozh 2011.08.04 07:06 #457 Dimoncheg: 试过了,没有变化。 订单发送功能,一切似乎都是标准的 首先,你用函数RefreshRates()刷新价格,并在Price中存储所需的价格。 然后你执行Sleep(Interval),这时的报价就会发生变化。 之后,你 用前一年的报价调用OrderSend()。 你期望得到什么回应? Дмитрий 2011.08.04 08:53 #458 PapaYozh: 首先,你用函数RefreshRates()刷新价格,并在Price中存储所需的价格。 然后你执行Sleep(Interval),这时的报价就会发生变化。 之后,你用前一年的报价调用OrderSend()。 你期望得到什么回应? 我的错,我在错误的地方现代化了一点,现在我已经把价格移出了功能区 OpenPosition("Sovetneg",OP_BUY,NormalizeDouble(Ask,Digits),Magic,SlowlyIncreasingLots(0.2),MultiStop(OP_BUY,StopLoss)); 该函数本身现在是 int OpenPosition(string AdvisorName,int Position,double Price,int Magic,double Lots,double StopLoss){ int N; int Сount = 5; int Slippage = (CalculateSpread() * 2); string PeriodString = GetPeriod(Period()); if(Position == OP_BUY){ string OrderName = " - Покупка по рынку"; string ErrorName = "Ошибка открытия ордера на покупку"; string CriticalErrorName = "Невозможно открыть ордер на покупку"; string MailCriticalErrorName = "Ошибка открытия"; color Arrow = Gold;} if(Position == OP_SELL){ OrderName = " - Продажа по рынку"; ErrorName = "Ошибка открытия ордера на продажу"; CriticalErrorName = "Невозможно открыть ордер на продажу"; MailCriticalErrorName = "Ошибка открытия"; Arrow = YellowGreen;} while(IsTradeContextBusy() || !IsTradeAllowed()){int Interval = MathRand()+1000; Print("Торговый поток занят. Повторная проверка через "+DoubleToStr((Interval/1000),0)+" сек"); Sleep(Interval);} while(N < Сount){RefreshRates(); int Ticket = OrderSend(Symbol(),Position,Lots,Price,Slippage,StopLoss,0,AdvisorName+ OrderName,Magic,0,Arrow); if(Ticket > 0){if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)){int Flag = 1; PlaySound("recharge.wav"); break;}} else{Flag = 0; int PRM = GetLastError(); string ERR = Error(PRM,"OrderSend()"); ErrorProcessing(AdvisorName+" "+PeriodString,ErrorName+" "+PRM+" ("+ Error(PRM,"OrderSend()")+")","","OrderSend()"); N++; Sleep(5000);} if(N == Сount){ErrorProcessing(AdvisorName+" "+PeriodString,CriticalErrorName, MailCriticalErrorName+" "+PRM+" ("+Error(PRM,"OrderSend()")+")","OrderSend()");}} return(Flag);} 现在看起来合适吗? Delf 2011.08.04 09:03 #459 你好。 你能告诉我type==4是什么意思吗? 和类型==5 在以下片断中。 double ma=iMA(Symbol(),PERIOD_D1,21,0,MODE_SMA,PRICE_CLOSE,0); for(int k=1; k<=OrdersTotal(); k++) bool select=OrderSelect(k-1,SELECT_BY_POS); if(select) { int type=OrderType(); int ticket=OrderTicket(); if (Bid<ma && type==4) OrderDelete(ticket); if (Bid>ma && type==5) OrderDelete(ticket); } 我明白,删除订单的条件,马云是清楚的,但一起如何? 谢谢你。 [ARCHIVE] Any rookie question, 如何编码? EA不会在多对上运行,需要帮助 PapaYozh 2011.08.04 09:11 #460 Dimoncheg: 现在看来,这不是很正确吗? 不,不是的。情况变得更加糟糕了 :) 理解,RefreshRates()更新了预定义的 Ask和Bid变量的值,你使用的是曾经存储在Price变量中的值。 1...394041424344454647484950515253...652 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
问题到底出在哪里?
https://www.mql5.com/ru/forum/115354/page78
在你给出的代码中,如果只有一个订单,则循环
第一次将是试图选择一个不存在的订单
在上述代码中,如果只有一个订单,循环将
第一次将是试图选择一个不存在的订单
终端进入深思熟虑状态,大约15分钟后,我把它干掉了。
如果是我,不用等一分钟就会杀了它。
在使用Ask和Bid之前,立即执行RefreshRates()
试过了,没有变化
订单发送功能,似乎都是标准的
试过了,没有变化。
订单发送功能,一切似乎都是标准的
首先,你用函数RefreshRates()刷新价格,并在Price中存储所需的价格。
然后你执行Sleep(Interval),这时的报价就会发生变化。
之后,你 用前一年的报价调用OrderSend()。
你期望得到什么回应?
首先,你用函数RefreshRates()刷新价格,并在Price中存储所需的价格。
然后你执行Sleep(Interval),这时的报价就会发生变化。
之后,你用前一年的报价调用OrderSend()。
你期望得到什么回应?
该函数本身现在是 现在看起来合适吗?我的错,我在错误的地方现代化了一点,现在我已经把价格移出了功能区
你好。
你能告诉我type==4是什么意思吗?
和类型==5
在以下片断中。
double ma=iMA(Symbol(),PERIOD_D1,21,0,MODE_SMA,PRICE_CLOSE,0);
for(int k=1; k<=OrdersTotal(); k++)
bool select=OrderSelect(k-1,SELECT_BY_POS);
if(select)
{
int type=OrderType();
int ticket=OrderTicket();
if (Bid<ma && type==4)
OrderDelete(ticket);
if (Bid>ma && type==5)
OrderDelete(ticket);
}
我明白,删除订单的条件,马云是清楚的,但一起如何?
谢谢你。
现在看来,这不是很正确吗?
不,不是的。情况变得更加糟糕了 :)
理解,RefreshRates()更新了预定义的 Ask和Bid变量的值,你使用的是曾经存储在Price变量中的值。