当地时间和新勾股时间相差一分半钟。该怎么做。 - 页 6

 
prostotrader:

仔细 看一下代码!

TimeTradeServer() 只用来确定日期,仅此而已(这个检查是为了 "以防万一")!

TimeTradeServer() 可以完全省略。

我已经看过了。我同意,我写得不对,但在我看来,这个函数仍然不能解决问题。说实话,我不太清楚为什么需要它。看来,你。

1.获取从一个刻度开始的毫秒数。

2.你把蜱虫分解成它的组成部分。

3.然后你又重新组装了虱子!?这就是我不清楚的地方,这是为了什么?你将总是得到最初传递给函数的相同的值。或者,也许我错过了什么?

然后你把这个刻度的时间与前一个刻度的时间进行比较。


我们确实需要知道服务器的时间,不是吗?没有服务器时间,我们无法确定一个角色的线程是否落后于其他角色的线程。

也就是说,你的代码没有与服务器时间绑定,也没有将服务器时间与线程时间进行比较,而这正是我们需要做的。要理解的不是单个符号的跳动所带来的堆栈滞后(就像我最初进入这个讨论时想的那样),而是一组符号从服务器到终端的数据传输的延迟。

 
Alexey Kozitsyn:

这种检查似乎需要通过TimeGMTOffset来完成。我稍后将勾勒一个例子。

只是很有趣,你是一个有经验的人(不是一个初学者)。

你根本不需要任何时间,除了传来的虱子的时间!你需要的是什么?

记住最后一次勾选的时间(初始化时),然后所有的比较都以这个时间为准

 
Alexey Kozitsyn:

我已经看了一下。我同意,我写得有些不正确,但在我看来,这个函数仍然没有解决手头的任务。说实话,我不太清楚为什么需要它。看起来你是。

3.然后再重新组装蜱虫!?这就是我不清楚的地方,它是为了什么?你将总是得到最初传递给函数的相同的值。还是我错过了什么?


这段代码是从我的专家顾问中 "提取 "出来的,在这里我检查tick是否是最新的,时间是否在规定的范围内

交易会

由以下人员添加

需要对tick进行 "分解 "以确定准确的(毫秒)时间(没有日期),因为在我的EA的会话设置中

我只设置了时间

input string          TimeStMon    = "10:00:00";               //Время начала утренней сессии
input string          TimeStDay    = "14:05:00";               //Время начала дневной сессии
input string          TimeStEvn    = "19:05:00";               //Время начала вечерней сессии
 
prostotrader:

这实在是太可笑了,你是一个有经验的人(不是一个新手)。

你根本不需要任何时间,除了传来的虱子的时间!你需要的是什么?

记住最后一次勾选的时间(初始化时),然后所有的比较都以这个时间为准

我稍后会写我的例子,我会更详细地了解这个问题。我不排除也许我错了(以及pivomoe)而你是对的。

 
prostotrader:

这段代码是从我的EA中 "拉 "出来的,我检查了tick的相关性和tick所在 的时间。

交易会

添加

需要对tick进行 "分解 "以确定准确的时间(不含日期),因为在我的EA的会话设置中

我只设置了时间

没错,是我的错,错过了。

 
Alexey Kozitsyn:

没错,是我的错,我没有看到这一点。

只是TC最初并不清楚他想得到什么(也可能是被误解了)。

在这里,运行它并检查。

//+------------------------------------------------------------------+
//|                                                         Time.mq5 |
//|                                                   Copyright 2019 |
//|                                                                  |
//+------------------------------------------------------------------+
enum FRESH_TICK
{
  UNKNOWN_TICK,
  NEW_TICK,
  CUR_TICK,
  OLD_TICK
};
//
MqlTick stored_ticks[];
bool is_book;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  int result = CopyTicks(Symbol(), stored_ticks, COPY_TICKS_ALL, 0, 1);
  if(result > 0)
  {
    is_book = MarketBookAdd(Symbol());
    if(is_book == false) return(INIT_FAILED);
  } else return(INIT_FAILED);
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  if(is_book == true) MarketBookRelease(Symbol()); 
}
//+------------------------------------------------------------------+
// Expert Book event function                                        |
//+------------------------------------------------------------------+  
void OnBookEvent(const string &symbol)
{
  if(symbol == Symbol())
  {
    MqlTick a_ticks[];
    int result = CopyTicks(symbol, a_ticks, COPY_TICKS_ALL, 0, 1);
    if(result > 0)
    {
      FRESH_TICK tick_state = CheckTickTime(a_ticks[0]);
      switch(tick_state)
      {
       case UNKNOWN_TICK: Print(EnumToString(UNKNOWN_TICK), " - Тик не определен."); //Тик не определен
       break;
       case NEW_TICK: Print(EnumToString(NEW_TICK), " - Новый тик");     //Торговое время, можно отсылать ордера;
       break;
       case CUR_TICK: Print(EnumToString(CUR_TICK), " - Текущий тик");    //По усмотрению разработчика;
       break;
       case OLD_TICK: Print(EnumToString(OLD_TICK), " - Старый тик");     //По усмотрению разработчика;
       break;
      }
    }  
  }
}
//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
FRESH_TICK CheckTickTime(MqlTick &a_tick)
{
  if(a_tick.time_msc > stored_ticks[0].time_msc)
  {
    stored_ticks[0] = a_tick;
    return(NEW_TICK);
  }
  else
  {
    if(stored_ticks[0].time_msc == a_tick.time_msc)
    {
      if((stored_ticks[0].ask == a_tick.ask) && (stored_ticks[0].bid == a_tick.bid) &&
         (stored_ticks[0].flags == a_tick.flags) && (stored_ticks[0].last == a_tick.last) &&
         (stored_ticks[0].time == a_tick.time) && (stored_ticks[0].volume == a_tick.volume) &&
         (stored_ticks[0].volume_real == a_tick.volume_real))
        {
          return(CUR_TICK);
        }
        else return(OLD_TICK);
        
    }
    else return(OLD_TICK);
  }
  return(UNKNOWN_TICK);
} 
      
 
prostotrader:

只是TC一开始并不确定他想得到什么。

在这里,运行它并检查它。

迈克尔,对新蜱虫的到来/对旧蜱虫的检查没有问题。对你的代码也没有问题。这个问题是不同的。你需要检查这种情况。

14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   Получен НОВЫЙ тик по символу                     GAZR-3.19 time_msc= 2019.03.20 14:53:11.638
14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   ХОТЯ до этого был получeн тик                     RTS-3.19 time_msc  2019.03.20 14:53:13.695
 
Alexey Kozitsyn:

迈克尔,对新蜱虫的到来/对旧蜱虫的检查没有问题。对你的代码也没有任何疑问。这个问题是不同的。我需要检查以下情况。

我调整了代码(见上文),(OLD_TICK)出现了。

而且知道新的软件包可能包含一个 "旧的 "钩子,开发者必须酌情使用它。

 
prostotrader:

我调整了代码(见上文),(OLD_TICK)出现了。

这并不重要...不同的字符流。

 
Alexey Kozitsyn:

这并不重要...不同的字符流。

那么我根本就不明白我NEED????。

如果当前的时间是 SERVER - 你需要忘记它,直到他们广播它!"。
或使用什么是TimeTradeServer()