FORTS 请帮助 - 页 5

 

有人在撒谎,或者迈克尔不接受技术支持的反对意见,或者技术支持不愿意承认这个问题。

Mikalas 2015.03.26 00:44  RU

同样,servicedexk也不能重现这个错误!


alexvd2015.03.26 15:16

第一个帖子中的代码也是错误的。

 
MigVRN:

让我们成为朋友吧 :)

但不是立即--而是当负载成功时。

你的代码表明,OnInit函数 是无用的,或者是开发人员搞砸了。

 
Mikalas:

是的,好吧,如果真的没有数据呢?

然后呢?一个周期? 有多少次迭代?

这里没有具体的菜谱...

我根本不喜欢指标......这就是唯一的原因。

在与指标相同的线程中,对该符号的其他操作是按顺序执行的--处理ticks和历史同步。 这意味着,如果在一个指标中执行了一个无休止的动作,该符号的所有其他事件将永远不会被执行

他们可以使聊天和其他一切都变慢。因此,我使用他们时,没有要求邻近的聊天室的报价,并作为定制活动的提供者。一般来说,只用OnCalculate()中的内容来工作。

Serj_Che:

在你的代码中,你看到OnInit函数 是无用的,或者说是开发者搞的鬼。

这是你的代码--我只是把alexvd 说的内容粘贴在里面。我不明白为什么这意味着OnInit函数 是无用的。

 
alexvd:
在你的代码中,你只需在ResetLastError()之后立即清除全局变量 is_failed中的错误。否则,一旦你发现了一个错误,你就会得到一个关于它的信息

中奖了!你就快到了)。他们说信任但要核实是有原因的。最后的文本如下。

#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//
bool is_failed = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
  SymbolSelect( "MIX-6.15", true );
  SymbolSelect( "RTS-6.15", true );
  SymbolSelect( "Si-6.15", true );
//---  
  ResetLastError();
//---  
  int total_bars = Bars( "MIX-6.15", PERIOD_M1 );
  if ( total_bars > 0 )
  {
    total_bars = Bars( "RTS-6.15", PERIOD_M1 );
    if ( total_bars > 0 )
    {
      total_bars = Bars( "Si-6.15", PERIOD_M1 );
      {
        if ( total_bars > 0 )
        {
           is_failed = false;
           Print( "Init OK." );
        }
        else
        {
          is_failed = true;
          Print( "Get Bars failed Si-6.15 Last error = ", string(GetLastError() ) );
        }
      }
    }
    else
    {
      is_failed = true;
      Print( "Get Bars failed RTS-6.15 Last error = ", string(GetLastError() ) );
    }
  }
  else
  {
    is_failed = true;
    Print( "Get Bars failed MIX-6.15 Last error = ", string(GetLastError() ) );
  } 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
  ResetLastError();
//---  
 int total_bars = Bars( "MIX-6.15", PERIOD_M1 );
  if ( total_bars > 0 )
  {
    total_bars = Bars( "RTS-6.15", PERIOD_M1 );
    if ( total_bars > 0 )
    {
      total_bars = Bars( "Si-6.15", PERIOD_M1 );
      {
        if ( total_bars > 0 )
        {
          Print( "Init OK." );
          is_failed = false;
        }
        else
        {
          is_failed = true;
          Print( "Get Bars failed Si-6.15 Last error = ", string(GetLastError() ) );
        }
      }
    }
    else
    {
      is_failed = true;
      Print( "Get Bars failed RTS-6.15 Last error = ", string(GetLastError() ) );
    }
  }
  else
  {
    is_failed = true;
    Print( "Get Bars failed MIX-6.15 Last error = ", string(GetLastError() ) );
  } 
//---
   if ( is_failed )
   {
     Print( "Sorry! Get Bars failed." );
   }
   else Print( "Bingo! We done.");
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
MigVRN:

这里没有具体的菜谱...

我根本不喜欢指标......这就是唯一的原因。

在同一线程中,与指标有关的其他行动是按顺序进行的--处理刻度线和历史同步。 这意味着,如果在指标中执行了一个无限的动作,这个符号的所有其他事件将永远不会被执行

他们可以使聊天,以及其他一切都变得缓慢。因此,我使用它们时,没有向邻近的聊天室提出报价要求,并作为定制活动的提供者。一般来说,只用OnCalculate()中的内容来工作。

这是你的代码--我只放了alexvd 提到的内容。我不明白为什么会出现OnInit函数 无用的情况。

这是我的什么代码?我没有在这里张贴任何代码。

这些指标不会拖累其他一切。关键是MT5中的一切都不同步,指标在他们的线程中工作,EA在他们的线程中工作。玻璃是自己的。

我也不喜欢指标,但我不得不时常使用它们。

 
Dima_S:

中奖了!你就快到了)。他们说信任但要核实是有原因的。最后的文本如下。

为什么你要在OnCalculate 中重复OnInit中的内容?是这样的咒语吗?)
 
Serj_Che:

我的代码是什么?我还没有在这里发布任何代码。

哦......。对不起,我和 Dima_S 混淆了。

Serj_Che:

我不会因为指标而放慢其他一切。问题是,MT5中的一切都不同步,指标在他们的线程中工作,EA在他们的线程中工作。玻璃是自己的。

我也不喜欢指标,但我不得不时常使用它们。

这些指标在它们的线程中工作...但在这个流程中,聊天是可行的。如果一个指标出了问题(OnCalculate()中的一个永恒的循环),那么在其 "自己 "的线程中运行的专家顾问不会看到来自聊天的任何内容...

 
MigVRN:

OOO...对不起。Dima_S 混淆了。

指标在其线程中运行...只有聊天在同一个线程中起作用。如果一个指标出了问题(OnCalculate()中的一个永恒的循环),那么在 "其 "线程中运行的专家顾问不会看到来自该聊天的任何内容...

我怀疑,我甚至更倾向于认为不是这样的,专家顾问应该自己工作。我没有遇到过这样的麻烦,但如果你愿意,你可以检查这个极端。

 
Serj_Che:

我很怀疑,我更倾向于认为不是这样的,EA应该自己工作。目前还没有专门的这种小提琴,但如果你想的话,你可以检查这样一个极端。

我将概述一下检查代码。我将在2-3小时内检查。但是,如果聊天中的1个指标 "慢下来",那么其他人也会跟着慢下来,这是一个我反复经历的事实。
 
MigVRN:
我将勾勒出一些测试代码。大约2-3小时后。但是,如果聊天中的一个指标 "变慢",那么其他指标也会随之变慢,这是一个我不止一次面临的事实。

好吧,有意思!我也是。

指标在自己的线程中工作,EA在自己的线程中工作。当然,除非是单芯石。