1. В параметрах индикаторов есть 2 первых (iMA(NULL,0,...)), через которые можно указать явно инструмент и таймфрейм. А как, например, "взять" High, Low и иже с ними аналогичным (простым) образом из других "мест"?
Через копирование чужого таймфрейма в отдельный буфер через:
int ArrayCopySeries(double array[], int series_identifier, string symbol_name, int period)
Copies some series array to another array and returns copied item count.
Sample:
double array1[10]; ArrayCopySeries(array1, MODE_OPEN);
Ну а потом со своим массивом можно делать что угодно (и максимально быстро).
Функций вида "получить Close из таймфрейма такого-то" нет и не планируется.
2. а потом надо сильно думать в какой именно массив нужно затолкать начальное значение
Похоже проблема только в том, что программист не желает лишний раз подумать или поработать.
Я же не прошу Microsoft чтобы он мне какую-то функцию переписал. Я сажусь и за пару минут
пишу собственную - благо что ничто не мешает ни мне, ни Вам.
Похоже проблема только в том, что программист не желает лишний раз подумать или поработать.
К сожалению, не похоже. Почему к сожалению? Потому что как раз с "подумать и поработать" постоянный и пожизненный перебор. И думать и работать приходится тем больше, чем меньше продуман интерфейс, чем меньше встроенных функций, свойств, возможностей и т.д. и т.п. И написание собственных функций, это единственный путь в такой ситуации, чтоб хоть как-то облегчить себе жизнь и уменьшить объемы работ. А фирма Microsoft отрабатывает эти моменты на 100%. А то, что у них ошибочки встречаются, так у них и разработочки пофундаментальней будут. В С++ мне приходилось писать свои функции только в тех случаях, когда приходилось часто использовать какой-либо один и тотже алгоритмик. В ассемблере только приходилось создавать целые библиотеки своих собственных функций. Кроме этого в западных фирмах работают люди, профессия которых называется компьютерный психолог. И дружественность интерфейсов "их" программ во многом зависит от них. По нашим меркам работники такого профиля - дармоеды, которые ничего не делают. Мы и сами с усами. Всё знаем, всё могём. Так что не надо про желание думать и работать.
double hClose[]; datetime hTime[]; nCloseBars=ArrayCopySeries(hClose,MODE_CLOSE,Symbol(),PERIOD_H1); nTimeBars=ArrayCopySeries(hTime, MODE_TIME, Symbol(),PERIOD_H1);
Уважаемые разработчики, объясните, пожалуйста, почему на разных ТФ nCloseBars везде возвращает значение -1, а nTimeBars возвращает разные значения (М30-1033, М15-1551, М5-2052, М1-2040). Кол-во баров на Н1 - 2062. В хелпе по ArrayCopySeries написано, что возвращается количество скопированных элементов. Т.е., как я понимаю, nCloseBars и nTimeBars должны возвращать число 2062.
а Вы не могли бы код ошибки привести, которую можно получить по GetLastError?
а если скопировать сначала Time, а потом Close, что будет?
а если скопировать сначала Time, а потом Close, что будет?
Код ошибки = 0, перемена местами Close и Time ничего не меняет. Изменилась картина после переноса объявления массивов в "хидер" и инициализации их в init.
double hClose[]; datetime hTime[]; int init() { SetIndexBuffer(0,hClose); SetIndexBuffer(1,hTime); } int start() { int nCloseBars,nTimeBars; nCloseBars=ArrayCopySeries(hClose,MODE_CLOSE,Symbol(),PERIOD_H1); nTimeBars=ArrayCopySeries(hTime, MODE_TIME, Symbol(),PERIOD_H1); ... }
Теперь при 2210 барах на Н1 возвращается 2208 на М30 и М15, 2160 на М5, 0 на М1
Забыл уточнить, что эти числа возвращаются и nCloseBars и nTimeBars
И, кстати, у меня сейчас 145 билд. А какого числа Вы его выложили? Я не помню, когда я обновился. Возможно, то что я описывал, было в 144. Если это имеет какое-то значение...
будем разбираться
Разработчикам
В программе эксперта или индикатора можно проанализировать кол-во баров и если таковых недостаточно для производства расчётов, то можно только "уйти". А нельзя ли добавить какой-нибудь опертор, который бы вызывал закачку необходимого количества баров? Чтобы не лезть на интересующий ТФ и не скроллировать вручную до получения требуемого кол-ва этих баров.
P.S. Уже столкнулся с такой бедой и сейчас буду заниматься скроллингом :( А ситуация простая - индикатор, работающий с разными ТФ одновременно. Кстати, непонятно опять же в каком объёме осуществляет подкачку ArrayCopySeries, если вообще осуществляет.
В программе эксперта или индикатора можно проанализировать кол-во баров и если таковых недостаточно для производства расчётов, то можно только "уйти". А нельзя ли добавить какой-нибудь опертор, который бы вызывал закачку необходимого количества баров? Чтобы не лезть на интересующий ТФ и не скроллировать вручную до получения требуемого кол-ва этих баров.
P.S. Уже столкнулся с такой бедой и сейчас буду заниматься скроллингом :( А ситуация простая - индикатор, работающий с разными ТФ одновременно. Кстати, непонятно опять же в каком объёме осуществляет подкачку ArrayCopySeries, если вообще осуществляет.
Разработчикам
В експерте/индикаторе можно задать в параметрах
extern bool bbb=false;
тогда в свойствах мы "обнаружим" комбобокс. Оно и понятно. Где есть false, должен быть и true. Но! Замечательно, что в свойствах предоставляется автоматом возможность выбора, а не нужно вписывать вручную. Очень удобно. И очень хотелось бы иметь возможность формировать самому такую возможность, например, таким образом:
extern int aaa[]={1,2,3,4,5,6,7,8,9};
Можете добавить в MQL такую фичу?
В експерте/индикаторе можно задать в параметрах
extern bool bbb=false;
тогда в свойствах мы "обнаружим" комбобокс. Оно и понятно. Где есть false, должен быть и true. Но! Замечательно, что в свойствах предоставляется автоматом возможность выбора, а не нужно вписывать вручную. Очень удобно. И очень хотелось бы иметь возможность формировать самому такую возможность, например, таким образом:
extern int aaa[]={1,2,3,4,5,6,7,8,9};
Можете добавить в MQL такую фичу?

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
2. В пользовательских индикаторах на пополам используюся линии и гистограммы. Не согласен был ещё в тройке с принципом построения гистограмм. Но там деваться некуда было. В четвёрке надеялся, что будет "получше". Получается, что изначально мы задаём цвета (color1,color2,...), задаем массивы (arr1[],arr2[],...) а потом надо сильно думать в какой именно массив нужно затолкать начальное значение, а в какой конечное, чтобы эта гистограмма нарисовалась тем цветом, каким надо. Практически, очень часто получается, что определяешь цвета "по логике", обзываешь массивы "по логике", а рисуется потом "не тем" цветом. Меняешь массивы местами, и тогда всё ок. Для мозгов всё-таки меньше было бы напряга, если бы цвет бара гистограммы можно было бы задавать явно, не заботясь о том, как этот гистограммный бар будет рисоваться - сверху вниз, или снизу вверх.