Falhei a funcionalidade semelhante ao iBarShift para MT4. Pode dizer-me como o fazer?
E, tanto quanto sei, deveria usar CopyTime em vez de Time[10]?
O análogo de ibarshift:
int iBarOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )
análogo do Tempo[]:
Time( int i )
Há muito mais por aí que virá a calhar:
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)
Se alguém estiver interessado, encontrei uma alternativa.
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); }
De acordo com as minhas medições, a aceleração em relação à variante CopyTime é de 2 a 7 vezes (dependendo dos dados introduzidos). Se tiver quaisquer comentários ou bugs, por favor escreva.
Se alguém estiver interessado, encontrei uma alternativa.
De acordo com as minhas medições, a aceleração em relação à variante CopyTime é de 2 a 7 vezes (dependendo dos dados introduzidos). Se tiver quaisquer comentários ou bugs, escreva por favor.
Obrigado. Vou experimentá-lo.
Ou talvez esta seja a forma correcta de o fazer agora:
Ou talvez isto seja mais correcto agora:
E ainda mais rápido e mais correcto (o primeiro parâmetro deve ser NULL, não funciona com zero)
int bar = Bars(NULL, 0, t, 32000000000);
Porque não há necessidade de executar a funçãoTimeCurrent() desnecessariamente
32000000000 não é do momento actual, mas quase desde o momento de 3000
E ainda mais rápido e mais correcto (o primeiro parâmetro deve ser NULL, não funciona com zero)
Porque não há necessidade de executar a funçãoTimeCurrent() desnecessariamente
32000000000 não é do momento actual, mas quase desde o momento de 3000
E que tal -1? Este é um momento importante...
Que tal -1? É um ponto importante...
Não tenho a certeza do que se trata?
A função Bars retorna o número de barras. Quando quisermos obter o índice de uma barra com índice 9 (desculpem a tautologia), ele irá retornar 10, porque o índice da primeira barra é 0.

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Falhei a funcionalidade semelhante ao iBarShift para MT4. Pode dizer-me como o fazer?
E, tanto quanto sei, deveria usar CopyTime em vez de Time[10]?