[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 304
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
: )))))))) Да - правильно. Все упреки принимаю! - За это еще раз извиняюсь. - Это все издержки сильно развитого (специальными упражнениями)
творческой, образной, поэтической и т.д. стороны - все-таки полушария у человека два: творческое и рациональное. Моя вина в том, что я видел это, и не исправил.
Поэтому все Ваши претензии по адресу и я виновен.
но только вопрос остался нерешенным...
Как его в итоге разрешить?
Если Вы считаете, что я чего-то не услышал, то уточните пожалуйста. Я понимаю технику обратной связи (за умение "слышать"), но решения пока не увидел.
Как получить нужное число без округления в формате Дабл, до 3-го знака после запятой, к примеру, в значении Ask = 1,20667 ? - Решение типа "StrToDouble(DoubleToStr(Ask,3)) = 1,2100 // 1,2100 - это получившийся результат (т.е. округляет)" не сработало.
Заранее спасибо за Ваши терпимость и понимание.
DoubleToStr(Ask,3) != DoubleToStr(Ask,Digits) !!! - это нужно было увидеть.
А решение в файле (это проверочный скрипт).
Посмотрел Ваш код.... слишком вы все запутали)))
Я не вполне понимаю, зачем аккумулировать тики, ведь нам достаточно хранить в памяти (или даже не хранить, ведь текущий бар надо писать в HST - иначе график не будет обновляться) параметры текущего бара - шесть чисел TOHLCV, и при поступлении тиков обновлять их по мере необходимости, а по заданному условию (TimeCurrent()-O>1) делать отсечку баров.
Попробуйте переработать код таким образом, он сократится раз в 8, я гарантирую это (проверено:)
Вот так? Переделал алгоритм, убрал аккумулятор, перевёл на эксперта, добавил градацию тиков на бычьи-медвежьи, добавил хвосты у свечей по иному алгоритму, всё раскомментировал. Проверить пока не на чем, тиков-то в выходных нет. По поводу объёма - мне кажется, дело было в FileFlush, она же работает с буфером. На будущее зарёкся что-либо ставить между FileSeek и FileFlush...
DoubleToStr(Ask,3) != DoubleToStr(Ask,Digits) !!! - это нужно было увидеть.
А решение в файле (это проверочный скрипт).
Спасибо большое.
Я пока так и не понял механизм - почему в моем варианте не работало и почему "DoubleToStr(Ask,3) != DoubleToStr(Ask,Digits)" - Видимо, в справочнике не все особенности функций раскрыты.
Вашу функцию разобрал - понял ее ход решения. Но я был уверен, что должен был существовать более "простой" путь решения, ведь набор функций в языке программирования для того и служит, чтобы типичные задачи ими решать, а не создавать каждому пользователю эти типичные функции самостоятельно. Я наивно предполагал, что DoubleToStr() как раз эту задачу и решает. - Не понимаю тогда смысла ее применения (в чем ее нюансы). Я ведь обычный пользователь, а не программист, чтобы до таких деталей "доходить". Когда пользоваться продуктами создания в этом случае, если все время будет уходить на детализацию программирования.
Еще раз спасибо. Сейчас попробую вписать это все в код. Надеюсь, что все заработает.
Спасибо большое.
Я пока так и не понял механизм - почему в моем варианте не работало и почему "DoubleToStr(Ask,3) != DoubleToStr(Ask,Digits)" - Видимо, в справочнике не все особенности функций раскрыты.
Вашу функцию разобрал - понял ее ход решения. Но я был уверен, что должен был существовать более "простой" путь решения, ведь набор функций в языке программирования для того и служит, чтобы типичные задачи ими решать, а не создавать каждому пользователю эти типичные функции самостоятельно. Я наивно предполагал, что DoubleToStr() как раз эту задачу и решает. - Не понимаю тогда смысла ее применения (в чем ее нюансы). Я ведь обычный пользователь, а не программист, чтобы до таких деталей "доходить". Когда пользоваться продуктами создания в этом случае, если все время будет уходить на детализацию программирования.
Еще раз спасибо. Сейчас попробую вписать это все в код. Надеюсь, что все заработает.
Попробуйте для Вашего случая
double x = MathFloor(y*1000)/1000;
DoubleToStr() производит преобразование с числом в два этапа: сначала округляет (по правилам математики) число до нужного знака, а затем переводит его в строку.
Спасибо за пояснения. Я этого, конечно, не знал и грешил в этом случае на StrToDouble(). Но после Вашего пояснения теперь предполагаю, что они обе округляют : (
Зачем округлять - непонятно. Т.к. если бы нужно было округлить, то лучше в этом случае, предварительно использовать к-нить функцию округления (по надобности) - ту же Нормализацию. Тогда были бы обе возможности и с округлением, и без. А так получаются лишние нагромождения. Тем более непонятно почему округляет, когда мне нужно просто сделать итак уже имеющееся число просто другим типом. Я его уже получил (число), зачем его малювать дополнительно.
Попробуйте для Вашего случая
double x = MathFloor(y*1000)/1000;
Точно! Прикольное решение. Я его раньше встречал, но в моем случае что-то упустил. Вам, Александр, тоже Большое спасибо! - Теперь у меня 2 решения будет! : )) (за мульт "Простоквашино")
Такой теоретический вопрос. Цена закрытия, с точки зрения тика - это бид или аск последнего тика в свече? Я замечал, что если бид записать в Close[0], то котировка на бегунке такая же, как на минутках.
Подумал-подумал... Бид по-идее...
Много ошибок. Может пример посмотреть и сделать по аналогии?
В принципе тоже самое. Я так понял, хотя в учебнике вообще ничего нет по этому поводу, как ни странно, что инклюд нужен только как связующее между экспертом и библиотекой.
В инклюде импортируется функция, и объявляются функции, которые нужно импортировать. Между объявлениями ставится знак ;
Вот я написал инклюд и библиотеку (с одной функцией правда, но это только для теста).
Включение вот:
Когда все необходимые (используемые канкретной совой) функции объявлены, в конце ставим #import
Вот сама библиотека:
Она даже не компилируется.
У Вас в библиотеке ничего не объявляется, и ошибок нет, а у меня почему-то есть. Разницы не нашёл никакой..
Виктор, у Вас в функции очень много переменных и ни одна не объявлена.
Компилятор же сообщил:
variable not defined
Переменная не объявлена. Таких 18 штук.
==============
Судя по конструкции функции, она узкоспециальная. Зачем её выносить в библиотеку? Тем более, что она, наверняка, будет вызываться в цикле на каждом баре.
Вы что-то про скорость и оптимизацию говорили. Вы создаёте очень тормозной код. В MQL4 не надо помещать функции в цикле. Чем меньше вызовов функций в цикле, тем быстрее работает код.
==============
Давно, когда начинал писать на MQL4, написал первый свой индикатор индексов валют. Тоже там функции, работа со строками... Пипец, что было... Время на перключение ТФ уходило по 5 минут.
Потом посидел, подумал, ликвидировал все функции, раскрыл их прямо в блоке цикла. Ликвидировал работу со строками, заменив их на идентификаторы. Всё, что можно было расчитать заранее и что не менялось, так и расчитывал (оптимизация). Перенёс код в эксперт. В итоге самый тяжёлый пересчёт при переключении ТФ составлял 15 секунд. Потом перенёс расчёты в DLL. Теперь около 5 секунд.