Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Результат:
Либо что-то я неправильно делаю (прошу поправить), либо многоуважаемый MetaDriver допустил ошибку в теории (при проектировании алгоритма).
:)
Ну учитывая тот факт что "проектирование" алгоритма заняло около 3 минут (и минут 7 реализация), справился я неплохо :) Целью же было показать рабочую идею и уточнить постановку задачи.
И всё это оказалось в итоге полезным - у разработчиков появился реальный повод довести до ума функцию MathFloor() - в ней очевидно не всё чисто реализовано.
В итоге пришлось повозиться. Было весело. Устойчивую функцию (я про CountSignedDigits(double x)) удалось получить только через почти час экспериментов.
И то - даже сейчас не уверен что будет точно работать при всех входных значениях. Автоматический стресс-тест не разрабатывал, сделал ручной. Прошу тестить.
Ожидаю устойчивой работы до 10 десятичного знака после плавающей точки.
Стресс-тест прилагается. // Не стал убирать в коде некоторые промежуточные реализации. Оставил в коментах на попробовать/поразмышлять. В том числе разработчикам.1. Не нужно определять dig для лота, достаточно нормализовать его до нужного шага:
2. Даже если при передаче торгового запроса в переменную lot попадет мусор (в надцатом знаке после запятой), он должен будет отсеятся самим терминалом.
3. По крайней мере, у меня за несколько лет использования такой конструкции проблем не возникало.
4. А если хочется перестраховаться, можно воткнуть нормализацию до 8-го (с запасом) знака после запятой - если после "правильной" нормализации и появится мусор, то он будет намного дальше.
Первая идея правильная, остальные подозрительные. :)
Реализация рабочая для практики, но для искусственных условий определённых "проблем-стартером" (с) неточна. Ибо дискретные шаги порождает не относительно lot_min, а относительно нуля. :)
Однако поправить легко, если это заметить.
// Прошу эти перлы шибко всерьёз всё это не воспринимать. Уточнения чисто теоретические, для тренировки мозгов, поскольку на практике ни разу не видел lot_step равный, скажем 0.0231....
;)
вариант верный. Правильно учтён lot_min как в моей NL().
До кучи мой вариант. Учтите, что для некоторых инструментов шаг изменения цены больше пойнта.
Если принять за аксиому, что шаги "идут" не от нуля, а от минимального лота, правильный алгоритм следующий:
В варианте Компостера шаги "идут" от нуля. Что, как мне кажется, не правильно.
В варианте МетаДрайвера код пропускает отрицательное значение. =Р
...
В варианте МетаДрайвера код пропускает отрицательное значение. =Р
:)) ..... Ах так! Да у тебя вапче работать не будет!! ;-Р ;-Ь ;-Р
Ну если уж на то пошло, то самый короткий и при этом "типа точный" вариант такой:
И это ещё без проверки на нулёвость и отрицательность lot_step, lot_min и lot_max !!......
:))))
Ыыы... задел за живое. :)) Последнюю строку вручную правил в сообщении на форуме, так что простительно. =)
Кстати, твой код тоже не компилируется (в последней строке закрывающую скобку забыл). :-Р
К тому же, работает он в 2-3 раза медленнее (сейчас замерил на скрипте), а качество проверки такое же. :-Р
В общем, пока нет грамотного кода по определению значащего младшего разряда, воспользуюсь советом Компостера: нормализировать объем до 8-го знака после запятой.
Надеюсь, подводных камней не появится.
Всем спасибо за помощь.
смешные вы ребята как я погляжу.
в своём первом посте дал NL() до чего вы через две страницы только дошли ;)
Появился еще один вопрос к гуру. При тестировании мультивалютника возникают ошибки (скрин прилагаю).
Пытаюсь совершить торговую операцию, на что получаю ответ: нет цены. По тестеру видно, что котировки по данной паре начинают поступать в 2011.01.03 01:00:00, в то время как тоже EURUSD котируется с 2011.01.03 00:00:00 Можно ли как-то узнать, время начала котировок, чтобы обойти данную ошибку?
Появился еще один вопрос к гуру. При тестировании мультивалютника возникают ошибки (скрин прилагаю).
Пытаюсь совершить торговую операцию, на что получаю ответ: нет цены. По тестеру видно, что котировки по данной паре начинают поступать в 2011.01.03 01:00:00, в то время как тоже EURUSD котируется с 2011.01.03 00:00:00 Можно ли как-то узнать, время начала котировок, что обойти данную ошибку?