В каком месте использовать тут Bars? В MT4 проблем не было - запросил результат и получил его. Здесь же перед CopyClose нужно прописать наверно обновление графика данного таймфрейма, иначе результата возможно не будет. Вопрос заключается в том, как гарантированно получить значение цены с другого таймфрейма.
zfs:
В каком месте использовать тут Bars? В MT4 проблем не было - запросил результат и получил его. Здесь же перед CopyClose нужно прописать наверно обновление графика данного таймфрейма, иначе результата возможно не будет. Вопрос заключается в том, как гарантированно получить значение цены с другого таймфрейма.
Делайте несколько попыток в случае, если не получилось с первого раза. Не помню, чтобы была какая-то проблема в получении данных.
В каком месте использовать тут Bars? В MT4 проблем не было - запросил результат и получил его. Здесь же перед CopyClose нужно прописать наверно обновление графика данного таймфрейма, иначе результата возможно не будет. Вопрос заключается в том, как гарантированно получить значение цены с другого таймфрейма.
zfs:
В каком месте использовать тут Bars? В MT4 проблем не было - запросил результат и получил его. Здесь же перед CopyClose нужно прописать наверно обновление графика данного таймфрейма, иначе результата возможно не будет. Вопрос заключается в том, как гарантированно получить значение цены с другого таймфрейма.
так попробуйте, для закрытия вчерашнего дня, для сегодня rates[1].close, но он еще не закрылсяВ каком месте использовать тут Bars? В MT4 проблем не было - запросил результат и получил его. Здесь же перед CopyClose нужно прописать наверно обновление графика данного таймфрейма, иначе результата возможно не будет. Вопрос заключается в том, как гарантированно получить значение цены с другого таймфрейма.
MqlRates rates[3]; ArraySetAsSeries(rates,true); int copied=CopyRates(Symbol(),PERIOD_D1,0,2,rates); CloseD1=rates[0].close;
zfs:
В каком месте использовать тут Bars? В MT4 проблем не было - запросил результат и получил его. Здесь же перед CopyClose нужно прописать наверно обновление графика данного таймфрейма, иначе результата возможно не будет. Вопрос заключается в том, как гарантированно получить значение цены с другого таймфрейма.
До копирования получить кол-во баров с нужного тф, если 0, запускать синхронизацию.
В каком месте использовать тут Bars? В MT4 проблем не было - запросил результат и получил его. Здесь же перед CopyClose нужно прописать наверно обновление графика данного таймфрейма, иначе результата возможно не будет. Вопрос заключается в том, как гарантированно получить значение цены с другого таймфрейма.
tol64:
Делайте несколько попыток в случае, если не получилось с первого раза. Не помню, чтобы была какая-то проблема в получении данных.
приводит только к зацикливанию
Делайте несколько попыток в случае, если не получилось с первого раза. Не помню, чтобы была какая-то проблема в получении данных.
zfs:
приводит только к зацикливанию
Данные удалось получить или нет? )) В MT4 может быть это всё было сделано внутри. А в MT5 можно всё контролировать. Установите, например 5 попыток.
приводит только к зацикливанию
tol64:
Данные удалось получить или нет? )) В MT4 может быть это всё было сделано внутри. А в MT5 можно всё контролировать. Установите, например 5 попыток.
Данные удалось получить или нет? )) В MT4 может быть это всё было сделано внутри. А в MT5 можно всё контролировать. Установите, например 5 попыток.
Этого недостаточно.
этот вариант в большинстве случаев подойдет
//+------------------------------------------------------------------+ //| Аналог Bars(), не требует предварительной синхронизации истории | //| Вход : symbol - символ в терминале | //| timeframe - таймфрейм | //| Выход : нет | //| Прим. : нет | //+------------------------------------------------------------------+ int BarsSinh( string symbol,ENUM_TIMEFRAMES timeframe ){ SynhronizeSeries( symbol, timeframe ); return( Bars( symbol, timeframe )); } //+------------------------------------------------------------------+ //| Произвести синхронизацию таймсерии с историей | //| Вход : symbol - символ в терминале | //| tf - таймфрейм | //| Выход : нет | //| Прим. : нет | //+------------------------------------------------------------------+ bool SynhronizeSeries( string symbol, ENUM_TIMEFRAMES tf ){ int fail_cnt=0; if( Bars(symbol, tf ) > 0 )return(true); while(!IsStopped() && fail_cnt < 100 ){ //--- wait for timeseries build int fail2_cnt = 0; while(!SeriesInfoInteger(symbol,tf,SERIES_SYNCHRONIZED /*SERIES_SYNCRONIZED*/) && !IsStopped()){ fail2_cnt++; Sleep(5); if( fail2_cnt>1000)break; } //--- ask for built bars datetime times[1]; if( Bars(symbol, tf ) > 0 )return(true); int copied=CopyTime(symbol,tf,0,1,times); if( copied <= 0){ //--- no more than 100 failed attempts fail_cnt++; Sleep(10); } } //Print("Не удалось синхронизировать серии для "+symbol+" таймфрейм "+SPeriod(tf) + " число попыток "+IntegerToString( fail_cnt) ); Print("Can not to sinhronize series for "+symbol+" timeframe "+SPeriod(tf) + " num of attemps "+IntegerToString( fail_cnt) ); return(false); }
//+------------------------------------------------------------------+ //| test1.mq5 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- MqlRates rates[3]; ArraySetAsSeries(rates,true); int copied=CopyRates(Symbol(),PERIOD_D1,0,2,rates); double CloseD1=rates[0].close; Comment("Закрытие дня ",CloseD1); } //+------------------------------------------------------------------+
Файлы:
test1.mq5
4 kb
или так
//+------------------------------------------------------------------+ //| test1.mq5 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- double CloseD1[2]; CopyClose(_Symbol,PERIOD_D1,0,1,CloseD1); Comment("Закрытие дня ",CloseD1[1]); } //+------------------------------------------------------------------+
Файлы:
test1.mq5
3 kb
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вопрос, на который так и не нашёл ответа. Что делать, если функция возвращает мне -1. Повторные обращения могут быть бесконечны, что в результате приводит к зацикливанию. Что мешает функции CopyClose исполняться?