[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 155

 
todem:
在趋势的定义中?

一段 时期内的趋势变化 中...见https://www.mql5.com/ru/forum/131277/page148https://www.mql5.com/ru/forum/131277/page149
 

你能告诉我为什么OrderSelect 会返回TRUE,即使这个票据的订单不存在(被删除)?


   if(OrderSelect(tickethigh1, SELECT_BY_TICKET, MODE_TRADES)==false)
 
100yan:

一个 时间段上的趋势变化 ...


请告诉我Tp和Slossa功能在这里是否有效

if (total > 0) AveragePrice =NormalizeDouble(AveragePrice / Count, Digits);
if (NewOrdersPlaced) {
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt-){
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_BUY){
PriceTarget = AveragePrice + TakeProfit * Point;
BuyTarget = PriceTarget;
Stopper = AveragePrice - Stoploss * Point;
flag = TRUE;
}
}
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {
if (OrderType() == OP_SELL) {
PriceTarget = AveragePrice - TakeProfit * Point;
SellTarget = PriceTarget;
Stopper = AveragePrice + Stoploss * Point;
flag = TRUE;

 
todem:
对我来说,它编译得很好

对不起,指标是有效的--原来就是这样的,错误在tcht文件中--它没有编译。

附加的文件:
 

我可以用init来对指标缓冲区进行计算吗?

我想在init中重新计算除零条以外的所有条数,而在启动零条时--它不计入...

 
Pyro:

你能告诉我为什么OrderSelect返回TRUE,即使没有这样的票据订单(已经被删除)?

你有没有好好读过函数参考?

让我们再读一遍。

---------------------------------------------------------------------------------------------------------------------------------------------------------------

boolOrderSelect( int index, int select, int pool=MODE_TRADES)
该函数选择一个订单进行进一步操作。如果函数成功完成,返回TRUE。如果函数失败,返回FALSE。要获得有关错误的信息,请调用GetLastError() 函数。
如果订单是由票号选择的,则池子 参数被忽略。票号是订单的唯一标识符。为了确定一个订单是从哪个列表中选择的,我们应该分析其关闭时间。如果订单的关闭时间是0,那么该订单是开放的或待定的,并从终端的开放位置列表中取出。未结头寸可以通过其类型 与挂单区分开来。如果收盘时间 不等于0,那么该订单已关闭待定,并已从终端的历史记录中选择。已关闭的订单和已删除的待处理订单之间的区别也可以通过订单 类型来实现。
参数。
指数 - 订单位置或订单号,取决于第二个参数。
选择 - 选择方法的标志。可以是以下数值之一。
SELECT_BY_POS -索引 参数包含列表中位置的索引号。
SELECT_BY_TICKET -索引 参数包含票号。
- 选择的数据来源。当选择 参数等于SELECT_BY_POS时,它被使用。它可以是以下数值之一。
MODE_TRADES (默认) - 在未结订单和挂单中选择订单。
MODE_HISTORY - 该订单在已关闭和已删除的订单中被选中。


---------------------------------------------------------------------------------------------------------------------------------------------------------------

这一个。

如果订单是由票号选择的,则池子 参数被忽略。票号是订单的唯一标识符。为了确定从哪个列表中选择一个订单,必须分析其关闭时间如果订单的关闭时间 0,那么该订单是开放的或待定的,并从终端的开放位置列表 中取出。

你做什么?

if(OrderSelect(tickethigh1, SELECT_BY_TICKET, MODE_TRADES)==false)

我用红色显示了参数,当通过票据选择时,参数池会被忽略,订单会从终端的任何仓位列表(打开或关闭)中获取。这就是为什么它会返回真相。毕竟,这样的票据是存在的,并且选择了一个订单,但从封闭的订单列表中...

我们应该这样做。

   if (OrderSelect(tickethigh1,SELECT_BY_TICKET))
   if (OrderOpenTime()==0) {
      // ... код при успешном выборе ордера по тикету в списке рыночных ордеров
   }

...或。

if (OrderSelect(tickethigh1,SELECT_BY_TICKET))
   if (OrderOpenTime()>0) {
      // ... код при успешном выборе ордера по тикету в списке закрытых ордеров
   }

.........或者。

   if (OrderSelect(tickethigh1,SELECT_BY_TICKET)) {
      if (OrderOpenTime()>0) {
         // ... код при успешном выборе ордера по тикету в списке закрытых ордеров
      }
      if (OrderOpenTime()==0) {
         // ... код при успешном выборе ордера по тикету в списке рыночных ордеров
      }
   }

我想我已经解释得很清楚了......:)

 

Artmedia70


谢谢你如此详细和全面的答复。真的是越清楚越好 :)谢谢!!!。

 
Pyro:

Artmedia70


谢谢你如此详细的答复。真的是尽可能的清楚 :)谢谢!!!。

:)谢谢你。不客气。

我想提醒大家注意一些按票数选择公开职位的 "隐蔽性"。事情是这样的,在一个交易日结束后,当一个头寸被转移到第二天时,经纪公司会重新开出订单。也就是说,当前的头寸被关闭,另一个头寸以相同的成交量开仓,但有一个新的票据,包括交换。因此,您的 "专家顾问 "必须跟踪重新开放的订单,并考虑到它们的新股票代码,否则一切都会 "流动"--具有旧股票代码的订单将出现在已关闭的订单列表中,而您将无法使用旧股票代码打开移动到新交易日的现有位置。部分关闭的头寸将遭遇同样的命运--也将为其分配一个新的票据。

因此,要严格记录自己的所有EA订单,及时跟踪所有这种 "阴险 "的变化。

 
artmedia70:


我想提醒的是,通过票据来选择公开职位的做法有一定的 "隐蔽性"。问题是,在交易日结束时,当一个头寸被转移到第二天时,DC会重新开出订单。

在一些经纪公司是这样做的,但绝大部分公司没有这样的事情。
 
sergeev:
我不知道有些经纪公司是否如此,但大多数公司都不做这种破事。

考虑到DC的这种行为不也是一种 "良好的礼仪 "规则吗?毕竟......。是的,别介意...我只是试着考虑一切,嗯......或者说我所知道的。

谨慎是前车之鉴,嗯?;)