Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нет, это не только проблема 32битного терминала. Но на сегодня решение для 32битного готово, в 64битном пока остаётся ограничение по стеку в 256Кб.
Но если программист самостоятельно, через свойство, не укажет требуемый размер стека, то EX5 в терминале будет работать с размером стека по умолчанию ( 256Кб )
По поводу большого размера.
Под каждое объявление переменной внутри функции(кроме static переменных) отводится место на стеке, при этом выделение места на стеке под локальные переменные происходит при каждом вызове.
Поэтому если функция имеет локальные переменные размером в 64Кб, то стека хватит на 3 вложенных вызова, при 4 вызове произойдёт переполнение стека (т.к. часть стека уходит на внутренние нужды терминала). Поэтому если есть потребность в больших локальных данных, то лучше использовать динамическую память - при входе в функцию память под локальные нужды выделяется в системе (new, ArrayResize) и при выходе из функции производится удаление памяти (delete, ArrayFree).
Спасибо за подробное объяснение. Но у меня точно проблема не в этом. Я попробую написать тестового эксперта для выявления этой ошибки, так как та функция, из которой растут ноги уже найдена и там нет таких объёмов (64Кб - 256Кб). Ночью тогда вышлю эксперта в Сервисдеск с проблемной функцией.
Ещё вдогонку вопрос (и просьба освятить это в хелпе) о работе той же функции (CLBufferWrite()).
Если писать в буфер информацию непосредственно из индикаторного буфера с взведённым флагом ArrayIsSeries (==true), в каком направлении будет происходить чтение входного массива?
Подозреваю что флаг будет игнорироваться, и к тому же неясно с какого места будет читать? Указанное смещение будет таки отсчитываться от физического конца массива или от начала вовсе?
Я конечно пока на всяк случай на воду буду дуть (буду работать с ArrayIsSeries== false), однако всё же ?
offset - в данных функциях действительно, смещение в байтах от начала OpenCL буфера, а переданный в функцию массив будет копироваться с нулевого элемента без учёта флага ArrayIsSeries.
1. На данный момент функционал работы с OpenCL буфером не полный и будет дополнен/дописан.
2. offset - в данных функциях действительно, смещение в байтах от начала OpenCL буфера, а переданный в функцию массив будет копироваться с нулевого элемента без учёта флага ArrayIsSeries.
1. Я кагбе так и подозревал... :)
2. Так. Приплыли. Значит напрямую писать из индикаторного буфера частями никак не получится (пока).
По хорошему нужно конечно же стартовые позиции делать подвижными и в источнике и в приёмнике. Вот как здесь:
int ArrayCopy(
void dst_array[], // куда копируем
void src_array[], // откуда копируем
int dst_start=0, // с какого индекса пишем в приемник
int src_start=0, // с какого индекса копируем из источника
int cnt=WHOLE_ARRAY // сколько элементов
);
С индексированием (направление и единицы измерения (байты/элементы)) пожалуйста как-то аккуратнее в справке. А то эта.. время сильно жалко.. :)))
--
Спасибо за ответ. Я вапчета очень ценю ваши усилия по совершенствованию функционала.
Буду с нетерпением терпеливо ждать продолжения банкета. А пока придётся танцевать на острие кинжала. :)
Build 597 x64, только что установился.
2012.02.23 21:43:24 OpenCLTest (EURUSD,M30) SaveBitmapToFile error opening 'Mandelbrot.bmp'
2012.02.23 21:43:13 OpenCLTest (EURUSD,M30) SaveBitmapToFile error opening 'Mandelbrot.bmp'
2012.02.23 21:43:12 OpenCLTest (EURUSD,M30) SaveBitmapToFile error opening 'Mandelbrot.bmp'
2012.02.23 21:43:10 OpenCLTest (EURUSD,M30) SaveBitmapToFile error opening 'Mandelbrot.bmp'
2012.02.23 21:43:09 OpenCLTest (EURUSD,M30) SaveBitmapToFile error opening 'Mandelbrot.bmp'
2012.02.23 21:43:08 OpenCLTest (EURUSD,M30) SaveBitmapToFile error opening 'Mandelbrot.bmp'
2012.02.23 21:43:07 OpenCLTest (EURUSD,M30) SaveBitmapToFile error opening 'Mandelbrot.bmp'
2012.02.23 21:43:06 OpenCLTest (EURUSD,M30) SaveBitmapToFile error opening 'Mandelbrot.bmp'
Раньше такого не было.
// Win7 x64
Build 597 x64, только что установился.
Раньше такого не было.// Win7 x64
Попробуйте перекомпилировать пример. Я проверил - у меня все работает.
Уже сто раз перекомпилировал. Щас перезагружусь ещё.
... Щас перезагружусь ещё.
Не, не помогло.
Renat:
...... Я проверил - у меня все работает.
Так у меня тоже работает. Но раз в десять-сорок циклов вылетает така кака:
2012.02.23 23:16:43 OpenCLTest (EURUSD,M30) SaveBitmapToFile error opening 'Mandelbrot.bmp'
2012.02.23 23:16:42 OpenCLTest (EURUSD,M30) SaveBitmapToFile error opening 'Mandelbrot.bmp'
2012.02.23 23:16:36 OpenCLTest (EURUSD,M30) SaveBitmapToFile error opening 'Mandelbrot.bmp'
Не, не помогло.
Так у меня тоже работает. Но раз в десять-сорок циклов вылетает така кака:
Тоже обнаружил.
Это от того, что идет работа с указанным файлом в двух разных потоках без синхронизации и периодически файл оказывается заблокированным:
Так как пример с картинкой был сделан лишь для демонстрации принципа работы с OpenCL, то это не является проблемой.
Так как пример с картинкой был сделан лишь для демонстрации принципа работы с OpenCL, то это не является проблемой.