关闭职位。开启指示信号。 - 页 3 123456789 新评论 Andrey Khatimlianskii 2007.11.27 13:07 #21 goldtrader: 首先,将实数Stochast_和整数75进行比较是不正确的,其次,将它们的差值与零进行比较更为正确。 我认为在这种情况下,小数点后8位的误差不会影响结果。 Rid 2007.11.29 17:14 #22 另一个问题出现在平仓 区。我把这个块放在我最喜欢的专家顾问中。它只严格按照趋势的方向打开交易(我为此祝贺它......)。 但是,根据趋势的强度,专家顾问能够(并且做到了!)持续地开出几笔交易,--一笔接一笔!这就是专家顾问。这就是我需要在指标的信号下的平仓块。但问题就在这里!当并且如果在一个趋势中开了几个头寸,并开始对趋势进行修正时,该块中的指标就会发出平仓信号。因为我需要它。 然而,由于某些原因,并非所有开放的职位都被关闭。基本上,只有最早的那一个。那些后来被打开的,对关闭信号没有反应--而是继续运动。还有,--"历史像闹剧一样重演"!每一个平仓信号,只有一个,即最早的开仓被关闭,而其他的继续移动!这就是所谓的平仓。所有职位的地段都是恒定的。 这里是视觉模式图。通过指标的信号收盘,用一个绿色的三角形标记。可以清楚地看到,每次只有一个位置被信号关闭。我希望所有开放的职位都被关闭!请告诉我,这是什么原因? 提醒大家注意代码: /********* Закрытие позиций **************************************** if (AutoClose) { //---------------------------------------------------------------------- if (ExpertOrder(MagicLong)) { //есть открытые ордера на покупку if(Stochast_1>=Up_lim && Stochast_0<Up_lim) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);//закрываем позицию return(0); // выходим } } //-------------------------------------------------------- if (ExpertOrder(MagicShort)) { //есть открытые ордера на продажу if(Stochast_1<=Low_lim && Stochast_0>Low_lim) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);//закрываем позицию return(0); // выходим } } //------------------------------------------------------- } //if (AutoClose) Виктор 2007.11.29 17:32 #23 rid: 另一个问题出现在闭合块上... OrdersTotal()的循环在哪里? Andrey Khatimlianskii 2007.11.29 17:35 #24 granit77: OrdersTotal()的循环在哪里? 即使有,也是从0到OrdersTotal()-1,而应该是反过来的;) Rid 2007.11.29 17:58 #25 不,这里的情况不是这样的。订单的定义--不同。 //---------------------------------------------------------------------------------+ //---- Функция проверки наличия ордеров эксперта ----------------------------------+ //---------------------------------------------------------------------------------+ // false - ордеров данного эксперта нет; | // true - есть ордера данного эксперта; | //---------------------------------------------------------------------------------+ bool ExpertOrder (int VersionID){ bool result=false; int _OrdersTotal=OrdersTotal(); if (_OrdersTotal>0) { for (int jk=0; jk<_OrdersTotal; jk++) { if (OrderSelect(jk, SELECT_BY_POS, MODE_TRADES)) { if (OrderMagicNumber()==VersionID) { result=true; break; }//Найден ордер принадлежащий эксперту else { result=false; } } } } else { result=false; } //--------------------- return(result);} 而这个版本的代码对我来说更加舒适!因为我的多头和空头的开仓是相互独立的。 //---------проверяем условие на покупку---------------------------- if (LONG) { //если "выключатель" включен if ( ... ... ... ) { ticket=OrderSend(Symbol(),0,Lot,Ask,Slippage,Bid-SL*Point, Ask+TP*Point,NULL,MagicLong,0,CLR_NONE); Rid 2007.11.29 18:26 #26 然而,它仍然与标准的封闭性相同。 ... 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()==Magic) { //----------------------------------------------------- if (OrderType() == OP_BUY) { if(Stochast_1>=Up_lim && Stochast_0<Up_lim) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if(Stochast_1<=Low_lim && Stochast_0>Low_lim) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //Close_ Victor Nikolaev 2007.11.29 18:43 #27 rid: 然而,它仍然与标准的封闭性相同。 ... 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()==Magic) { //----------------------------------------------------- if (OrderType() == OP_BUY) { if(Stochast_1>=Up_lim && Stochast_0<Up_lim) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if(Stochast_1<=Low_lim && Stochast_0>Low_lim) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //Close_ 你可能想尝试做一个从OrdersTotal 到0的反向循环,这应该有帮助。 Rid 2007.11.29 18:56 #28 如何做到这一点?请写一下,如果不是太大负担的话。 顺便说一下图表--用上述 "标准":一切都一样--只有一个位置在指标的信号上关闭------。 Виктор 2007.11.29 19:13 #29 rid: 你是如何做到这一点的? 根据komposter和Vinin的说法,而不是。 for (int v=0; v<OrdersTotal(); v++) 写。 for (int v=OrdersTotal()-1; v>0; v--) 这对我来说很有效。 Victor Nikolaev 2007.11.29 19:26 #30 granit77: 摆脱。 你是如何做到的? 如果komposter和Vinin是可信的,相反。 for (int v=0; v<OrdersTotal(); v++) 写。 for (int v=OrdersTotal()-1; v>0; v--) 这对我来说很有效。 你说得很对。尽管KimV有实现所有这些的脚本和库。也许你应该在他的论坛上找找看。 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
首先,将实数Stochast_和整数75进行比较是不正确的,其次,将它们的差值与零进行比较更为正确。
另一个问题出现在平仓 区。我把这个块放在我最喜欢的专家顾问中。它只严格按照趋势的方向打开交易(我为此祝贺它......)。
但是,根据趋势的强度,专家顾问能够(并且做到了!)持续地开出几笔交易,--一笔接一笔!这就是专家顾问。这就是我需要在指标的信号下的平仓块。但问题就在这里!当并且如果在一个趋势中开了几个头寸,并开始对趋势进行修正时,该块中的指标就会发出平仓信号。因为我需要它。
然而,由于某些原因,并非所有开放的职位都被关闭。基本上,只有最早的那一个。那些后来被打开的,对关闭信号没有反应--而是继续运动。还有,--"历史像闹剧一样重演"!每一个平仓信号,只有一个,即最早的开仓被关闭,而其他的继续移动!这就是所谓的平仓。所有职位的地段都是恒定的。
这里是视觉模式图。通过指标的信号收盘,用一个绿色的三角形标记。可以清楚地看到,每次只有一个位置被信号关闭。我希望所有开放的职位都被关闭!请告诉我,这是什么原因?
提醒大家注意代码:
/********* Закрытие позиций **************************************** if (AutoClose) { //---------------------------------------------------------------------- if (ExpertOrder(MagicLong)) { //есть открытые ордера на покупку if(Stochast_1>=Up_lim && Stochast_0<Up_lim) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);//закрываем позицию return(0); // выходим } } //-------------------------------------------------------- if (ExpertOrder(MagicShort)) { //есть открытые ордера на продажу if(Stochast_1<=Low_lim && Stochast_0>Low_lim) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);//закрываем позицию return(0); // выходим } } //------------------------------------------------------- } //if (AutoClose)
另一个问题出现在闭合块上...
OrdersTotal()的循环在哪里?
不,这里的情况不是这样的。订单的定义--不同。
而这个版本的代码对我来说更加舒适!因为我的多头和空头的开仓是相互独立的。
然而,它仍然与标准的封闭性相同。 ...
然而,它仍然与标准的封闭性相同。 ...
你可能想尝试做一个从OrdersTotal 到0的反向循环,这应该有帮助。
如何做到这一点?请写一下,如果不是太大负担的话。 顺便说一下图表--用上述 "标准":一切都一样--只有一个位置在指标的信号上关闭------。
你是如何做到这一点的?
for (int v=0; v<OrdersTotal(); v++)
写。
for (int v=OrdersTotal()-1; v>0; v--)
这对我来说很有效。
你是如何做到的?
for (int v=0; v<OrdersTotal(); v++)
写。
for (int v=OrdersTotal()-1; v>0; v--)
这对我来说很有效。
你说得很对。尽管KimV有实现所有这些的脚本和库。也许你应该在他的论坛上找找看。