我通常会实现这种功能。
//+----------------------------------------------------------------------------+ //| Управление позициями | //+----------------------------------------------------------------------------+ 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); } } }正如你所看到的,所写的函数执行的是相当具体的动作。然后将这些功能结合起来,以实施所需的战术,与职位一起工作。
可能是Stochast_1和Stochast_0的问题,其他都很好
谢谢你,KIM IV。我会努力想办法的。
买入是以出价结束的。在这种情况下,只有当与指定价差不同的报价恰好出现在最新的报价流中时,才会触发平仓。 如果这样的报价还没有设法(因年老而)离开经纪人审查的报价列表,那么平仓单就有机会被执行。
我对你的理解正确吗?买入头寸应该关闭
OrderClose(OrderTicket(),OrderLots(),Bid,3,Green)。
而卖出位置必须关闭。
OrderClose(OrderTicket(),OrderLots(),Ask,3,Green); ?rid:
我对你的理解正确吗?
总的来说,你说的很对。
正是如此!问题出在问
还是不想通过随机指数来平仓!我做得很好!我在外部参数中插入了一个开关。在代码的末尾--单独的区块用于关闭头寸我已经提供了一个绿色的三角形,用于关闭。
战术很简单:跨越由缓慢的MAs形成的通道边界,并有向上和向下的偏差。代码非常简单。下面是一个专家顾问。
хотел выложить весь код - не принимет сервер! - пишет больше допустимого//********* Закрытие позиций **************************************** 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_
谁能看一下?并告诉我有什么问题....
也许在开单时,出价和问价的设置不准确? 我一直对此感到困惑。
ticket=OrderSend(Symbol(),.......
附加的文件:
exp_nonlagma_.mq4
7 kb
我还没有看过这段代码。
但有一点是肯定的:代替 "if(Stochast_1>75 &&Stochast_0<75)",我会做出 "if(Stochast_1>75 &&Stochast_0<=75)"。
但有一点是肯定的:代替 "if(Stochast_1>75 &&Stochast_0<75)",我会做出 "if(Stochast_1>75 &&Stochast_0<=75)"。
晚上好!出现了一个问题。
我需要关闭一个头寸。通过指标的信号。此外,我需要能够通过止损或止盈平仓。(以防指标信号来得太晚)。- 这种情况经常发生)。
随后,为了关闭未结头寸,我规定。
然而,头寸仍然只在止损或止盈时关闭。(有一个非常罕见的--单一例外!)
尽管图表上的指标 显示--几乎所有未结头寸都应该通过指标的信号来关闭。请告诉我--哪里可能有错误......?