关闭职位。开启指示信号。 - 页 5 123456789 新评论 Rid 2007.11.30 09:35 #41 komposter: 摆脱。 结果还是一样!在最后一个变体中,只有最后一个开仓的位置被关闭! 现在,在OrderClose 之后删除return,并观察结果;) //---------------------------------------------------------------------- // for (int v=0; v<OrdersTotal(); v++) { for ( int v = OrdersTotal() - 1; v >= 0; v -- ) { if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()&& OrderMagicNumber()==Magic) { //----------------------------------------------------- if (OrderType() == OP_BUY) { if( RVI_1>=Up_lim && RVI_0<Up_lim) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию // return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if((RVI_1_<=Low_lim) && (RVI_0_>Low_lim)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию // return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //Close_ //**************************************************************************** 我按照指示做了。而奇迹发生了。所有未平仓的头寸都被指标的信号所关闭!但为什么呢? Victor Nikolaev 2007.11.30 09:44 #42 rid: 康帕斯。 摆脱。 结果还是一样!在最后一个变体中,只有最后一个开仓的位置被关闭! 现在,在OrderClose 之后删除return,并观察结果;) //---------------------------------------------------------------------- // for (int v=0; v<OrdersTotal(); v++) { for ( int v = OrdersTotal() - 1; v >= 0; v -- ) { if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol()&& OrderMagicNumber()==Magic) { //----------------------------------------------------- if (OrderType() == OP_BUY) { if( RVI_1>=Up_lim && RVI_0<Up_lim) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); // закрываем позицию // return(0); // выходим } } //-------------------------------------------------------- if (OrderType() == OP_SELL) { if((RVI_1_<=Low_lim) && (RVI_0_>Low_lim)) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); // закрываем позицию // return(0); // выходим } } //------------------------------------------------------- } // Symbol() } // select } //total } //Close_ //**************************************************************************** 我按照指示做了。而奇迹发生了。所有未结头寸都根据指标信号进行了平仓!但为什么呢? 你的返回打断了处理周期。 Rid 2007.11.30 11:38 #43 明白了。感谢每个人的回应 Rid 2007.12.01 12:09 #44 KimIV: 我通常会实现这种功能。 //+----------------------------------------------------------------------------+ //| Управление позициями | //+----------------------------------------------------------------------------+ void ManagePositions() { double sl=0, tp=0; int ms[2]; ArrayInitialize(ms, 0); GetTradeSignal(ms); if (ExistPositions("", -1, Magic)) { if (ms[1]>0) ClosePositions("", OP_BUY , Magic); if (ms[1]<0) ClosePositions("", OP_SELL, Magic); } else { if (ms[0]>0) { if (StopLoss>0) sl=Ask-StopLoss*Point; else sl=0; if (TakeProfit>0) tp=Ask+TakeProfit*Point; else tp=0; OpenPosition(OP_BUY, sl, tp, Magic); } if (ms[0]<0) { if (StopLoss>0) sl=Bid+StopLoss*Point; else sl=0; if (TakeProfit>0) tp=Bid-TakeProfit*Point; else tp=0; OpenPosition(OP_SELL, sl, tp, Magic); } } } 正如你所看到的,所写的函数执行的是相当具体的动作。然后以这样的方式将这些功能结合起来,以实施所需的职位工作策略。 请伊戈尔把你的功能描述得更详细一些。 我想了解它,但由于我的知识不多,一开始就失去了思路。 Igor Kim 2007.12.01 13:48 #45 rid писал (а): 伊戈尔,请更详细地描述你的职能。我想了解它,但由于我的知识不多,我可能在一开始就失去了我的思路。 这是一个从工作的EA中提取的例子。功能分配。 函数GetTradeSignal()将交易信号填充到数组ms[]中。当然,每个专家都有自己的GetTradeSignal()函数的填料。 函数ExistPositions()返回位置存在的标志。 函数ClosePositions()在ms[]阵列中存在相应信号的情况下关闭一个或多个位置。在关闭之前,通过条件if(ExistPositions("", -1, Magic))检查位置的存在。 函数OpenPosition()在ms[]数组中存在相应信号的情况下,以当前价格打开一个位置。只有在没有信号的情况下才能开仓。 战术。 如果有头寸并且有平仓信号,那么就平仓。 如果没有头寸,而有开仓的信号,那么就开仓。 你看这有多简单?:-) Rid 2007.12.01 21:04 #46 是的,谢谢你。我看看我能想出什么办法。 Rid 2008.01.05 11:55 #47 大家好!圣诞快乐 另一个问题也出现了。我已经看了一遍理论,但还没有找到出路。出于某些原因,我需要在我的专家顾问中使用该功能关闭已开仓位,而不是使用止损(止损和止盈)。我已经做到了。它成功了!然而......。 当我试图将计算手数(B-lot)的库插入专家顾问时,我发现它以一种未知的方式开始工作!这就是所谓的 "手数"。如果我没有使用MM,平衡曲线(优化后)稳步上升,几乎没有明显的下降,加入MM后,我得到了一个急剧的暴跌!如果我没有使用MM,平衡曲线(优化后)稳步上升。此外!即使我们删除B-lot库,只是将手数从0.1增加到0.2,我们也会再次看到一个急剧的下拉。即使最初的存款分几次增加.....。也就是说,既不是图书馆的问题,也不是存款规模的问题--缩水开始时就很惨......。.我是这样进入市场的。 //---------------ПОКУПАЕМ ------------------------------------------ ... ... ... if (Long) { //выключатель вкл if (!ExpertOrder( MagicLong )) {//если нет открытых длинных позиций //Lots=GetSizeLot(); ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"AТ",MagicLong,0,Blue); if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return(0);} } } 这里的一切都很清楚,可以理解。然后我用OrderClose(...)函数关闭头寸。像这样。for (int v=0; v<OrdersTotal(); v++) { // for ( int v = OrdersTotal() - 1; v >= 0; v -- ){ if (OrderSelect(v, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() ) { //----------------------------------------------------- if (ExpertOrder( MagicLong )) { if(OrderProfit() > tp) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); return(0);} if(OrderProfit() <= -sl) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); return(0);} } }}} 当我最初设置lot=0.1时,设计工作正常!当我试图改变lot大小(增加)或试图启用MM库时,操作就中断了我不能理解为什么?我用 "Lots "代替了OrderLots(),但没有任何变化。请告诉我。 Andrey Khatimlianskii 2008.01.05 13:18 #48 rid: 在初始手数=0.1的情况下,设计工作正常!当我试图改变手数大小(增加)或试图启用MM库时--操作被破坏了!为什么?我不能理解为什么?我用 "Lots "代替了OrderLots(),但没有任何变化。请指教? 我们必须看一下EA的行为 方式是否不同。 订单的开启/关闭时间与以前相同吗? Rid 2008.01.05 14:24 #49 不,通过将手数从0.1增加到0.2,交易开始更频繁地发生,超过两倍的频率!在相同的外部参数下...这很奇怪,但我不太懒惰!我不知道为什么。我是这样做的。 我取消了使用OrderClose 函数的平仓,并在ticket=OrderSend(......)函数中通过止损和止盈规定了正常平仓。在这种情况下,MM块的工作应该是这样的!看来这都是关于功能的问题 if(OrderProfit() > tp) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); } 也许在增加批量时,"tp "的值应该相应改变? Andrey Khatimlianskii 2008.01.05 15:51 #50 我们应该用手指着天空吗?;) 错误在代码中。在哪里--我不知道,因为甚至没有一个代码。呼叫下一个分支的千里眼;) 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
结果还是一样!在最后一个变体中,只有最后一个开仓的位置被关闭!
我按照指示做了。而奇迹发生了。所有未平仓的头寸都被指标的信号所关闭!但为什么呢?
结果还是一样!在最后一个变体中,只有最后一个开仓的位置被关闭!
我按照指示做了。而奇迹发生了。所有未结头寸都根据指标信号进行了平仓!但为什么呢?
我通常会实现这种功能。
正如你所看到的,所写的函数执行的是相当具体的动作。然后以这样的方式将这些功能结合起来,以实施所需的职位工作策略。伊戈尔,请更详细地描述你的职能。我想了解它,但由于我的知识不多,我可能在一开始就失去了我的思路。
这是一个从工作的EA中提取的例子。功能分配。
战术。
你看这有多简单?:-)
大家好!圣诞快乐
另一个问题也出现了。我已经看了一遍理论,但还没有找到出路。出于某些原因,我需要在我的专家顾问中使用该功能关闭已开仓位,而不是使用止损(止损和止盈)。我已经做到了。它成功了!然而......。
当我试图将计算手数(B-lot)的库插入专家顾问时,我发现它以一种未知的方式开始工作!这就是所谓的 "手数"。如果我没有使用MM,平衡曲线(优化后)稳步上升,几乎没有明显的下降,加入MM后,我得到了一个急剧的暴跌!如果我没有使用MM,平衡曲线(优化后)稳步上升。此外!即使我们删除B-lot库,只是将手数从0.1增加到0.2,我们也会再次看到一个急剧的下拉。即使最初的存款分几次增加.....。也就是说,既不是图书馆的问题,也不是存款规模的问题--缩水开始时就很惨......。.我是这样进入市场的。
这里的一切都很清楚,可以理解。然后我用OrderClose(...)函数关闭头寸。像这样。当我最初设置lot=0.1时,设计工作正常!当我试图改变lot大小(增加)或试图启用MM库时,操作就中断了我不能理解为什么?我用 "Lots "代替了OrderLots(),但没有任何变化。请告诉我。
在初始手数=0.1的情况下,设计工作正常!当我试图改变手数大小(增加)或试图启用MM库时--操作被破坏了!为什么?我不能理解为什么?我用 "Lots "代替了OrderLots(),但没有任何变化。请指教?
订单的开启/关闭时间与以前相同吗?
不,通过将手数从0.1增加到0.2,交易开始更频繁地发生,超过两倍的频率!在相同的外部参数下...这很奇怪,但我不太懒惰!我不知道为什么。我是这样做的。
我取消了使用OrderClose 函数的平仓,并在ticket=OrderSend(......)函数中通过止损和止盈规定了正常平仓。在这种情况下,MM块的工作应该是这样的!看来这都是关于功能的问题
也许在增加批量时,"tp "的值应该相应改变?错误在代码中。在哪里--我不知道,因为甚至没有一个代码。呼叫下一个分支的千里眼;)