Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Оцени его работу в терминале MetaTrader 5
Fast iBarShift and Bars for MQL5 - библиотека для MetaTrader 5
- Просмотров:
- 1915
- Рейтинг:
- Опубликован:
- 2018.05.04 16:37
- Обновлен:
- 2020.03.13 20:51
- Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Более быстрые аналоги функций Bars и iBarShift благодаря алгоритму сохранения предыдущих значений.
Выигрыш в скорости данных функций fBarShift и fBars в сравнении с оригиналами составляет в среднем более чем в 10 раз.
int fBars(string symbol_name,ENUM_TIMEFRAMES timeframe,datetime start_time,datetime stop_time) { static string LastSymb=NULL; static ENUM_TIMEFRAMES LastTimeFrame=0; static datetime LastTime=0; static datetime LastTime0=0; static int PerSec=0; static int PreBars=0; static datetime LastBAR=0; static datetime LastTimeCur=0; static bool flag=true; datetime TimeCur; if(timeframe==0) timeframe=_Period; const bool changeTF=LastTimeFrame!=timeframe; const bool changeSymb=LastSymb!=symbol_name; const bool change=changeTF || changeSymb || flag; LastTimeFrame=timeframe; LastSymb=symbol_name; if(changeTF) PerSec=::PeriodSeconds(timeframe); if(PerSec==0) { flag=true; return(0);} if(stop_time<start_time) { TimeCur=stop_time; stop_time=start_time; start_time=TimeCur; } if(changeSymb) { if(!SymbolInfoInteger(symbol_name,SYMBOL_SELECT)) { SymbolSelect(symbol_name,true); ChartRedraw(); } } TimeCur=TimeCurrent(); if(timeframe==PERIOD_W1) TimeCur-=(TimeCur+345600)%PerSec; // 01.01.1970 - Thursday. Minus 4 days. if(timeframe<PERIOD_W1) TimeCur-=TimeCur%PerSec; if(start_time>TimeCur) { flag=true; return(0);} if(timeframe==PERIOD_MN1) { MqlDateTime dt; TimeToStruct(TimeCur,dt); TimeCur=dt.year*12+dt.mon; } if(changeTF || changeSymb || TimeCur!=LastTimeCur) LastBAR=(datetime)SeriesInfoInteger(symbol_name,timeframe,SERIES_LASTBAR_DATE); LastTimeCur=TimeCur; if(start_time>LastBAR) { flag=true; return(0);} datetime tS,tF=0; if(timeframe==PERIOD_W1) tS=start_time-(start_time+345599)%PerSec-1; else if(timeframe<PERIOD_MN1) tS=start_time-(start_time-1)%PerSec-1; else // PERIOD_MN1 { MqlDateTime dt; TimeToStruct(start_time-1,dt); tS=dt.year*12+dt.mon; } if(stop_time<=LastBAR) { if(timeframe<PERIOD_W1) tF=stop_time-(stop_time)%PerSec; else if(timeframe==PERIOD_W1) tF=stop_time-(stop_time+345600)%PerSec; else // PERIOD_MN1 { MqlDateTime dt0; TimeToStruct(stop_time-1,dt0); tF=dt0.year*12+dt0.mon; } } if(change || tS!=LastTime || tF!=LastTime0) { PreBars=Bars(symbol_name,timeframe,start_time,stop_time); LastTime=tS; LastTime0=tF; } flag=false; return(PreBars); } //+------------------------------------------------------------------+ int fBars(string symbol_name,ENUM_TIMEFRAMES timeframe) {return(Bars(symbol_name,timeframe));} //+------------------------------------------------------------------+ int fBarShift(string symb, ENUM_TIMEFRAMES TimeFrame,datetime time,bool exact=false) { int Res=fBars(symb,TimeFrame,time+1,UINT_MAX); if(exact) if((TimeFrame!=PERIOD_MN1 || time>TimeCurrent()) && Res==fBars(symb,TimeFrame,time+PeriodSeconds(TimeFrame)+1,UINT_MAX)) return(-1); return(Res); }
Dynamic Balance Point
Индикатор рассчитывает точки динамического баланса для требуемого периода.
Linear Regression SketcherВариация на тему линейной регрессии.
exp_Amstell
Советник использует виртуальный тейк профит для закрытия прибыльных позиций. Открытие позиций с шагом. Отлавливаем тип последней позиции и ее цену в OnTradeTransaction.
ADXm smoothedADXm — вариация на тему хорошо известного индикатора ADX.