修改订单时的错误#1 - 页 5

 
borilunad:

维克多,你为什么要修改挂牌头寸中的SL和TP?一般来说,只有在开仓后才设置SL,而TP则是在SL转移到B/S后才设置!这是有意义的。那么,为什么要白白麻烦服务器,为什么要费这么大的劲呢!?

我们必须最大限度地减少和简化代码,使其快速而清晰地工作,然后因为市场的变化无常而更容易调整!仔细考虑市场实际情况的所有细微差别!

我还在挂单上设置了止损,以防连接中断或其他原因导致我无法在订单触发后设置更准确的止损(从系统的角度来看)。

如果一切正常,那么在订单触发后,我在正确的水平上设置止损。

 
Stells:

我还在挂单上立即设置了止损,以防连接中断或其他原因使我无法在订单触发后,从系统的角度设置更正确的止损。

如果一切正常,那么在订单触发后,我在正确的水平上设置止损。

在这一点上,你是对的,如果根据TS,你将你的SL设定在接近开盘价 的位置但是,多次修改开盘价、SL和TP是不合理的,它花费了大量的精力,使代码变得复杂,这不值得努力!
 

维克多,如果你那么需要它,你可以让它变得更容易! 检查开盘价,并以设置有SL和TP的挂单时的相同方式标记SL和TP!

这意味着对于SL写上Ask-SL或Bid+SL,而对于TP,分别写上Ask+TP或Bid-TP!试试吧,应该很好用!所以没有什么是不可能的!:)

 
borilunad:

你想使用Modify()函数吗?

我不会说不。而我甚至在某个地方等待...从昨天晚上开始。

keekkenen:
代码看起来很好......但在真实的情况下(不是演示),它能工作吗?
是的,在许多我不需要同时修改3个输入参数的EA中,它是有效的。请注意,我下载了一个用于测试者的变体,也有一个用于现实世界的变体。

borilunad

维克多,你为什么开始修改挂单中的SL和TP?一般来说,只有在开仓后设置SL,在SL移动到B/B后设置TP才是合理的!那么,为什么要白白麻烦服务器,为什么要费这么大的劲呢!?

我们必须最大限度地减少和简化代码,使其快速而清晰地工作,然后因为市场的变化无常而更容易调整!仔细思考与市场现实有关的所有细微差别!

Boris,如果根据文件,可以同时修改3个参数,为什么不使用呢?毕竟,这很方便!我正在考虑改变停止和采取的选项。 然而,我希望这个选项能够正常工作,如果这个功能在文件中被指定。如果不是这样,我们必须写出它不可能。那么这个问题就会自己消失。
 
borilunad:
在这一点上,你是对的,如果根据TS,你把你的SL放在接近开盘价的地方!这是很重要的。但要多次修改开盘价、SL和TP是不合理的,要浪费这么多精力,使 代码复杂化,这不值得!

鲍里斯,谁说我太频繁地冲击服务器了?我又不是在说一个交易系统。有不同的变化。有时只有STOP被移动,有时STOP和TAKE也被移动。这些是不同的变种。但在这种情况下,在我的情况下,平均每隔几个小时就会移动一次站台。或者每小时一次。这是不是很多 复杂化 码?

相反,代码成为... 更简单.你调用一个修改函数...把3个参数放进去,然后修改它...理想情况下,不计算终端的任何故障。

但如果不这样做。然后我们要修改开盘价,然后条件得到满足......停盘价,在一些条件得到满足或一些时间过去后,我们要修改取盘价。这是否像 简化 码?

 
hoz:

我不会说不。而我甚至在某个地方等待...所以从昨天晚上开始。

是的,在许多我不需要同时修改3个输入参数的EA中,它是有效的。请注意,我已经把测试者的版本打了折扣,也有针对真实的。

Boris,如果根据文件,可以同时修改3个参数,为什么不使用呢?毕竟,这很方便!我正在考虑改变停止和采取的选项。 然而,我希望这个选项能够正常工作,如果这个功能在文件中被指定。如果不是这样,我们必须写出它不可能。那么这个问题就会自己消失。

维克多,请看我的下一篇文章,在那里我给了你一个想法, 检查开盘价,并根据价格重新设置SL和TP,没有任何大惊小怪!

我现在就把这个功能贴出来!我也在某处 "等待 "你昨天的回应!你是谁?我们会更简单。

#include <stderror.mqh>//штатные инклюдники, чтобы 
#include <stdlib.mqh>  //вызывался ErrorDescription()



//------------------------/  Modify Order  \------------------------\\
void ModifyOrder(int ticket,double price,double stoploss,double takeprofit,datetime e,color arrow_color)
{
  int ModifyCnt = 0, err;
  while(ModifyCnt < 3) {
    if(OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),
    NormalizeDouble(takeprofit,Digits),0,arrow_color))
    ModifyCnt = 3;
    else err = GetLastError();
    if(err > 0) { 
      Print(ModifyCnt," #",ticket," Error modifing order: (", err , ") " , ErrorDescription(err));
      Sleep(5000); RefreshRates(); ModifyCnt++;
} } }

有任何问题,请提出来,不要等到明天再问。;)

功能是通用的,适用于任何具有待定和开放位置的修改!好运!

就在刚才,就像昨天一样,要去吃午饭了!万事如意!

 
borilunad:

我现在就把这个功能放出来!我昨天也在某个地方等着你的回复呢!让我们把事情简单化。

如果你有任何问题,不要等到明天再问!;)

功能是通用的,适用于任何具有待定和开放位置的修改!好运!

拦截检查和喷水检查又是怎么回事?还是现在不需要了?:)关于你的函数代码,我同意。这很简单,也很直截了当。但是支票...他们不在那里。为什么不呢?

我要去吃饭 了。

就在刚才,就像昨天一样,要去吃午饭了!一切都是!

这个时候谁在吃午饭,谁已经在吃晚饭了......
 
hoz:

我怎样才能摆脱这个该死的错误?我已经厌烦了。我正在检查函数的每个输入参数。对我来说,目前,它是这样的。

也就是说,如果参数没有被改变,就没有必要去改变它。我以前没有这样做过,但我决定...

然后,参数被传递给订单修改方法,如下所示。

日志中没有输出。

因此,期刊通知我们,如修改:好的,但随后...一个错误。所有的参数都没有改变。

该命令正在等待中。因此,我们可能会改变开盘价、停盘价和收盘价。而这一点,据我所知,并没有与文件相矛盾。

谁遇到过这样的事情?如何解决这个问题?

删除其他。
 
hoz:

鲍里斯,stopplevel和frizzlevel的检查情况如何。或者说,现在没有必要了吗?:)关于你的功能代码......我同意。这很简单,也很直截了当。但是支票...他们不在那里。为什么不呢?

这个时候谁在吃午饭,谁已经在吃晚饭了......

所有的检查都是在循环之前完成的,循环中有与每个类型相关的条件,以及对这个函数的调用,它只检查Modify()中的错误。

            ModifyOrder(OrderTicket(),OOP,SL,0,0,clrBlue); return(0);

还有什么要问的,但我现在要去吃饭了。;)

 
你是如何投票的?