Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 790
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вопрос не снят. Итак, сначала.
Найден максимум, далее по нему строится линия. Проверяется расстояние между этой максимальной линией и текущим минимумом. Если она превышает «Rmax», то ставится стрелка на баре, где найден максимум. Стрелка то ставится, но не там. Для наглядности добавил буфер «BufferLow[i]», который показывает разницу и его данные видны в окне обозревателя.
Вот так всегда. Зимой от Вас снега не дождешься) Сам сделал.
Если кто был мучим столь похожей идеей, то вот код:
Встроенный Heiken Ashi выглядит откровенной недоделкой (интересно, это только у меня на 745 так?), зато стало понятно, как он устроен. И непонятно, как устроен WmiFor!
В коде Heiken Ashi свеча рисуется из 4-х полосок гистограмм:
Т.е. по мере увеличения номера буфера (от 0 до 3) новые полоски рисуются поверх старых. Причём порядок такой:
LowHigh - HighLow - Open - Close.
А чтобы свечи выглядели как положено, с телом и хвостами, порядок должен быть такой:
max(Open,Close)//толстая цветная линия// - min(Open,Close)//толстая белая// - High//тонкая цветная// - Low//тонкая белая//.
Компилируем индикатор, ставим его на график и видим все проблемы (см. рис.).
Но у такого способа, как в Heiken Ashi, есть недостаток - под каждой "свечой" получается белый шлейф в цвет фона, который закрывает всё, что ниже. А у WmiFor всё идеально! Недокументированные возможности?
Первая картинка - Heiken Ashi (вынесен в separate window), вторая картинка - WmiFor, фон сделан светло-зелёным для наглядности.
Сравниваем мягкое с круглым? Зачем Хейкен в отдельное окно выносить, если он задуман для окна графика, и там рисуется именно как свечи с тенями и телом? И никакие новые полоски поверх старых не рисуются, если значение буфера меняется, то та же полоса меняет размер, а не рисуется новая поверх неё.
В МТ4 нет метода отрисовки в виде свеч, так что только гистограммой можно, а уж как вы там значения буферов рассчитаете - ваше личное дело. WmiFor, кстати, тоже гистограммой рисует, давайте и его вынесем в отдельное окно и подивимся на его глюки )))
Чтобы свечи в отдельном окне выглядели как свечи с тенями, их надо рисовать относительно 0, как Accelerator. Или рисовать обьектами, как это делается, см. например All_Stars
Всем Доброго времени суток!
Мозг припух; в документации ответа не нашел, но может кто сталкивался. Вот такая строчка в советнике (доля положительных сделок):
Print(OderPluseCount,"/",OderTotal,"=",DoubleToStr((OderPluseCount/OderTotal),2),"=",BestOd," ",2/5*100," ",100*2/5);
Выдает в журнал (например):
3/6=0.00=0 0 40
При этом если решение от 1:
3/3=1.00=1 0 40
Переменная BestOd=OderPluseCount/OderTotal типа double, остальные int.
То есть, как только встречается значение меньше 1, то автоматом компилятор превращает его в 0... Последние два выражения из констант вообще удивительные результаты дают - вроде, одно и тоже, а нет )))
Пробовал разные подстановки, - все, что больше 1 имеет корректную дробную часть.
Всем Доброго времени суток!
Мозг припух; в документации ответа не нашел, но может кто сталкивался. Вот такая строчка в советнике (доля положительных сделок):
Print(OderPluseCount,"/",OderTotal,"=",DoubleToStr((OderPluseCount/OderTotal),2),"=",BestOd," ",2/5*100," ",100*2/5);
Выдает в журнал (например):
3/6=0.00=0 0 40
При этом если решение от 1:
3/3=1.00=1 0 40
Переменная BestOd=OderPluseCount/OderTotal типа double, остальные int.
То есть, как только встречается значение меньше 1, то автоматом компилятор превращает его в 0... Последние два выражения из констант вообще удивительные результаты дают - вроде, одно и тоже, а нет )))
Пробовал разные подстановки, - все, что больше 1 имеет корректную дробную часть.
Попробуй так
DoubleToStr((double)(OderPluseCount/OderTotal),2)
Попробуй так
DoubleToStr((double)(OderPluseCount/OderTotal),2)
Не помогает. Но спасибо )
DoubleToStr((double)(OderPluseCount/(OderTotal*1.0)),2)
Так работает, Спасибо. Похоже на шаманство )))
Честно говоря, я больше переживаю не за отображение, а за правильный расчет BestOd. Пришлось и его править.
Сделал так:
BestOd=(OderPluseCount/(OderTotal*1.0));
Этому есть какое-то объяснение? Ведь если бы не принт, отловить такую ошибку очень сложно. В каких случаях она может вылезти?
Так работает, Спасибо. Похоже на шаманство )))
Честно говоря, я больше переживаю не за отображение, а за правильный расчет BestOd. Пришлось и его править.
Сделал так:
BestOd=(OderPluseCount/(OderTotal*1.0));
Этому есть какое-то объяснение? Ведь если бы не принт, отловить такую ошибку очень сложно. В каких случаях она может вылезти?
Сам нашел ответ в справочнике, раздел "Приведение типов".
Если два значения объединяются бинарным оператором, то перед выполнением операции операнд младшего типа преобразовывается к более старшему типу в соответствии с приоритетом, указанным на схеме:
Но тип double по этой схеме самый старший. А у меня были оба int. Поэтому и результат целочисленный. Введение константы старшего типа (double, float), преобразовал все int к нему.
Век живи, - век учись, а в документацию заглядывай )))