Бета-тестирование MetaTrader 5 началось! - страница 108
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Наипоследняя версия MACD Sample. version 5.05. Инклюдные файлы помечены Revision 2009.11.10
Спасибо...
А можно встроенными средствами узнать/изменить цвет фона графика? В MQL4 цвет узнавал через WinAPI...
PS
Хотелось бы еще иметь программный способ смены ТФ у графика.
Сверкаем... ;)))
Осталось доработать алгоритм:
- запоминаем исходный цвет
- моргаеи цветами
- возвращаем исходный цвет
1. Индикаторы работают в интерфейсном потоке. Чтоб его не прегружать и не тормозить интерфейс.
В МТ5 расчет индикаторов происходит не в интерфейсном потоке, а в потоке обработки истории. Но тормозить и перегружать этот поток также не желательно, т.к. в нем происходит и обработка тиков и расчет всех прочих индикаторов по данному символу. Выполнение в общем потоке, а не в отделенном, это основное отличие кастомного индикатора от эксперта или скрипта.
2. Штатного похоже не предусмотрено. Я сделал через файл. Расчитанный в эксперте массив передаётся в индикатор.
Но если МТ не в сети или тиков просто долго нету, приходится переинициализировать весь чарт, чтоб OnCalculate() отработал.
Разработчикам: Механизма передачи инфы между индикаторами и экспертами(скриптами) действительно остро не хватает.
Хорошо бы иметь возможность через хендл индикатора запрашивать не только копии буферов, но и другую инфу, а в идеале
ещё и передавать им что-то или ходя бы как минимум инициировать насильственный перерасчёт. Я понимаю, что "концепция жмёт",
но хотя бы то, что чрез её пролазит... :) Всё же, я думаю, концепции для юзеров, а не юзеры для концепций.
По поводу концепции. Концептуально расчетная часть индикатора лишь код заполнения массивов исходящих данных на основе массивов входящих данных и тут не многое "пролазит".
PS
Хотелось бы еще иметь программный способ смены ТФ у графика.
ChartSetSymbolPeriod()
Временно решил проблему с библиотеками создав каталог "MQL5\Include\Libraries" и переложив туда все библиотеки.
Жду от разработчиков окончательного решения проблемы и исправления ошибки в самом терминале.
Почему функция ChartPeriod(); показывает таймфрейм правильно только до Н1? На Н1 показывает уже число 16385 а не 60, на Н4 16388 а не 240. Или я неправильно это понимаю?
int Perriod=ChartPeriod(0);
Print(Perriod);
Почему функция ChartPeriod(); показывает таймфрейм правильно только до Н1? На Н1 показывает уже число 16385 а не 60, на Н4 16388 а не 240. Или я неправильно это понимаю?
int Perriod=ChartPeriod(0);
Print(Perriod);
Если необходимо получить количество секунд в периоде следует использовать специальную функцию
int PeriodSeconds( ENUM_TIMEFRAMES period=PERIOD_CURRENT // период графика );
А ChartPeriod() как я понял возвращает период графика по его хендлу.
Примерно так должен выглядеть весь код:
PS
В общем же виде ChartPeriod() и Period() возвращают ENUM_TIMEFRAMES (специализированный тип), а как Int результат следует юзать только при передаче его "внешней программе" (например DLL).
Кстати (разработчикам) - А почему перестали помещать в справке вместе с описанием возможных значений таких специализированных типов и их числовые коды (возможно вопросов будет меньше, да и при работе с API это сильно упростит жизнь народу)?
Разбирался с поставляемыми классами.
{
//--- refresh rates
if(!m_symbol.RefreshRates()) return(false);
//--- refresh indicators
m_indicators.Refresh();
//--- to simplify the coding and speed up access
//--- data are put into internal variables
Ao1_H =m_AO.Main(1); Print("Ao1_H = ", Ao1_H);
Ao2_H =m_AO.Main(2); Print("Ao2_H = ", Ao2_H);
В таком виде индикатор будет не как таймсерия, но если выполнить в фале indikator.mqh команду
//+------------------------------------------------------------------+
//| Constructor CIndicatorBuffer. |
//| INPUT: no. |
//| OUTPUT: no. |
//| REMARK: no. |
//+------------------------------------------------------------------+
CIndicatorBuffer::CIndicatorBuffer()
{
//--- initialize protected data
m_size =0;
m_offset=0; ArraySetAsSeries(m_data, true);
}
Тоже и со свежей МАСД
CIndicatorBuffer::CIndicatorBuffer()
{
//--- initialize protected data
m_size =0;
m_offset=0; ArraySetAsSeries(m_data, true);
}
m_macd_current =m_MACD.Main(0); Print("m_macd_current = ", m_macd_current);
m_macd_previous =m_MACD.Main(1); Print("m_macd_previous = ", m_macd_previous);
m_macd_2 =m_MACD.Main(2); Print("m_macd_2 = ", m_macd_2);
Вот так МАСД в программе и индикатор будут совпадать.
то всё будет правильно
А может, это наш косяк? Вы не могли бы прислать Вашего эксперта на stringo AT metaquotes DOT ru для исследования ситуации?
PS. трай-кэтча точно не будет.
Нашел ошибку, и как и думал это именно "косяк" терминала (Где Вы только такую травку берете)...
Вылез сразу после того как к советнику были подключены библиотеки при помощи заголовочника.
А ведь по всем правилам должно работать, в MQL4 и работало.
Ход работы таков:
1. Создаем библиотечный файл и сохраняем его под любым именем, к примеру MyLibFunction.mq5 (Автоматически он сохраняется в MQL5\Libraries и по идеи это правильно).
2. Помещаем туда любую функцию, в моем случае это вот такой код (не спрашивайте почему именно такой)...
3. Создаем заголовочный файл с любым названием, в моем случае это это "Migration.mqh". Сохраняем его в каталоге MQL5\Include.
В нутри этого файла делаем вызов нашей функции вот при помощи такого блока
4. Компилируем все. При этом вылезает куча предупреждений, но компилятор пропускает код.
5. Подключаем к эксперту заголовоник простым вызовом.
И Что получаем в итоге:
Вариант 1 - терминал пишет что не может открыть MyLibFunction. вот это пишет в логе - Cannot open MyLibFunction.ex5 (причем такой результат будет и если положить файл в MQL5\Include).
Вариант 2 - файл находится в MQL5\Include и подключается как MyLibFunction.mq5. Вот что пишет в длге - DLL loading is not allowed.
Нужно дабаить, что при варианте с MyLibFunction.ex5 не отображается даже диалог с параметрами советника!!! :(
Если поместить функцию внутрь заголовочника все работает как часы....
PS
Я так полагаю что эта ошибка в сочетании с 219 релизом и заставляет терминал вылетать по "Crash details":
Time : 2009.11.10 13:50
Program : Client Terminal
Version : 500.219 (09 Nov 2009)
Revision : 14555
OS : Windows XP Professional Service Pack 3, v.3311 (Build 2600)
Processors : 1 x X86 (level 15)
Memory : 1833456/1025868 kb
Virtual : 2097024/1990616 kb
В противном случае ошибка связана с подключением DLL, но там вроде все нормально....