[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 285
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Так. Вроде закончил. Вот переделанный сборщик тиков с упаковкой их в секундные свечи.
Было:
Стало:
Замечания по коду.
1. Не стал делать switch-case в выборе виртуальной свечи, чтобы сэкономить процессорное время, вместо этого закомментировал участки с выбором (т.к. выбор делается для конкретных нужд один раз до компиляции).
2. На работу с локальным временем (в оффлайне то есть) до ума не довёл. В цикле "while(time==TimeLocal()){//пока секунда не прошла", так подозреваю, должна быть MarketInfo в FileWriteDouble (по мне, это верх идиотизма). Если подскажите что там логичней будет смотреться, буду благодарен.
3. Авторскую конструкцию
в первый раз я объявил в самом конце init().
4. В начале init() динамические массивы
вместо используемых переменных.
5. Для оптимизации можно теоретически использовать файловые функции WinAPI и записывать в историю сразу блоком по 44 байта (длина структуры MarketInfo или как её там в .hst).
6. Полностью убрал авторское моделирование времени для записи в ячейку Time[]. По той же причине в головном цикле while нет никакой проверки на TimeLocal(), только на TimeCurrent().
7. Что ещё вы предложите для оптимизации кода?
Из п.4 следует понимать, что Вы делали индикатор, тогда не понятны такие действия:
Вероятнее всего подходит ArrayInitialize()?!
А ещё вероятнее всего, Вам нужно отказаться от использования индикаторных массивов.
Вероятнее всего подходит ArrayInitialize()?!
ArrayInitialize(ask, EMPTY_VALUE); имеете ввиду? Не подумал. Я почему стал именно урезать, испугался такого случая:
(a, b, c)//значения в ask после трёх тиков в секунду (фантастика, но предположим).
ArrayInitialize(ask, 0);//будет (0, 0, 0)
FileWriteDouble (hand1e, ask[ArraySize(ask)-1], DOUBLE_VALUE);//Close[]
- в ячейку Close попадёт 0. Поэтому я и переобъявляю размер чтобы этого не случилось. Надо ArrayInitialize(ask, EMPTY_VALUE); прогнать проверить.
TarasBY:
нужно отказаться от использования индикаторных массивов.Они динамические, я на это и клюнул. Меньше команд, меньше тактов процессора. Тут же надо в 500 миллисекунд обработки при любой теоретически возможной ж... уложиться.
ArrayInitialize(ask, EMPTY_VALUE); имеете ввиду? Не подумал. Я почему стал именно урезать, испугался такого случая:
(a, b, c)//значения в ask после трёх тиков в секунду (фантастика, но предположим).
ArrayInitialize(ask, 0);//будет (0, 0, 0)
FileWriteDouble (hand1e, ask[ArraySize(ask)-1], DOUBLE_VALUE);//Close[]
- в ячейку Close попадёт 0. Поэтому я и переобъявляю размер чтобы этого не случилось. Надо ArrayInitialize(ask, EMPTY_VALUE); прогнать проверить.
Они динамические, я на это и клюнул. Меньше команд, меньше тактов процессора. Тут же надо в 500 миллисекунд обработки при любой теоретически возможной ж... уложиться.
Я немножко-совсем не про то: что-то мне подсказывает, что уменьшить индикаторный массив Вам не удастся. К тому же, если в таком массиве есть не заполненные ячейки, то там ВСЁ РАВНО есть какое-то значение: 0 или EMPTY_VALUE, а тогда что Вы получите в этих расчётах:
И по общей логике: я бы запускал весь сбор тиков в цикле и отдельно контролировал время и, как только прошло время на "новый бар", записывал его в файл, обнуляя и обрезая при этом рабочие массивы.подскажите кто знает, есть ли возможность заменить ордер сенд и ордер клоуз в советнике на вызов окна совершения сделок в ручную, и входить выходить в рынок через это окно, это нужно для тех брокеров у которых запрещено использование советников
И по общей логике: я бы запускал весь сбор тиков в цикле и отдельно контролировал время и, как только прошло время на "новый бар", записывал его в файл, обнуляя и обрезая при этом рабочие массивы.
Странно... У меня так и есть... Единственное что время контролируется в самом цикле сбора тиков, а рабочий массив не обрезается до тех пор, пока не прорисуется копия тика столько раз, сколько секунд не было тиков минус один. Одна секунда прошла - рисуется новый тик, две - копия предыдущего тика и новый тик, три - две копии предыдущего тика и новый тик, и т.д. Вместо копий предыдущего тика можно рисовать прочерк по уровню Close, в коде этот вариант закомментен.
Странно... У меня так и есть... Единственное что время контролируется в самом цикле сбора тиков, а рабочий массив не обрезается до тех пор, пока не прорисуется копия тика столько раз, сколько секунд не было тиков минус один. Одна секунда прошла - рисуется новый тик, две - копия предыдущего тика и новый тик, три - две копии предыдущего тика и новый тик, и т.д. Вместо копий предыдущего тика можно рисовать прочерк по уровню Close, в коде этот вариант закомментен.
Мы с Вами о разных циклах говорим. Я о таком:
Кто нибудь подскажет как убрать нули после запятой? У меня почему то 4 знака после запятой показывает. Вот код. string l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3);
Подскажите что я делаю не так...
Мне нужно чтобы переменная типа double содержала в себе дату в виде 0,20130429164459 (имеется в виду 2013.04.29 16:44:59)
Часть кода советника:
Журнал событий для Precision 12,13 и 14 выдает не правильный результат, см. фото