Сравнение значеий Moving Average (и любых других индикаторов) и погрешности - страница 3

 
Dina Paches:

Спасибо, Артём, но, к сожалению, оказалось, что и оно может иметь границы.

Надеюсь, ни кого не угрохала?
 
Artyom Trishkin:
Надеюсь, ни кого не угрохала?

Да не. Окружающее же меня - ни при чём.)

 
Dina Paches:

Да не. Окружающее же меня - ни при чём.)

Ну хоть букашечку какую? Не? Жаль ... ;)
 
Artyom Trishkin:

Ну во-первых, разность двух нормализованных значений в итоге даст не нормализованное значение. Нужно проверять нормализованную разность.

Во-вторых, если хотите ловить пересечения внутри бара, то снимайте значения по всем тикам на нулевом и первом барах - наловитеееесь ... мама-не-горюй ...

Ежли тестируете по открытию бара, то и советник должен явно отслеживать открытие нового бара, и уже после факта открытия проверять пересечения.

Сначала решите для себя - торгуете на открытии бара, или на каждом тике, потом и код пишите. И, соответственно, так же и тестируйте.

Во-первых, я четко еще в первом посте написал, что торгую только на открытии нового бара. В торговле на тиках есть своя тонкость. Ты сигнал можешь получить, но визуально на графике пересечения не будет, потому что он рисуется только по определенным ценам (открытие, закрытие и т.д.). По тикам он не рисуется. В этом случае потом поди объясни обывателю, что да, на графике нет пересечения, но потому что это специфика рисования мувингов при визуализации только по далеко разнесенным значениям (опять же цены открытия, закрытия и т.д. - аппроксимация, если слышали такое слово), а не по тикам. Во-вторых, нормализация разности - это бред. Вы НИКОГДА заранее не поймете, до какого знака надо нормализовать, чтобы не получить ровно 0 (тупо не отрезать все значащие цифры). Я довольно давно занимаюсь программированием и в связи с этим неплохо разбираюсь в вычислительной математике (по своему основному роду деятельности - моделирование физики, где с точностью вычислений постоянно бодаться приходится). Собственно вообще нормализация - это большое упрощение, если не охота копаться в тонкостях вычислительной математики, погрешностях и т.д. Если вы считаете себя таким гуру и не готовы опускаться до того, что прочитать всю тему внимательно и потом уже делать выводы - это одно. Если это не так и вы тоже торгуете на открытии нового бара, то попробуйте потестировать свой робот на баре от 29.07.2015 в 3:20 с параметрами двух SMA 5 и 34, применяемыми к цене close, на минутном таймфрейме. Как раз именно та ситуация, когда мувинги внутри одного бара пересекаются дважды. А эту ситуацию, торгуя не по тикам определить нереально. Посмотрите, будет ли ваш робот получать оба этих сигнала? И самое главное ответа на вопрос почему на одном и том же баре разность мувингов (а точнее их исходные значения) при вычислении в разное время не равны, вы так и не дали (только Alexey Lebedev пытался, за что ему спасибо, но это все же догадки...). А на это ответить невозможно, не зная принципов работы функции iMA.

P.S. Так просто поболтать думаю тут есть отдельные специальные ветки на форуме, если врубаться в суть проблемы не охота 

 
Dina Paches:

Спасибо, Артём, но, к сожалению, оказалось, что и оно может иметь границы.

 Спасибо за советы конечно, но хэлп я и сам читать умею. И повторюсь вычислительная математика не привязана к конкретному языку программирования. Тут как раз с погрешностями вычислений надо разбираться, с которыми вы пас.
 
gammaray:
...

Продолжайте изобретать гиперболоид. У меня всё всегда работает и считает верно. Ах, да, простите, я ж не гуру в вашей вычислительной математике, я ж не изобретаю дурь - я делаю программы для МТ4 и МТ5. А вы продолжайте умничать, раз не желаете слышать то, что вам говорят (и дело не в учебнике).

