Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нужен приватный мониторинг счета? В Сигналах есть такая возможность!
Alexander
1510
Alexander 2010.04.06 17:37 

Я упустил из виду функциональность, аналогичную iBarShift для МТ4. Подскажите как это сделать?

И насколько я понимаю вместо Time[10] нужно использовать CopyTime? 

Aleksey Sergan
20663
Aleksey Sergan 2010.04.06 18:55  
GarF1eld писал(а)  :

Я упустил из виду функциональность, аналогичную iBarShift для МТ4. Подскажите как это сделать?

И насколько я понимаю вместо Time[10] нужно использовать CopyTime? 

аналог ibarshift:

int iBarOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )

аналог Time[]:

Time( int i )

там много еще чего, что пригодится:

double iHigh(string symbol,int tf,int ind)
double High( int i )
double iLow(string symbol,int tf,int ind)
double Low( int i )
double iClose(string symbol,int tf,int ind)
double Close( int i )
double iOpen(string symbol,int tf,int ind)
double Open( int i )
double HighOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )
double LowOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )
double CloseOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )
double OpenOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )
string SPeriod(ENUM_TIMEFRAMES tf)  //символьное представление периода
datetime iTime( const string symbol, int tf, int ind  )

//+------------------------------------------------------------------+
//| Аналог Bars(), не требует предварительной синхронизации истории  |
//| Вход  : symbol - символ в терминале                              |
//|         timeframe - таймфрейм                                    |
//| Выход : нет                                                      |
//| Прим. : нет                                                      |
//+------------------------------------------------------------------+
int BarsSinh( string symbol,ENUM_TIMEFRAMES  timeframe )

//+------------------------------------------------------------------+
//| Произвести синхронизацию таймсерии с историей                    |
//| Вход  : symbol - символ в терминале                              |
//|         tf     - таймфрейм                                       |
//| Выход : нет                                                      |
//| Прим. : нет                                                      |
//+------------------------------------------------------------------+
void SynhronizeSeries( string symbol, ENUM_TIMEFRAMES tf )

//+------------------------------------------------------------------+
//| Проверить наличие истории на дату start_date, если остуствует,   |
//| то произвести попытку загрузки                                   |
//| Вход  : symbol - символ в терминале                              |
//|         period - таймфрейм                                       |
//|         start_date - дата проверки истории                       |
//| Выход : код результата выполнения операции подробнее             |
//|         см. https://www.mql5.com/ru/docs/series/timeseries_access |
//| Прим. : нет                                                      |
//+------------------------------------------------------------------+
int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date)
//+------------------------------------------------------------------+
//| возвращает строкое значение периода                              |
//+------------------------------------------------------------------+
string GetPeriodName(ENUM_TIMEFRAMES period)

 

Файлы:
common.mqh 22 kb
Alexander
1510
Alexander 2010.04.06 19:36  
gdtt:

аналог ibarshift:

аналог Time[]:

там много еще чего, что пригодится:

 

спасибо! полезная вещь

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

Stanislav Korotky
16464
Stanislav Korotky 2012.08.07 15:55  
Кто-нибудь может подсказать более быстрый аналог iBarShift? Существующие варианты с CopyTime получаются страшно тормозными, судя по профилировщику. Нужна побаровая синхронизация. Считаю индюк на каждом баре один раз, но к сожалению до тех пор пока бар не становится синхронизированным, приходится обрабатывать тики. Таймер тоже вставлял, прироста в производительности не наблюдаю.
Stanislav Korotky
16464
Stanislav Korotky 2012.08.07 21:18  

Если кому интересно, нашел альтернативу.

int iBarShiftFast(string symbol, ENUM_TIMEFRAMES timeframe, datetime time)
{
  datetime lastBar;
  SeriesInfoInteger(symbol, timeframe, SERIES_LASTBAR_DATE, lastBar);
  return(Bars(symbol, timeframe, time, lastBar) - 1);
}

По моим замерам, ускорение по сравнению с вариантом с CopyTime - от 2 до 7 раз (в зависимости от входных данных). Если есть замечания или баги, напишите плиз.

Roman Shiredchenko
1472
Roman Shiredchenko 2012.09.16 15:44  
marketeer:

Если кому интересно, нашел альтернативу.

По моим замерам, ускорение по сравнению с вариантом с CopyTime - от 2 до 7 раз (в зависимости от входных данных). Если есть замечания или баги, напишите плиз.

Спасибо. Попробую юзать.

 

Roffild
1280
Roffild 2012.10.10 18:07  

А может теперь вот так правильней:

int bar = Bars(0, 0, barTime_last, TimeCurrent());

Nikolai Semko
1659
Nikolai Semko 2015.04.18 14:58  
Roffild:

А может теперь вот так правильней:

int bar = Bars(0, 0, barTime_last, TimeCurrent());

А еще быстрее и правильнее (первый параметр должен быть NULL, с нулем не работает)

 int bar = Bars(NULL, 0, t, 32000000000);

Ибо зачем выполнять лишнюю функцию TimeCurrent()

 32000000000 - это не от текущего момента, а почти от момента 3000 года

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий