OrderSend(...);
ModifyPos();void ModifyPos(){if(OrderSelect(0, SELECT_BY_POS)==true)// Если есть открытый ордер{if(OrderType()==OP_BUY)OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,Bid- TakeProfit*Point,0,Red);if(OrderType()==OP_SELL)OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,Ask+ TakeProfit*Point,0,Red);}}
void ModifyPos(){if(OrderSelect(0, SELECT_BY_POS)==true)// Если есть открытый ордер{if(OrderType()==OP_BUY)OrderModify(OrderTicket(),OrderOpenPrice(),Bid- Stop*Point,OrderTakeProfit(),0,Red);if(OrderType()==OP_SELL)OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ Stop*Point,OrderTakeProfit(),0,Red);}}
如果你的专家顾问是多币种,你必须。
越是这样,因为买入价 和 卖出价可能已经通过 MarketInfo()设置(说明) 。
有一次,我开始了一个多货币专家顾问的分支。看一看,一些问题就会清晰起来....
多币种专家顾问问题"。
而在这里特别是关于修改的问题
多币种顾问问题
我做了这个变体...打开后,我立即调用ModifyPos()
停止 - 20。
获利 - 100
日志中的信息 -OrderModify 错误130
尝试买入仓位的取舍
想一想吧!为什么买入头寸的止盈会突然低于当前价格?
难怪产生了一个错误
而卖出位置也是如此......
如果你不需要改变Take Profit,那么最好这样做。
同样地,对于卖方来说想一想吧!为什么你的买入头寸的止盈突然低于当前价格?
难怪产生了一个错误!
Rid非常感谢!
我没有注意到)...成功了,甚至成功了)
在测试过程中,现在日志中出现的最后一个错误是OrderSend 错误138。
当没有交易时,这个错误不间断地发生,也就是说,每一个tick都会发生这个错误。
一旦订单被触发,错误就消失了......订单关闭,错误又出现了......。
看起来它正试图在没有任何信号的情况下发送一个订单...但我不明白为什么,因为有一个卖出和买入的(如果)条件
在测试过程中,现在日志中出现的最后一个错误是OrderSend错误138。
当没有交易时,这个错误不间断地发生,也就是说,每一个tick都会发生这个错误。
一旦订单被触发,错误就消失了......订单关闭,错误又出现了......。
看起来它正试图在没有任何信号的情况下发送一个订单...但我不明白为什么,因为我们有条件(如果)出售和购买。
不要仔细阅读https://book.mql4.com/ru/content,都在那里。
阅读和理解是不同的事情...我想在实践中了解)
进入有一个条件,在这些条件满足后,控制被传递给打开订单的函数...
我不明白OrderSend 是如何绕过条件进行工作的......在逻辑上它产生了一个错误......因为没有进入条件
刷新预定义变量和时间序列数组 中的数据。当专家顾问或脚本已经进行了很长时间的计算,需要更新数据时,可以使用这个功能。如果数据被更新,它返回TRUE,否则返回FALSE。数据可能不会被更新,只因为它对应于客户终端的当前状态。专家顾问和脚本使用他们自己的历史数据副本工作。当前符号上的数据副本是在专家顾问或脚本首次启动时创建的。在每次启动专家顾问时(记住,该脚本只执行 一次,不依赖于传入的点数),最初创建的副本会被更新。在专家顾问或脚本运行期间,可能会出现一个或多个新的点,所以数据可能会过时。
//------------------------------------------------------------------------------
尝试在执行OrderSend 之前插入这个函数
另见:2008-05号开庭和设置令。 ::开幕和设置命令 2008-05-05 14:26:13
"为了使程序稳定工作,使被拒绝的交易订单数量最少,在执行OrderSend()函数之前,应使用MarketInfo()和RefreshRates()函数更新程序所使用的信息环境参数。"
无济于事...