← К каталогу
Исходный код · ID 29

CTG-Modify Date

ctg-modify_date.mq5
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Программа CTG-Modify Date представляет собой скрипт для платформы MetaTrader, предназначенный для создания и модификации файлов исторических данных пользовательского таймфрейма. Она агрегирует данные текущего графика с учётом множителя периода и записывает их в файл формата .hst.

Основная функция скрипта — открытие исторического файла для указанного символа и периода, запись заголовка и данных баров (открытие, максимум, минимум, закрытие, объём), а затем мониторинг входящих тиков для актуализации файла в реальном времени. При достижении нового бара данные записываются в файл и обновляется текущий график.

Скрипт поддерживает опцию подавления данных за выходные дни (Nullbars), когда бары субботы и воскресенья заполняются значениями открытия без реальной торговой активности. Для обновления окон графиков используется вызов Windows API. Функция deinit() обеспечивает закрытие файла при завершении работы скрипта.

Настройки программы

НастройкаОписание
new period multiplier factor (ExtPeriodMultiplier) Множитель периода — Множитель для расчёта нового периода таймфрейма. Текущий период графика умножается на это значение, определяя период генерируемого исторического файла.
Nullbars Нулевые бары выходных — Переключатель подавления данных за выходные дни. При активации бары субботы и воскресенья (для периодов до ежедневного включительно) заполняются значением открытия без реальной торговой активности.
Получить полный код

Поиск по коду файла

#property show_inputs
#include <WinUser32.mqh>

extern int ExtPeriodMultiplier=1; // new period multiplier factor
extern bool Nullbars=true;
int        ExtHandle=-1;

int start()
  {
      // код доступен только после оплаты
   }
   int    i, start_pos, i_time, time0, last_fpos, periodseconds,sk;
   double d_open, d_low, d_high, d_close, d_volume, last_volume;
   int    hwnd=0,cnt=0;

   int    version=400;
   string c_copyright;
   string c_symbol=Symbol()+"-M_D";
   int    i_period=Period()*ExtPeriodMultiplier;
   int    i_digits=Digits;
   int    i_unused[13];

switch ( Period() )
        {
         case 1:     sk=60;  break;
         case 5:     sk=300;  break;
         case 15:    sk=900;  break;
         case 30:    sk=1800;  break;
         case 60:    sk=3600;  break;
         case 240:   sk=14400;  break;
         case 1440:  sk=86400;  break;         
         case 10080: sk=604800;  break;
         case 43200: sk=2592000;  break;          

         default: break;
         }

   ExtHandle=FileOpenHistory(c_symbol+i_period+".hst", FILE_BIN|FILE_WRITE);
   if(ExtHandle < 0) return(-1);

   c_copyright="Copyright ? 2007, ChaosTradingGroup.com";
   FileWriteInteger(ExtHandle, version, LONG_VALUE);
   FileWriteString(ExtHandle, c_copyright, 64);
   FileWriteString(ExtHandle, c_symbol, 12);
   FileWriteInteger(ExtHandle, i_period, LONG_VALUE);
   FileWriteInteger(ExtHandle, i_digits, LONG_VALUE);
   FileWriteInteger(ExtHandle, 0, LONG_VALUE);       //timesign
   FileWriteInteger(ExtHandle, 0, LONG_VALUE);       //last_sync
   FileWriteArray(ExtHandle, i_unused, 0, 13);

   periodseconds=i_period*60;
   start_pos=Bars-1;
   d_open=Open[start_pos];
   d_low=Low[start_pos];
   d_high=High[start_pos];
   d_volume=Volume[start_pos];

   i_time=Time[start_pos]/periodseconds;
   i_time*=periodseconds;

   for(i=Time[start_pos-1];i<=Time[0]; i+=sk)
     {
      time0=i;
      if(time0>=i_time+periodseconds || i==Time[0])
        {
         if(i==Time[0] && time0<i_time+periodseconds)
           {
            d_volume+=Volume[0];
            if (Low[0]<d_low)   d_low=Low[0];
            if (High[0]>d_high) d_high=High[0];
            d_close=Close[0];
           }
         last_fpos=FileTell(ExtHandle);
         last_volume=Volume[iBarShift(Symbol(),Period(),i)];
         if ((Nullbars==true && i_period<=1440 && TimeDayOfWeek(i)==0) || (Nullbars==true && i_period<=1440 && TimeDayOfWeek(i)==6))
         {
         d_close=d_open;
         d_low=d_open;
         d_high=d_open;                  
         }

         FileWriteInteger(ExtHandle, i_time, LONG_VALUE);
         FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE);
         FileFlush(ExtHandle);
         cnt++;
         if(time0>=i_time+peri

Показано первые 50% кода (символов: 4169)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
416,90₽ ≈ $5.10