//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 21.03.2008 |//| Описание : Открывает позицию и возвращает её тикет. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента (NULL или "" - текущий символ) |//| op - операция |//| ll - лот |//| sl - уровень стоп |//| tp - уровень тейк |//| mn - MagicNumber |//+----------------------------------------------------------------------------+intOpenPosition(stringsy, intop, doublell, doublesl=0, doubletp=0, intmn=0){//-- skip --
stringlsComm=WindowExpertName()+""+GetNameTF(Period());
//-- skip --
该函数返回一个标志,即通过停止关闭最后一个位置。Flag is up -True- StopLoss已经触发。Flag lowered -False- 职位已因其他原因被关闭。使用外部参数设置更准确的选择要考虑的位置。
().
下午.在用这个函数实现代码时,出现了一些混乱。我是这样应用这个功能的。
if(isCloseLastPosByStop(NULL,OP_BUY, MagicLong1)){//если одна из открытых позиций BUY вдруг закрылась по стоплосу for(intrb_ = OrdersTotal() - 1; rb_ >= 0; rb_ -- ){if(OrderSelect(rb_, SELECT_BY_POS, MODE_TRADES)){//выбираем среди открытых и отложенных ордеров if((OrderSymbol()==Symbol()) && (OrderMagicNumber()==MagicLong1)){//закрываем все остальные позиции BUYOrderClose(OrderTicket(),OrderLots(),Bid,ОтклонениеЦены,Black);
OrderDelete(OrderTicket());// и удаляем BUY-отложки // return(0); // выходим }}}}
isCloseLastPosByStop()函数。
该函数返回一个标志,即通过停止关闭最后一个位置。Flag is up -True- StopLoss已经触发。Flag lowered -False- 职位已因其他原因被关闭。使用外部参数对需要考虑的位置进行更精确的选择。
OpenPosition()函数用于在线。
2008.05.20 04:47:41 !OBLD_EUR_S EURUSD,M30: 不允许调用专家函数;'stdlib'-'ErrorDescription' 。
我在我的专家顾问上连接了OpenPosition()函数,错误4059
错误4059 意味着该功能在测试模式下不可用。错误标识符是ERR_FUNCTION_NOT_ALLOWED_IN_TESTING_MODE。下面的函数产生了错误。MarketInfo, MessageBox, SendFTP, SendMail, WindowIsVisible, WindowFind, WindowHandle.
,将NULL改为Symbol(),它消失了,然后出现了一条信息
2008.05.20 04:47:41 !OBLD_EUR_S EURUSD,M30: 不允许调用专家函数;'stdlib'-'ErrorDescription' 。
isCloseLastPosByTake()函数。
该函数返回一个标志,用于在获利时关闭最后一个头寸。Flag is up -True- TakeProfit has triggered.旗帜降低 -虚假- 职位因其他原因被关闭。使用外部参数对要考虑的位置进行更准确的选择。
isLossLastPos()函数。
该函数返回最后关闭位置的损失标志。旗帜升起--真实--最后一个头寸以亏损关闭。旗帜下降--假的--最后一笔头寸以零点或盈利的方式关闭。这个函数不考虑掉期和佣金。位置的选择是由外部参数定义的。
isTradeToDay()函数。
该函数返回今天的交易标志。旗开得胜--确实如此--今天有开放的仓位。降旗--假的--今天没有开仓。要考虑的位置的选择是由外部参数设定的。
isCloseLastPosByStop()函数。
该函数返回一个标志,即通过停止关闭最后一个位置。Flag is up -True- StopLoss已经触发。Flag lowered -False- 职位已因其他原因被关闭。使用外部参数设置更准确的选择要考虑的位置。
().下午.在用这个函数实现代码时,出现了一些混乱。我是这样应用这个功能的。
到此为止,一切工作都很顺利!所有 "买入 "头寸被关闭,"买入 "头寸被删除,正如我所定义的那样!但随后专家顾问根据它的入市信号,重新设置挂单。正如所料。
但是,这些订单被立即删除了!显然,这面旗子仍然挂在那里。但它为什么会在那里?最后的头寸没有被止损平仓,而是被强行平仓!
我应该如何处理这种情况?如果我的 "专家顾问 "在执行命令后关闭了这个算法,我可以做些什么?
在这种情况下,我应该怎么做?这样,EA就能在关闭命令后正常下达下一个订单?
这个问题需要在整个任务的背景下解决,因为它不只是一个单一的行动,而是一种互动,而且是按照一定的顺序。因此,要完整地描述任务。你不需要密码。只要用语言描述任务就可以了。
热身问题。为什么要删除订单并把它们放回去?我认为最好是修改。
我的订单和头寸根据利润、损失、止损和限价订单以及其他原因被分组为数组。
在这个特定的案例中,我正在关闭使用止损单开立并已积累了指定利润的买入头寸阵列。我还删除了所有其他没有发挥作用的止损单。
//---------------------------------------------------------------------------------------------
现在我提出了一个评论函数--评论(isCloseLastPosByStop())。
看一看。最初,该函数=0。在第一次关闭止损评论(isCloseLastPosByStop())后;变为1,然后--在强制关闭其他头寸后,它并没有回到零,而是继续为1