Новый MetaTrader 4 build 198 - страница 2

 
Привет

А можно в следушчем булде увидет опцию графика каторая заполнит пустые бары(кокда цена нименяется или нету цены) вот таким образом?

http://forum.alpari-idc.ru/attachment.php?attachmentid=33576&stc=1&d=1161123185

Вот мой код скрипта
//+------------------------------------------------------------------+
//|                                  period_converter_all_nogaps.mq4 |
//|                                  Copyright © 2006, By T-1000     |
//|                                  irc://irc.omnitel.net/forex     |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, By T-1000"
#property link      "irc://irc.omnitel.net/forex"
#property show_inputs
#include <WinUser32.mqh>

int ExtPeriodMultiplier=2; // new period multiplier factor
int        ExtHandle=-1;
//int        ExtHandle2=-1;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   int    i, start_pos, i_time, time0, last_fpos, periodseconds;
   double d_open, d_low, d_high, d_close, d_volume, last_volume;
   int    hwnd=0,cnt=0;
//---- History header
   int    version=400;
   string c_copyright;
   string c_symbol=Symbol();
   int    i_period;
   int    i_digits=Digits;
   int    i_unused[13];
   int timeperiod;
   int firsttimeperiod=Time[Bars-1];
   int lasttimeperiod;
   int timeshift=Period();
   int counter;
   
if (timeshift !=1) 
{   
Alert("Error: This script MUST run in M1 period.");
return(0);
}
for (counter=0;counter<5;counter++)
{
   switch(counter)
   {
      case 0: ExtPeriodMultiplier=5;break;// M5
      case 1: ExtPeriodMultiplier=15;break;// M15
      case 2: ExtPeriodMultiplier=30;break;// M30
      case 3: ExtPeriodMultiplier=60;break;// H1
      case 4: ExtPeriodMultiplier=240;break;// H4
      default:break;
   }
   i_period=Period()*ExtPeriodMultiplier;
   hwnd=0;
   cnt=0;
//----  
   ExtHandle=FileOpenHistory(c_symbol+i_period+".hst", FILE_BIN|FILE_WRITE);
   if(ExtHandle < 0) return(-1);
//---- write history file header
   c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";
   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);   
//---- write history file
   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];
   //---- normalize open time
   i_time=Time[start_pos]/periodseconds;
   i_time*=periodseconds;
   for(i=start_pos-1;i>=0; i--)
     {
      time0=Time[i];
      
      if(time0>=i_time+periodseconds || i==0)
        {
         if(i==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[i];
         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+periodseconds)
           {
            i_time=time0/periodseconds;
            i_time*=periodseconds;
            d_open=Open[i];
            d_low=Low[i];
            d_high=High[i];
            d_close=Close[i];
            d_volume=last_volume;
           }
        }
       else
        {
         d_volume+=Volume[i];
         if (Low[i]<d_low)   d_low=Low[i];
         if (High[i]>d_high) d_high=High[i];
         d_close=Close[i];
        }
        
       // fill gaps with last close price
       timeperiod=time0+periodseconds;
       lasttimeperiod=Time[i-1];
       if (i>ExtPeriodMultiplier && lasttimeperiod > timeperiod)
       if (i>ExtPeriodMultiplier)
         while (lasttimeperiod >= timeperiod)
         {
         last_fpos=FileTell(ExtHandle);
         FileWriteInteger(ExtHandle, timeperiod-periodseconds, LONG_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, 1.0, DOUBLE_VALUE);         
         FileFlush(ExtHandle);
         timeperiod=timeperiod+periodseconds;
         cnt++;
         }
     } 
   FileFlush(ExtHandle);
   Print(Symbol(),ExtPeriodMultiplier,": ",cnt," record(s) written");

