Никому не знакома проблема...
//+------------------------------------------------------------------+ //| MA_Tester | //| Copyright 2012, Karlson | //+------------------------------------------------------------------+ input int MA=1000; int ma_h=0; double ma[]; //+------------------------------------------------------------------+ //| | //| | //+------------------------------------------------------------------+ int OnInit() { ma_h=iMA(_Symbol,_Period,MA,0,MODE_SMA,PRICE_CLOSE); if(ma_h<0) { Print("ОШибка создания хендла.");} ArrayInitialize(ma,0.0); if(GetLastError()>0) {Print("Ошибка ",GetLastError());return(-1);} return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick() { ResetLastError(); int copy=CopyBuffer(ma_h,0,0,2,ma);ArraySetAsSeries(ma,true); if (copy<0) {Print("Скопировано = ",copy);} else {Print("Скопировано = ",copy, " MA[0]=",DoubleToString(ma[0],_Digits), " MA[1]=",DoubleToString(ma[1],_Digits));return;} if(GetLastError()>0) {Print("Ошибка ",GetLastError());} } //+------------------------------------------------------------------+
Никому не знакома проблема...
А в OnInit Вы что именно собирались проверить на наличие ошибки? Почему отсутствует ResetLastError()?
Это пример того ,что все работает.Лично использую до 4000 период.
Что касается последней проверки..Это упрощенно ведь.Данная проверка у меня в конце любого блока практически.
Это пример того ,что все работает.Лично использую до 4000 период.
Что касается последней проверки..Это упрощенно ведь.Данная проверка у меня в конце любого блока практически.
Блин, я подумал, что фразой "Никому не знакома проблема..." Вы вопрос задаёте. А это совсем из другой песни слова :)
После первого поста у меня вкрадывались подозрения,что не совсем корректно написал.. ))) но пустил по ветру )))
Результат работы вашего скрипта:
2012.04.30 01:51:34 Core 1 2012.01.02 22:48:34 Ошибка 4806 2012.04.30 01:51:34 Core 1 2012.01.02 22:48:34 Скопировано = -1 2012.04.30 01:51:34 Core 1 2012.01.02 22:48:31 Ошибка 4806 2012.04.30 01:51:34 Core 1 2012.01.02 22:48:31 Скопировано = -1 2012.04.30 01:51:34 Core 1 2012.01.02 22:48:28 Ошибка 4806 2012.04.30 01:51:34 Core 1 2012.01.02 22:48:28 Скопировано = -1 2012.04.30 01:51:34 Core 1 2012.01.02 22:48:25 Ошибка 4806 2012.04.30 01:51:34 Core 1 2012.01.02 22:48:25 Скопировано = -1 2012.04.30 01:51:33 Tester quality of analyzed history is 100% 2012.04.30 01:51:33 Core 1 EURUSD: history synchronization completed [7 Kb] 2012.04.30 01:51:33 Core 1 EURUSD: history for 2012 year synchronized
Не заметно, что "все работает".
По сути, очевидно, что проблема локальная и проблема с историей, по этому и задается вопрос, как её "контролировать" в mt5 ... т.е. как узнать сколько данных в истории и т.д.
Во первых не скрипт,а в варианте советника.
Отсюда,что работать будет ,когда пойдут тики.
Во вторых вот что у меня:
В третьих можете проверить данные и историю:
https://www.mql5.com/ru/docs/series/timeseries_access
https://www.mql5.com/ru/docs/series/bars
Ну вот когда "это" будет хоть как-то оперировать со сделками, тогда и назовем ваш код советником, но если вам принципиально, то пусть будет по вашему.
Во вторых, я в первом посте написал, что проблема именно в тестере.
В третьих, я же сам и написал что проблема в истории. Функции определения состояния истории (аля SeriesInfoInteger) покажет мне информацию которую я и так знаю.
В тестере:
2012.05.02 21:54:51 Core 1 2012.01.02 00:00:00 Bars in history: 261, is synсronized: 1
В режиме реальной торговли:
2012.05.02 21:55:25 issue (EURUSD,D1) Bars in history: 10632, is synсronized: 1
Код:
PrintFormat( "Bars in history: %i, is synсronized: %i", SeriesInfoInteger( Symbol(), Period(), SERIES_BARS_COUNT ), SeriesInfoInteger( Symbol(), Period(), SERIES_SYNCRONIZED) );
Финальный вопрос состоял в том, как сейчас контролировать историю в Терминале (аля History Center для 4-ки), где можно было бы видеть что есть и докачать, если необходимо?
Гут ,добавим сделки.Хотя ,если есть обработчик OnTIck,то вариантов нет что это.
У меня все работает. Выдаст ошибку пишите.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Заметил, что возникают проблемы с получением данных для iMA когда стоит период в 365 (например). В тестере для текущего бара данных просто нет (ошибка 4806). Тогда как в дебаггере все доступно. И это не зависит от периода для тестирования. Набросал код для проверки:
В результате получаем вот такие результаты:
т.е. для периода больше 260 дней данных просто нет, хотя в тестере выбран период с 2011.01.01 до текущего дня (2012.04.24). Символ для тестирования USDCHF. Практически та же картина для остальных символов.
Подскажите как перевести данное обстоятельство в контролируемый процесс? Понятно что проблема в истории, пытался удалять каталог history\ в tester\ ... ничего не изменилось. В логах тоже нет никаких ошибок о недоступности всех данных (тестирование идет полным ходом с заявленной даты).
В идеале мне надо данные с периодом в 365. И вообще как сейчас контролировать историю в 5 терминале?