Повторю - если вы торгуете на открытии нового бара - вопрос: зачем вам пересечение внутри бара (оно для вас значимо?, если да - посоветую как сделать, если нет - забудьте о нём).

Свой робот я не буду гонять на ваших временных данных - я давно ушел от торговли на МАшках. И то, что МАшки при расчёте по всем ценам, кроме цены открытия, перерисовывают нулевой бар - даже школьнику известно. Для чего вам кому-то там объяснять, что оно было, а теперь его нет, если торгуете на открытии свечи? Вот на открытии и берите данные с МАшки.

Где проблему нашли? Вот ваше пересечение:


Код подсказать, который правильно определит данное пересечение?

 
Artyom Trishkin:

Продолжайте изобретать гиперболоид. У меня всё всегда работает и считает верно. Ах, да, простите, я ж не гуру в вашей вычислительной математике, я ж не изобретаю дурь - я делаю программы для МТ4 и МТ5. А вы продолжайте умничать, раз не желаете слышать то, что вам говорят (и дело не в учебнике).

Повторю - если вы торгуете на открытии нового бара - вопрос: зачем вам пересечение внутри бара (оно для вас значимо?, если да - посоветую как сделать, если нет - забудьте о нём).

Свой робот я не буду гонять на ваших временных данных - я давно ушел от торговли на МАшках. И то, что МАшки при расчёте по всем ценам, кроме цены открытия, перерисовывают нулевой бар - даже школьнику известно. Для чего вам кому-то там объяснять, что оно было, а теперь его нет, если торгуете на открытии свечи? Вот на открытии и берите данные с МАшки.

Где проблему нашли? Вот ваше пересечение:


Код подсказать, который правильно определит данное пересечение?

Я не изобретаю гипердолоид. Если бы хотел изобрести - ничего бы тут не спрашивал. И я не умничаю, а привожу контрпримеры (в т.ч. для вашей любимой нормализации). По поводу пересечений внутри бара. Самая примитивная ТС на МА открывать сделки при их пересечении. При этом при очередном пересечении в обратную сторону первым делом закрывается сделка, открытая на старом пересечении, и отрывается противоположная ей новая. Если я пропускаю пересечение (а в случае с пересечением внутри бара дважды, как ни крути, это так и будет), то я пропускаю один сигнал. И соответственно не закрываю текущую сделку. И у робота получаются две активные сделки, хотя по этой ТС она должна быть всегда одна. Поэтому значимо любое пересечение. Далее, про цены на открытии свечи. В данном случая львиная доля сигналов о пересечении вообще будет пропускаться, если брать, например, значения МА по ценам закрытия. Простой пример - берем для МА цену закрытия (в новом баре все равно какую брать, ибо он только появился, все значения МА будут одинаковыми). Представляем себе картину, когда МА пересекаются где-то в середине только что появившегося бара, но при цене открытия они не пересекаются. На следующем новом баре это пересечение вообще теряется, ибо на предыдущем баре мы берем цену закрытия (а пересеклись они где-то между открытием и закрытием). Сигналы будут поступать только в том редком случае, как раз мной и описанном изначально, когда МА пересекаются четко по цене закрытия бара. Значит если торгуем при открытии текущего бара уже есть ограничение, что МА надо применять к ценам открытия.

С приведенным мной примером я справился введением одного нестрого неравенства. Попробуйте потестируйте  приведенный в прошлом моем посте бар (где есть два пересечения МА за один бар) и посмотрите, определит ли ваш робот эти пересечения? Если он работает только при появлении бара - это невозможно. Только если работать по тикам. А там я уже описывал, какие подводные камни есть

 

Не нужно ничего никогда нормализовывать при сравнении двух вещественных чисел.

Если числа действительно равны, то в памяти они хранятся одинаково. Собственно именно благодаря этому свойству и возможно существование вычислительных машин.