//---- collect incoming ticks
   int last_time=LocalTime()-5;
   while(IsStopped()==false && IsConnected() && !RefreshRates())
     {
      int cur_time=LocalTime();
      //---- check for new rates
      if(RefreshRates())
        {
         time0=Time[0];
         FileSeek(ExtHandle,last_fpos,SEEK_SET);
         //---- is there current bar?
         if(time0<i_time+periodseconds)
           {
            d_volume+=Volume[0]-last_volume;
            last_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];
       timeperiod=time0+periodseconds;
       lasttimeperiod=cur_time;
       // fill gaps with last close price
         while (lasttimeperiod >= timeperiod)
         {
         //Print(TimeToStr(i_time,TIME_DATE),": Filling gap..");
         last_fpos=FileTell(ExtHandle);
         FileWriteInteger(ExtHandle, timeperiod-periodseconds, LONG_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE);
         FileWriteDouble(ExtHandle, 1.0, DOUBLE_VALUE);         
         FileFlush(ExtHandle);
         timeperiod=timeperiod+periodseconds;
          cnt++;
         }
           }
         else
           {
            //---- no, there is new bar
            d_volume+=Volume[1]-last_volume;
            if (Low[1]<d_low) d_low=Low[1];
            if (High[1]>d_high) d_high=High[1];
            //---- write previous bar remains
            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);
            last_fpos=FileTell(ExtHandle);
            //----
            i_time=time0/periodseconds;
            i_time*=periodseconds;
            d_open=Open[0];
            d_low=Low[0];
            d_high=High[0];
            d_close=Close[0];
            d_volume=Volume[0];
            last_volume=d_volume;
           }
         //----
         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);
         //----
         if(hwnd==0)
           {
            hwnd=WindowHandle(Symbol(),i_period);
            if(hwnd!=0) Print("Chart window detected");
           }
         //---- refresh window not frequently than 1 time in 2 seconds
         if(hwnd!=0 && cur_time-last_time>=2)
           {
            PostMessageA(hwnd,WM_COMMAND,33324,0);
            last_time=cur_time;
           }
        } 
     }      
//----
 if(ExtHandle>=0) { FileClose(ExtHandle); ExtHandle=-1; }
}

Alert("Periods gaps filling complete,\nplease close and re-run Metatrader.");
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void deinit()
  {
  // if(ExtHandle>=0) { FileClose(ExtHandle); ExtHandle=-1; }
  //if(ExtHandle2>=0) { FileClose(ExtHandle2); ExtHandle2=-1; }
  }
//+------------------------------------------------------------------+



Правда скрипт с МТ4 воюет так как после подключения сервера бары истории MT переписывает заново и имеет некоторые ошыбки - истории ошыбки после запуска, но работает.

Я бы и сам мог бы такое вставитъ в МТ как опцию для полново отрисования графика "без дыр", но исходные файлы у вас... :)

 
А можно в следушчем булде увидет опцию графика каторая заполнит пустые бары(кокда цена нименяется или нету цены) вот таким образом?
В виде стандартной опции - нет.
А в виде эксперта я уже достаточно давно делал ;)

"MQL4: Графики без "дыр""
Статья посвящена реализации графиков без пропущенных баров.
 
"MQL4: Графики без "дыр""
Статья посвящена реализации графиков без пропущенных баров.

Я сам нипробовал запуститъ но люди говорят - с ошыбками глючит там...
http://forum.alpari-idc.ru/thread31138-17.html

А в принципе МТ мог бы иметъ болше опции для отрисования графика так как счас в принципе толъко свечи, ОХЛЦ, линия и отрисовка баров толко по новой цене и никак иначе.
 
T1000 поздравляю! :)
Поставили русифицированную клавиатуру? А то приходилось напрягаться, чтобы читать транслит.
 
Я сам нипробовал запуститъ но люди говорят - с ошыбками глючит там...
Вы про "Где же вы ее откапали? я и забыл про нее уже давно ..
практика показала что это был ошибочный ход - создание группы... все чем она помогла - я нашел партнера - программера..."
?
Насколько понял я, это не о моей проге =)

Или не так понял?
 
Насколько понял я, это не о моей проге =)

Или не так понял?


Надо почитатъ ветку выше.

Поставили русифицированную клавиатуру? А то приходилось напрягаться, чтобы читать транслит.


Да,хорошо что в Лондон свой ноутбук забитим стуфом взял, а то бы опят бы транслитил:)))
 
Надо почитатъ ветку выше.

Все равно не могу найти...
Можно ссылочку?
 
Для меня это важно т.к. могу расходовать 1 - 1.5 Мб в день. Пробовал по разному т.е. брал уже готовую историю и подбрасвыал а так же удалял всю историю, открывал 1 график загружал примерно 1 месяц и ждал. Все равно трафик уходит как уходил :( Котировки тикают 1 в 5-10 сек а трафика за это время набегает почти 2 Кб. Индикатор состояния соединения (два экранчика в трэе) всегда активный а раньше только иногда помигивал. :((( Какал GPRS.

Не производите никаких манипуляций с историческими данными на терминале и все будет нормально. То есть, не импортируйте, не удаляйте и не изменяйте данных в терминале. Как все данные устаканятся, перестанет идти трафик на рефрешах измененной истории.

Я и не дергаюсь он сам сколько бы не висел столько и принимант и отправляет че-то... А вот на работе я не ставил 198 билд. А стоит там еще 193 и все ОК. Ничего лишнего не качает.
Причина обращения: