почему не копируется история?

 

создаётся символ со стартовой датой 2020.02.24, и между 2020.02.25 и 2022.09.30 - дыра

скрипт только копирует с основного символа на кастомный, и больше ничего.. или чего?


//+------------------------------------------------------------------+
     //|                                                  script.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
// Создание копии символа для ускорения Тестера
#property script_show_inputs

#include <Symbol.mqh> //https://www.mql5.com/ru/code/18855

void OnStart()
{
  const SYMBOL Symb("TESTER_" + _Symbol); // Создали символ

  Symb.DeleteHistory();
   Symb.Delete(true);
   Symb.Create(NULL,_Symbol);

  if (Symb.IsExist()) // Если символ создан
  {
  
    //Symb = _Symbol; // Скопировали с основного символа все свойства и баровую историю (+ тиковую, если кастомный) - клон
   Symb.CloneProperties();
    // Сделали валюты символа валютой счета
    Symb.SetProperty(SYMBOL_CURRENCY_BASE, AccountInfoString(ACCOUNT_CURRENCY));
    Symb.SetProperty(SYMBOL_CURRENCY_PROFIT, AccountInfoString(ACCOUNT_CURRENCY));
    Symb.SetProperty(SYMBOL_CURRENCY_MARGIN, AccountInfoString(ACCOUNT_CURRENCY));
   
    if (!Symb.CloneRates(_Symbol)) Print("err rates");

    datetime dt_start=D'2019.01.01';
    while (dt_start<TimeCurrent()) {
      Print(dt_start);
      ulong date_start=(ulong)dt_start*1000;
      ulong date_end=(ulong)(dt_start+86400)*1000;
       //if (!Symb.CloneHistory(_Symbol,date_start,date_end)) Print("err");
       if (!Symb.CloneTicks(_Symbol,date_start,date_end)) Print("err ticks");
       dt_start+=86400;
    }
    if (Symb.On()) // Включили в Обзор рынка
      ChartOpen(Symb.Name, PERIOD_CURRENT); // Открыли график нового символа
  }
  Print("end");
}


чтобы Symbol.mqh работал, приходится убирать лишнюю проверку  

    int Res = this.IsCustom() && ::SymbolInfoInteger(Symb, SYMBOL_CUSTOM) ? 0 : -1;

зачем?!

 

а это что? Symbol.mqh https://www.mql5.com/ru/code/18855

если копировать всё сразу, то недостаточно памяти

никто, кроме меня, не заметил


  int CloneTicks( const MqlTick &Ticks[] ) const
  {
    return(this.IsCustom() ? ::CustomTicksReplace(this.Name, 0, LONG_MAX, Ticks) : -1);
  }

  int CloneTicks( string Symb = NULL, const ulong _from_msc = 0, const ulong _to_msc = LONG_MAX ) const
  {
    Symb = (Symb == NULL) ? _Symbol : Symb;

    int Res = this.IsCustom() && ::SymbolInfoInteger(Symb, SYMBOL_CUSTOM) ? 0 : -1;
                                               /* ?! */

    if (Res != -1)
    {
      MqlTick Ticks[];

      ::CopyTicksRange(Symb, Ticks, COPY_TICKS_ALL, _from_msc, _to_msc);

      Res = this.CloneTicks(Ticks);
    }

    return(Res);
  }

.

Symbol
Symbol
  • www.mql5.com
Библиотека для работы с обычными и кастомными символами
 

почему дыра?