Mi mancava la funzionalità simile a iBarShift per MT4. Puoi dirmi come si fa?
E per quanto ho capito si dovrebbe usare CopyTime invece di Time[10]?
L'analogo di ibarshift:
int iBarOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )
analogo di Time[]:
Time( int i )
Ci sono molte altre cose là fuori che possono essere utili:
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 qualcuno è interessato, ho trovato un'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); }
Secondo le mie misurazioni, l'accelerazione rispetto alla variante CopyTime è da 2 a 7 volte (a seconda dei dati di input). Se avete commenti o bug, scrivete pure.
Se qualcuno è interessato, ho trovato un'alternativa.
Secondo le mie misurazioni, l'accelerazione rispetto alla variante CopyTime è da 2 a 7 volte (a seconda dei dati di input). Se avete commenti o bug, scrivete pure.
Grazie. Lo proverò.
O forse questo è il modo giusto per farlo ora:
O forse questo è più corretto ora:
E ancora più veloce e corretto (il primo parametro deve essere NULL, non funziona con zero)
int bar = Bars(NULL, 0, t, 32000000000);
Perché non c'è bisogno di eseguire inutilmente la funzioneTimeCurrent()
32000000000 non è dal momento attuale, ma quasi dal momento di 3000
E ancora più veloce e corretto (il primo parametro deve essere NULL, non funziona con zero)
Perché non c'è bisogno di eseguire inutilmente la funzioneTimeCurrent()
32000000000 non è dal momento attuale, ma quasi dal momento di 3000
E che dire di -1? Questo è un momento importante...
Che dire di -1? È un punto importante...
Non sono sicuro di cosa si tratti?
La funzione Bars restituisce il numero di barre. Quando vogliamo ottenere l'indice di una barra con indice 9 (scusate la tautologia), restituirà 10, perché l'indice della prima barra è 0.
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Mi mancava la funzionalità simile a iBarShift per MT4. Puoi dirmi come si fa?
E per quanto ho capito si dovrebbe usare CopyTime invece di Time[10]?