Отсюда следует, что сравнения вида if(a<b) или if(a==b) корректны при любом раскладе и нормализация шморализация не требуется.

Если пытливый ум исследователя всё же найдет противоречие этому правилу, значит либо его машина не исправна, либо ум. Одно из двух.

Справки и документации читать конечно нужно хотя бы иногда (их тоже писали человекоподобные как и мы), но необходимо иметь и собственные здравые рассуждения. 

 
gammaray:

Я не изобретаю гипердолоид. Если бы хотел изобрести - ничего бы тут не спрашивал. И я не умничаю, а привожу контрпримеры (в т.ч. для вашей любимой нормализации). По поводу пересечений внутри бара. Самая примитивная ТС на МА открывать сделки при их пересечении. При этом при очередном пересечении в обратную сторону первым делом закрывается сделка, открытая на старом пересечении, и отрывается противоположная ей новая. Если я пропускаю пересечение (а в случае с пересечением внутри бара дважды, как ни крути, это так и будет), то я пропускаю один сигнал. И соответственно не закрываю текущую сделку. И у робота получаются две активные сделки, хотя по этой ТС она должна быть всегда одна. Поэтому значимо любое пересечение. Далее, про цены на открытии свечи. В данном случая львиная доля сигналов о пересечении вообще будет пропускаться, если брать, например, значения МА по ценам закрытия. Простой пример - берем для МА цену закрытия (в новом баре все равно какую брать, ибо он только появился, все значения МА будут одинаковыми). Представляем себе картину, когда МА пересекаются где-то в середине только что появившегося бара, но при цене открытия они не пересекаются. На следующем новом баре это пересечение вообще теряется, ибо на предыдущем баре мы берем цену закрытия (а пересеклись они где-то между открытием и закрытием). Сигналы будут поступать только в том редком случае, как раз мной и описанном изначально, когда МА пересекаются четко по цене закрытия бара. Значит если торгуем при открытии текущего бара уже есть ограничение, что МА надо применять к ценам открытия.

С приведенным мной примером я справился введением одного нестрого неравенства. Попробуйте потестируйте  приведенный в прошлом моем посте бар (где есть два пересечения МА за один бар) и посмотрите, определит ли ваш робот эти пересечения? Если он работает только при появлении бара - это невозможно. Только если работать по тикам. А там я уже описывал, какие подводные камни есть

Ищите пересечения на каждом тике. В чём проблема-то?
 
Andrey Dik:

Не нужно ничего никогда нормализовывать при сравнении двух вещественных чисел.

Если числа действительно равны, то в памяти они хранятся одинаково. Собственно именно благодаря этому свойству и возможно существование вычислительных машин.

Отсюда следует, что сравнения вида if(a<b) или if(a==b) корректны при любом раскладе и нормализация шморализация не требуется.

Если пытливый ум исследователя всё же найдет противоречие этому правилу, значит либо его машина не исправна, либо ум. Одно из двух.

Справки и документации читать конечно нужно хотя бы иногда (их тоже писали человекоподобные как и мы), но необходимо иметь и собственные здравые рассуждения. 

Если бы не нужна была нормализация при сравнении чисел типа double, с помощью одного из способов, предлагаемых в Документации, то не возникали бы и подобные вопросы.

Да и мне для получения необходимой точности срабатывания каких-либо условий в моих кодах, не доводилось бы применять нормализацию. Не говоря уже о том, что применение нормализаций значений до разных величин десятичных знаков при сравнении, может быть просто само по себе удобно и требуемо при задании условий сравнений, исходя из решаемых задач.

P./S.: Но, в общем-то, об этом упоминала в этой теме и ранее:

О возможности с помощью нормализации настраивать/регулировать требуемый уровень точности сравнений (и/или вывода значений) и/или допустимых для каких-то задач и целей погрешностей, что в свою очередь, в т.ч., позволяет срабатыванию условий программы именно там и так, где и как задумывалось при прописывании конкретных условий в коде.

Причина обращения: