我如何正确地开立市场订单? - 页 7

 
prostotrader:

顺便说一下,你从一个指标中调用Sleep() 很奇怪,因为这是禁止的。

Sleep()函数不能从自定义指标中调用,因为指标是在界面线程中执行的,不能拖累它。该功能有内置的检查专家的停止标志的状态,每0.1秒。


 
Alexey Kozitsyn:

顺便说一下,你从指标中调用Sleep() 是很奇怪的,因为它是被禁止的。


我根本不知道Sleep()是什么意思
 
prostotrader:

阿列克谢!

相当于一个流动的仪器 :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

这不是关于工具(流动性),而是关于延迟,这可能发生在任何工具上。

我一直积极使用EA进行交易,至今已有近4年。

我的任何EA都没有任何停顿(除了在INDICATORS中暂停等待从服务器下载数据)。

如果你确实暂停了,那肯定是你的EA的算法没有正常工作 :(

我已经做了很长时间的交易了,我只使用EA。但主要是在MT4上。我一直在MT5上只用专家顾问使用Limits进行交易,没有任何问题。我也反对在EA中增加停顿,特别是如果是黄牛党或者pipsitter,很容易错过入场机会。
 
prostotrader:
我根本不知道Sleep()是什么意思
那么你和我现在讨论停顿就很奇怪了......。
 
Alexey Kozitsyn:
那么你和我现在讨论停顿就很奇怪了......。
不是指Sleep() 的作用,而是指它在我代码中的应用。
 
prostotrader:
不是指Sleep()的作用,而是指在我的代码中使用它的意义。
你如何在你的指标中实施停顿?
 
Alexey Kozitsyn:
你如何在你的指标中实施停顿?
//+------------------------------------------------------------------+
// Custom indicator Check timer function                             |
//+------------------------------------------------------------------+
bool CheckTimer(const uint start_value, const uint per_value)
{
  uint end_value = GetTickCount();
  
  if(end_value < start_value)
  {
    if((start_value - end_value) >= per_value) return(true);
  }
  else
  {
    if((end_value - start_value) >= per_value) return(true);
  }
  return(false);
}
//+------------------------------------------------------------------+
//| Custom indicator Get server data function                        |
//+------------------------------------------------------------------+
int LoadServerData(const string a_symbol, ENUM_TIMEFRAMES period)
{
  int fail_cnt = 0;
//---
  while((fail_cnt < 5) && !IsStopped())
  {  
    long first_date = long(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE));
//---
    if(first_date > 0)
    {
      if(SymbolIsSynchronized(a_symbol))
      {
  //      Print( "LoadServerData: Первая дата на сервере есть. Пробуем получить локальные данные..." );
        return(GetLocalData(a_symbol, period));
      }  
    }
    else
    {
      uint start_tick = GetTickCount();
//---        
      while(!CheckTimer(start_tick, 10))
      {
        fail_cnt--;
        fail_cnt++;
      }
    }    
    fail_cnt++;
  }
// Print( "LoadServerData: Первой даты на сервере нет!" );
  return(0);  
}

这是一个老例子。

由于GetTickCount错误相当高(高达16ms),现在我使用GetMicrosecondCount()

 
Gennady Mazur:
原则上我是这样做的,但在Forts中,订单往往被成功接受......但在下一个tick上,还没有位置......
这就是额外的开口可能滑落的地方....,这样部分地解决了问题,如果订单被接受,我就增加Int变量,增加之后,开口的条件略有不同,所以没有新的开口,但是....,如果订单不被接受,变量不会增加,但是这里有一个技巧...我误判了状态,额外的订单开始出现。
你已经回答了你自己的问题。我们需要遵守秩序。
 
prostotrader:

阿列克谢!

相当于一个流动的仪器 :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

这不是关于工具(流动性),而是关于延迟,这可能发生在任何工具上。

我一直积极使用EA进行交易,至今已有近4年。

我的任何EA都没有任何停顿(除了在INDICATORS中暂停等待从服务器下载数据)。

如果你确实暂停了,那肯定是你的EA的算法没有正常工作 :(

如果你没有,那又如何?也许那里的算法是这样的,不需要它。
 
Gennady Mazur:
我也已经做了很长时间的交易,而且只是在EA的帮助下。但主要是在MT4上。我一直在MT5上只用专家顾问使用Limits进行交易,没有任何问题。如果我是一个剥头皮的人或一个点头的人,我不喜欢专家顾问的停顿,而且我只是错过了一个入口。
当你需要暂停的时候,情况就不是这样了。