自定义符号。误差、错误、问题、建议。 - 页 33

 
RusPro #:

我试了一下你的测试,结果完全一样--滞后几秒钟。不是在自定义上,而是在银色的期货上

文书Silv-12.21. MICEX,经纪人BCS。但我认为这并不重要。

但在你的情况下,有可能图表不是建立在出价上,或者经纪人有不同的报价和交易流(虽然,在交易所--不太可能)。

这里的主题是关于定制乐器。

 
Andrey Khatimlianskii #:

我们没有谈论普通的工具,我们谈论的是蓖麻。根据定义,它们的所有信息都可以在终端中获得,没有什么应该到服务器中去。

也许那里有一些无稽之谈--比如服务器时间请求或其他什么。一般来说,这是一个失误。而如果你在没有物理连接的情况下开始测试,会发生什么?我很好奇,但我没有任何东西可以测试它。

 

大家好!
由于某些原因,故事没有被复制到自定义符号 中。代码是最简单的。我没有得到任何错误,但自定义符号中没有引号。

我只是想把带有1小时偏移量的真实报价转移到自定义符号上。

你能告诉我为什么结果是空的吗?
谢谢你。


int OnInit()
  {
   
   string Sym1 = "EURUSD"; /// источник
   string Sym2 = "EURUSD2";   /// приемник
   int HBack = 1;   /// количество часов сдвига
   datetime tc = StringToTime(TimeCurrent());   /// конец участка
   datetime sht = tc - HBack * 60 * 60;
   datetime sht2 = tc - 2 * HBack * 60 * 60;
   
   MqlRates mrates[];
   
   if( CopyRates(Sym1, PERIOD_M1, sht, tc, mrates) < 0 ){
        
        Alert("Ошибка копирования исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
        
   if( CustomRatesReplace(Sym2, sht2, sht, mrates, WHOLE_ARRAY) < 0 ){
      
      Alert("Ошибка вставки исторических данных - ошибка:", GetLastError() );
        return(INIT_FAILED);
        
        }
      
   
   return(INIT_SUCCEEDED);
  }
 

与iClose相比,SymbolInfoXXX无情地 滞后。

自定义符号 报价(包括点和条)。

我发现,在EA中调用的SymbolInfoDouble和SymbolInfoTick,在这个图表上工作时,在某些时刻会"挂掉":在市场概览中,报价发生变化,图表被更新,iClose和CopyTicksRange得到实际数据,但SymbolInfoXXX给出了过时的信息。

在解析的过程中,它来到了最简单的代码,其目的是检测这些 "挂起",但更早地从另一个方面证明了问题:SymbolInfoXXX 与iClose相比简直是无情地 滞后了!。你可以用肉眼看到它。


请在你的图表上运行这样一个EA。

int OnInit(void)
{
        EventSetMillisecondTimer(10);
        return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
        EventKillTimer();
        Comment("");
}

void OnTimer(void)
{
        MqlTick tick;
        SymbolInfoTick( _Symbol, tick );

        Comment( "SymbolInfoInteger( _Symbol, SYMBOL_TIME ) = ", TimeToString( SymbolInfoInteger( _Symbol, SYMBOL_TIME ), TIME_SECONDS ),
                                        "\nSymbolInfoDouble( _Symbol, SYMBOL_BID ) = ", SymbolInfoDouble( _Symbol, SYMBOL_BID ),
                                        "\ntick.time = ", TimeToString( tick.time, TIME_SECONDS ),
                                        "\ntick.bid = ", tick.bid,
                                        "\niClose[0] = ", iClose( _Symbol, PERIOD_CURRENT, 0 ) );
}

(OnTimer可以改成OnTick,它不会改变本质)

你有类似的滞后现象吗?


 
Andrey Khatimlianskii #:

请在你的逃亡者图表上运行这样的EA。

你有类似的刹车吗?

在一个不更新且在市场观察中没有刻度的自定义符号上,没有感觉到刹车。

 
MOZART09 自定义符号 中。代码是最简单的。

你不能用最简单的代码创建一个自定义符号。有很多修补工作要做。看看这个吧。

Пользовательские символы: основы применения на практике
Пользовательские символы: основы применения на практике
  • www.mql5.com
Статья посвящена программной генерации пользовательских символов, с помощью которых демонстрируется несколько популярных способов отображения котировок. Предложен вариант малоинвазивной адаптации советников для торговли реальным символом с графика производного пользовательского символа. Исходные коды MQL прилагаются.
 
fxsaber #:

在一个不更新且在市场观察中没有刻度的自定义符号上,我感觉不到刹车。

可能是因为刹车恰恰是在更新中(或者说是在这样的图表上运行的EA收到更新信息时)?

 
Andrey Khatimlianskii #:

可能是因为更新(或者说从运行在这样的图表上的EA获得更新的信息)使事情变慢了?

我不使用可更新的自定义符号,所以不知道它。

 

Build 3091,抓到了悬挂的引号(点击)。


由SymbolInfoDouble和SymbolInfoTick返回的最后一个tick是04:52:07(出价61083.19)。

同时,在仪器历史上有较新的刻度,图表和市场观察 被更新,iClose返回正确的值。

有一个代码可以重现它。我还需要解决什么问题?

 

我发现了一个依赖性--只有图表打开的工具(和EA运行时分别跟踪它们)冻结了。

如果我把图表工具换成另一个(也是castrum,但到目前为止还没有激活),那里就一切正常了。如果我们返回到一个 "冻结 "的工具,或者为它打开一个新的图表,那里的SymbolInfoDouble 和SymbolInfoTick仍然处于相同的冻结状态。