关闭职位。开启指示信号。 - 页 2 123456789 新评论 Rid 2007.11.25 23:27 #11 在我的例子中,它是"<=",但随机数值的变化非常强烈,甚至每一个刻度 - 还有四个小数位,即在一个刻度上,数值可能从(例如)75.0003变化到74.0900。 所以,符号"="可以省略,不用担心。但当然,为了不思考--我想我会的。 Andrey Khatimlianskii 2007.11.26 05:18 #12 看了看专家--一切似乎都是正确的。无法检查它--没有指示器。 试着在OrderClose 之前加入Print,看看是否出现平仓信号。 Rid 2007.11.26 13:14 #13 完成了。已添加。不,.....!结案通知书并没有出现在日志中。 //********* Закрытие позиций **************************************** if (AutoClose) { //----переменные для закрытия позиций ---- double Stochast_0 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,0); double Stochast_1 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,1); //---------------------------------------------------------------------- for (int v=0; v<OrdersTotal(); v++) { if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNum) { //----------------------------------------------------- if (OrderType() == OP_BUY) { if(Stochast_1>=75 && Stochast_0<75) { Print ( OrderClose(OrderTicket(),OrderLots(),Bid,3,Green)); // закрываем позицию return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if(Stochast_1<=25 && Stochast_0>25) { Print (OrderClose(OrderTicket(),OrderLots(),Ask,3,Green)); // закрываем позицию return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //Close_ //**************************************************************************** 我不明白!我把这个块放在另一个EA中。还有第三个......。.但情况并没有改变!职位 没有关闭。虽然很少,但很少(历史上一次或两次=1年),并且在视觉图上闪烁着绿色三角形的收盘。但它不应该是这样的!位置,从代码来看,应该像缝纫机的梭子一样关闭! NOnLagMA指标已上传 附加的文件: nonlagma_v5.mq4 6 kb Rid 2007.11.26 13:23 #14 也许这个区块不应该工作?毕竟,我们在开盘时的代码中有止损:-止损和止盈。也许所有其他的结束条件都因为这个原因而被忽略了? ticket=OrderSend(Symbol(),0,Lots,Ask,Slippage,Bid-SL_long*Point,Ask+TP_long*Point, NULL,MagicNum, 0,CLR_NONE)。 我将不得不以其他方式处理它。 Andrey Khatimlianskii 2007.11.26 13:43 #15 rid: 我什么都不懂! 位置关闭块在 "if(OrdersTotal() == 0) "子句内 你应该更细心一些)。 下面是测试变体的start()函数(没有SL和TP,有正确的信息,没有不必要的滑动)。 int start() { if(Time[0] <= prevtime) return(0); prevtime = Time[0]; if (UseTrailing) TrailPositions(); //---- double NLg_Signal_0 =iCustom(NULL,0,"NonLagMA_v5",0,NLg_Signal,1,0,0,0,0,0,0); double NLg_Signal_1 =iCustom(NULL,0,"NonLagMA_v5",0,NLg_Signal,1,0,0,0,0,0,1); double NLg_long0 =iCustom(NULL,0,"NonLagMA_v5",0,NLg_buy,0,0,0,0,DV_buy,0,0); double NLg_short0 =iCustom(NULL,0,"NonLagMA_v5",0,NLg_sell,0,0,0,0,DV_sell,0,0); if (OrdersTotal() == 0)//если нет открытых позиций { //---------проверяем условие на покупку----------------- if ( (NLg_Signal_1<=NLg_long0) && (NLg_Signal_0>NLg_long0) ) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0.0,0.0, NULL,MagicNum,0,CLR_NONE); if(ticket < 0) { Print("Ошибка #", GetLastError(), " при открытии ордера BUY" ); prevtime = Time[1]; } } //---------проверяем условие на продажу----------------- if ( (NLg_Signal_1>=NLg_short0) && (NLg_Signal_0<NLg_short0) ) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0.0,0.0, NULL,MagicNum,0,CLR_NONE); if(ticket < 0) { Print("Ошибка #", GetLastError(), " при открытии ордера SELL" ); prevtime = Time[1]; } } } //------------------------------------------------------------------ //********* Закрытие позиций **************************************** if (AutoClose) { //----переменные для закрытия позиций ---- double Stochast_0 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,0); double Stochast_1 =iStochastic(NULL,0,Stochastic_period,3,3,MODE_SMA,0,MODE_MAIN,1); //---------------------------------------------------------------------- for (int v=0; v<OrdersTotal(); v++) { if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()&& OrderMagicNumber()==MagicNum) { //----------------------------------------------------- if (OrderType() == OP_BUY) { if(Stochast_1>75 && Stochast_0<75) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if(Stochast_1<25 && Stochast_0>25) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //Close_ //**************************************************************************** return(0); } 但如果我是你,我不会在真实账户上使用这个EA。应该按部就班,或者说 "准备就绪",如果你喜欢的话;) Rid 2007.11.26 13:53 #16 是的,当然了。谢谢你的帮助!我理解你对我的错误的评论。 并已注意到你的建议。距离真正的交易还有很长的路要走... p.s/ 一切都是工作....!以及它是如何工作的! Rid 2007.11.26 14:41 #17 可以理解的是,利润不会因为这种关闭而增加。但缩减.....往往显著减少。 Alexander Sevastyanov 2007.11.26 20:56 #18 komposter: 我还没有看过这段代码。 但有一点是肯定的:代替 "if(Stochast_1>75 &&Stochast_0<75)",我会做出 "if(Stochast_1>75 &&Stochast_0<=75)"。 更好的方法是:if(Stochast_1-75.0>0 && Stochast_0-75.0<=0),以避免int 和double类型的 不必要的转换。 Rid 2007.11.26 22:54 #19 以及我们如何避免不必要的int和double。?此外,我们可以用外部参数代替数字--extern int Up_lim = 80;extern int Low_lim = 20。 Alexander Sevastyanov 2007.11.27 00:02 #20 rid: 以及我们如何避免不必要的int和double。?我搞不清楚。此外,我们可以使用外部参数代替数字,extern int Up_lim = 80;extern int Low_lim = 20。 首先,将实数Stochast_和整数75进行比较是不正确的,其次,将它们的差值与零进行比较更正确。 '实数的比较'。 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在我的例子中,它是"<=",但随机数值的变化非常强烈,甚至每一个刻度 - 还有四个小数位,即在一个刻度上,数值可能从(例如)75.0003变化到74.0900。
所以,符号"="可以省略,不用担心。但当然,为了不思考--我想我会的。
试着在OrderClose 之前加入Print,看看是否出现平仓信号。
完成了。已添加。不,.....!结案通知书并没有出现在日志中。
我不明白!我把这个块放在另一个EA中。还有第三个......。.但情况并没有改变!职位 没有关闭。虽然很少,但很少(历史上一次或两次=1年),并且在视觉图上闪烁着绿色三角形的收盘。但它不应该是这样的!位置,从代码来看,应该像缝纫机的梭子一样关闭!
NOnLagMA指标已上传
也许这个区块不应该工作?毕竟,我们在开盘时的代码中有止损:-止损和止盈。也许所有其他的结束条件都因为这个原因而被忽略了?
ticket=OrderSend(Symbol(),0,Lots,Ask,Slippage,Bid-SL_long*Point,Ask+TP_long*Point, NULL,MagicNum, 0,CLR_NONE)。
我将不得不以其他方式处理它。
我什么都不懂!
你应该更细心一些)。
下面是测试变体的start()函数(没有SL和TP,有正确的信息,没有不必要的滑动)。
但如果我是你,我不会在真实账户上使用这个EA。应该按部就班,或者说 "准备就绪",如果你喜欢的话;)
是的,当然了。谢谢你的帮助!我理解你对我的错误的评论。
并已注意到你的建议。距离真正的交易还有很长的路要走...
p.s/ 一切都是工作....!以及它是如何工作的!
我还没有看过这段代码。
但有一点是肯定的:代替 "if(Stochast_1>75 &&Stochast_0<75)",我会做出 "if(Stochast_1>75 &&Stochast_0<=75)"。
更好的方法是:if(Stochast_1-75.0>0 && Stochast_0-75.0<=0),以避免int 和double类型的 不必要的转换。
以及我们如何避免不必要的int和double。?我搞不清楚。此外,我们可以使用外部参数代替数字,extern int Up_lim = 80;extern int Low_lim = 20。
首先,将实数Stochast_和整数75进行比较是不正确的,其次,将它们的差值与零进行比较更正确。
'实数的比较'。