类似于iBarShift

 

我错过了类似于MT4的iBarShift 的功能。你能告诉我怎么做吗?

而据我所知,你应该使用CopyTime而不是Time[10]?

 
GarF1eld писал(а)  :

我错过了类似于MT4的iBarShift的功能。你能告诉我怎么做吗?

而据我所知,你应该使用CopyTime而不是Time[10]?

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
 
gdtt:

ibarshift模拟。

Time[] analogue。

还有很多东西会派上用场。

谢谢!有用的东西

如果标准中没有更理智的东西,我就使用库中的算法

 
谁能推荐一个更快的对应iBarShift的工具?从剖析器 来看,现有的CopyTime选项变成了非常缓慢的。我需要酒吧同步化。我在每个条形图上计算一次指标,但不幸的是,我必须处理ticks,直到条形图被同步化。我还插入了一个定时器;我没有看到任何生产力的提高。
 

如果有人感兴趣,我找到了一个替代品。

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倍(取决于输入数据)。如果你有任何意见或错误,请写信。

 
marketeer:

如果有人感兴趣,我找到了一个替代品。

根据我的测量,与CopyTime变体相比,加速度是2到7倍(取决于输入数据)。如果你有任何意见或错误,请写信。

谢谢你。我将尝试一下。

 

或者说,现在这样做才是正确的做法。

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

或者说,现在这个说法更正确。

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

甚至更快、更正确(第一个参数必须是NULL,它在零的情况下不工作)。

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

因为没有必要不必要地执行TimeCurrent()函数

32000000000不是来自当前时刻,而是几乎来自3000的时刻

 
Nikolai Semko:

甚至更快、更正确(第一个参数必须是NULL,它在零的情况下不工作)。

因为没有必要不必要地执行TimeCurrent()函数

32000000000不是来自当前时刻,而是几乎来自3000的时刻


那么-1呢?这是一个重要的时刻...
 
Denis:

-1的情况如何?这是一个重要的观点...
我不知道你在说什么?
解释一下。
 
Nikolai Semko:
我不确定这是怎么回事?
解释一下。

Bars函数 返回小节的数量 。当我们想获得索引为9的柱状体的索引时(抱歉,同义词),它将返回10,因为第一个柱状体的索引是0。
原因: