mql5语言的特点、微妙之处以及技巧 - 页 97

 
Artyom Trishkin:

因此,在KB中已经有了某种解决方案。

但不是为了剧本。这对EA来说是相当困难的,因为它建议在未定义的情况下,从OnTick中崩溃。而这种情况可能发生在专家顾问的深处。而且,我们不仅要离开那里,要离开OnTick,而且可能需要同时开出,例如,两个头寸(a la cart)。但是,只有在第一个被成功打开的情况下,第二个才应该被打开。在这种情况下,在第一次OrderSend 之后就被踢出OnTick,说得不好听一点,是不可取的。

 
fxsaber:

但不是为了剧本。这对EA来说相当困难,因为它被建议在未定义的情况下从OnTick中崩溃。而这种情况可能发生在专家顾问内脏深处的某个地方。而且,我们不仅要离开那里,要离开OnTick,而且可能需要同时开出,例如,两个头寸(a la cart)。但是,只有在第一次成功完成的情况下,才可以打开第二次。在这种情况下,在第一个OrderSend之后被踢出OnTick,说得不好听一点,是不可取的。

脚本可以放慢到明确的位置数

专家顾问...在EA中,我们必须在开仓函数的逻辑中考虑这一点--它们被EA调用,并返回其工作结果。市场订单的结果被返回为假。然后,EA将以其固有的逻辑工作。是的,我同意在一些现成的EA中实施比立即考虑这种概率要难。但这也是分支在这里的原因--让其他人知道并使用这些知识。

 
阿尔乔姆-特里什金

脚本可以放慢速度,直到收到一个明确的位置数

你也可以放慢专家顾问的速度。

专家顾问...在专家顾问中,我们将不得不在开仓功能的逻辑中考虑这一点--它们从EA中被调用,并返回其工作结果。如果有一个市场订单,结果将返回假。然后,EA将以其固有的逻辑工作。是的,我同意在一些现成的EA中实施比立即考虑这种概率要难。但这正是支部的作用--让别人知道并使用这些知识。

你只需等待一段时间,直到交易结束。退出TS直到下一次打勾是一个糟糕的决定。

 
fxsaber:

你也可以放慢顾问的速度。

你只需稍稍等待,直到交易结束。退出TS直到下一次打勾是一个令人毛骨悚然的决定。

那么,在这段代码中,等待设定的时间就这样完成了。但你不可能等上几个小时--它在一定时间内等待给定数量的尝试以获得有效的环境,然后带着结果退出。否则,如果你等了很久,交易环境会发生很大的变化,到时候再喝波尔乔米就太晚了 :)

//+------------------------------------------------------------------+
//| Заполняет массивы тикетов позиций                                |
//+------------------------------------------------------------------+
bool FillingListTickets(const uint number_of_attempts)
  {
//--- Проверка состояния окружения
   int n=0,attempts=int(number_of_attempts<1 ? 1 : number_of_attempts);
   while(IsUncertainStateEnv(symb,InpMagic) && n<attempts && !IsStopped())
     {
      n++;
      Sleep(sleep);
     }
   if(n>=attempts && IsUncertainStateEnv(symb,InpMagic))
     {
      Print(__FUNCTION__,": Uncertain state of the environment. Please try again.");
      return false;
     }
//---
 
阿尔乔姆-特里什金

好吧,那段代码确实在等待一个设定的时间,但你不可能等上几个小时--它在等待一个设定的尝试次数,以获得一个有效环境。但你不能等上几个小时--它要等上一段时间,进行指定次数的尝试以获得有效的环境,然后得出结果。否则,如果你等了很久,交易环境会发生很大的变化,到时候再喝波尔乔米就太晚了 :)

是的,我没有注意到等待的过程。这就可以了。那时候 我就更用心了。

 

我认为,在任何情况下,关注PositionsTotal() 都是错误的决定。 在处理你的请求的过程中,账户上的另一个头寸可能会打开/关闭,例如,如果有几个EA在工作。 是什么阻止你检查服务器的响应,因为它是由开发人员设计的?

事实上,除了一般的控制,我认为PositionsTotal根本没有什么意义。 一个EA应该明确地控制其头寸的ticks,并且只对它们进行工作。

 

在使用ChartIndicatorGet()之后,必须调用IndicatorRelease(handle)函数。在ChartIndicatorGet()函数 的例子中写到了这一点,但在函数注释中却没有写到。开发人员想纠正文件,但没有这样做。由于SD的关闭,这可能永远不会被完成。

个人遇到了 "悬挂 "指标的问题。从与SD的交谈中得知。

啊,也就是说,当我在图表上运行X指标时,它已经查看了所有的指标,并 使用ChartIndicatorGet()函数检测到一个副本--它增加了计数器我删除了第一个X指标--减少了计数器,但忘记了第二个--它有 "悬挂 "指标,因为它的手柄没有被清理?

是的,这正是它的工作方式。因此,OnDeinit不起作用。

 

关于交易、自动交易系统和测试交易策略的论坛

如何使用CustomRatesUpdate将历史数据导入csv到符号自定义?

fxsaber, 2018.08.19 12:01

// Sets the maximum size of an array.
template <typename T>
int ArrayResize( T &Array[] )
{
  int MinSize = ArraySize(Array);
  int MaxSize = INT_MAX;
  int AvgSize;
  
  while ((MinSize < MaxSize - 1) && !IsStopped())
  {
    AvgSize = (int)((MinSize + (long)MaxSize) >> 1);        
    
//    ArrayFree(Array);
    
    if (ArrayResize(Array, (int)AvgSize) == AvgSize)
      MinSize = AvgSize;
    else
      MaxSize = AvgSize;
  }
  
  return(ArrayResize(Array, MinSize));
}
 
论坛的英文部分显示
// Обмен значениями между двумя числовыми переменными
#define  SWAP(A, B) { A += B; B = A - B; A -= B; }
 
fxsaber:
论坛的英文部分显示

有什么意义呢? 为了节省几个字节的内存? 此外,用双倍数你会得到不同的数字(==会是假的),而且整数会溢出。