Дуги фибоначи
-
- Сообщения: 7
- Зарегистрирован: Вт апр 17, 2007 6:55 pm
Дуги фибоначи
Могли бы вы объяснить теоретически (раз практически у вас получилось)
как построить дуги, которые пересекали бы прямую в заданных точках (38.2; 50.0; 61.
Очень интересно, а вот как это сделать никак не могу понять.
Заранее большое спасибо.
как построить дуги, которые пересекали бы прямую в заданных точках (38.2; 50.0; 61.
Очень интересно, а вот как это сделать никак не могу понять.
Заранее большое спасибо.
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Дуги фибоначи
Я чессно уже не очень помню в чем там было дело - решил проблему и забыл. Вот код который рисует дуги, разбирайтесь:Grad писал(а):Могли бы вы объяснить теоретически (раз практически у вас получилось)
как построить дуги, которые пересекали бы прямую в заданных точках (38.2; 50.0; 61.
Очень интересно, а вот как это сделать никак не могу понять.
Заранее большое спасибо.
Код: Выделить всё
{-----Paint fibo-------------------------------------------------------------}
procedure TFiboArc.Paint;
var
i, x1, y1, x2, y2, dx, dy, ex1, ex2, ey1, ey2: integer;
date1, date2: TDateTime;
price1, price2, len, flen: double;
visible: boolean;
s: string;
begin
if not(assigned(fLine)) then
exit;
GetLinePoints(x1, y1, x2, y2, visible);
if not(visible) then exit;
GetLineAbsPoints(date1, price1, date2, price2);
with diagram.canvas do
begin
dx := ((x2 - x1) div 16)*integer(diagram.scale);
dy := round((price2 - price1)/fCurrency.MinPoint);
len := dx*dx + dy*dy;
if len > 0 then
len := sqrt(len);
for i:=0 to length(levels) - 1 do
begin
flen := len*levels[i].value/100;
dx := round(flen*16/diagram.scale);
ex1 := x2 - dx;
ex2 := x2 + dx;
ey1 := diagram.GetY(price2 - flen*fCurrency.MinPoint);
ey2 := diagram.GetY(price2 + flen*fCurrency.MinPoint);
pen.Color := levels[i].style.color;
pen.Style := levels[i].style.style;
pen.Width := levels[i].style.width;
font.Name := 'Arial';
font.Color := options.ColorScheme.FrameAndTextColor;
font.Style := [];
font.Height := 14;
s := levels[i].text;
if y1 < y2 then
begin
if ClosedEllipse then
ellipse(ex1, ey1, ex2, ey2)
else
arc(ex1, ey1, ex2, ey2, ex2, y2, ex1, y2);
TextOut(x2 - (TextWidth(s) div 2), ey2 - TextHeight('0'), s);
end
else
begin
if ClosedEllipse then
ellipse(ex1, ey1, ex2, ey2)
else
arc(ex1, ey1, ex2, ey2, ex1, y2, ex2, y2);
TextOut(x2 - (TextWidth(s) div 2), ey1 - TextHeight('0'), s);
end;
end;
end;
end;
Asta la vista
Mike
Mike
-
- Сообщения: 7
- Зарегистрирован: Вт апр 17, 2007 6:55 pm
Дуги Фибоначи
Спасибо большое за код.
Но могли бы вы дать ряд следующих пояснений по нему:
1) в чем измеряются координаты линии x1 и x2? (я имею в виду пиксели, или индексы баров или может что-то еще?)
2) Какое значение имеет переменная diagram.scale, и правильно ли я понимаю, что fCurrency.MinPoint - это минимальное изменение валюты, пункт т.е. например 0.0001?
3) Интересно что за магическая цифра 16, на которую сначала делится искомый dx, а затем умножается?
Может быть следующие мои рассуждения натолкнут вас на подсказку мне же:
Все дело как я понимаю заключается в том чтобы найти искомый dx и dy - радиусы эллипса, а потом уже плюсуем к координатам центра эллипса эти значения и получаем то что требуется.
Так вот проблема в том что определенную часть(38.2; 50.0) - отрезок от линии вычислить можно, но ведь это не искомый dx, это то значение где эллипс должен пересечь прямую. А вот dx, другими словами первый радиус эллипса я не представляю как можно подсчитать?
Еще по коду интересен момент почему вы используете разнородные координаты для подсчета dx и dy (для dx - это x1,x2, для dy уже price1, price2, а не те же y1,y2)
Но ведь главное у вас все работает! Честно говоря глядя на то как вычисляется dx в коде и считаются координаты вывода эллипса ey1,ey2 я не понимаю как это работает, вы уж меня извините.
Надеюсь получить разъяснения по коду, может они до конца происнят ситуацию.
Но могли бы вы дать ряд следующих пояснений по нему:
1) в чем измеряются координаты линии x1 и x2? (я имею в виду пиксели, или индексы баров или может что-то еще?)
2) Какое значение имеет переменная diagram.scale, и правильно ли я понимаю, что fCurrency.MinPoint - это минимальное изменение валюты, пункт т.е. например 0.0001?
3) Интересно что за магическая цифра 16, на которую сначала делится искомый dx, а затем умножается?
Может быть следующие мои рассуждения натолкнут вас на подсказку мне же:
Все дело как я понимаю заключается в том чтобы найти искомый dx и dy - радиусы эллипса, а потом уже плюсуем к координатам центра эллипса эти значения и получаем то что требуется.
Так вот проблема в том что определенную часть(38.2; 50.0) - отрезок от линии вычислить можно, но ведь это не искомый dx, это то значение где эллипс должен пересечь прямую. А вот dx, другими словами первый радиус эллипса я не представляю как можно подсчитать?
Еще по коду интересен момент почему вы используете разнородные координаты для подсчета dx и dy (для dx - это x1,x2, для dy уже price1, price2, а не те же y1,y2)
Но ведь главное у вас все работает! Честно говоря глядя на то как вычисляется dx в коде и считаются координаты вывода эллипса ey1,ey2 я не понимаю как это работает, вы уж меня извините.
Надеюсь получить разъяснения по коду, может они до конца происнят ситуацию.
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Дуги Фибоначи
Grad писал(а):Спасибо большое за код.
Но могли бы вы дать ряд следующих пояснений по нему:
1) в чем измеряются координаты линии x1 и x2? (я имею в виду пиксели, или индексы баров или может что-то еще?)
2) Какое значение имеет переменная diagram.scale, и правильно ли я понимаю, что fCurrency.MinPoint - это минимальное изменение валюты, пункт т.е. например 0.0001?
3) Интересно что за магическая цифра 16, на которую сначала делится искомый dx, а затем умножается?
Может быть следующие мои рассуждения натолкнут вас на подсказку мне же:
Все дело как я понимаю заключается в том чтобы найти искомый dx и dy - радиусы эллипса, а потом уже плюсуем к координатам центра эллипса эти значения и получаем то что требуется.
Так вот проблема в том что определенную часть(38.2; 50.0) - отрезок от линии вычислить можно, но ведь это не искомый dx, это то значение где эллипс должен пересечь прямую. А вот dx, другими словами первый радиус эллипса я не представляю как можно подсчитать?
Еще по коду интересен момент почему вы используете разнородные координаты для подсчета dx и dy (для dx - это x1,x2, для dy уже price1, price2, а не те же y1,y2)
Но ведь главное у вас все работает! Честно говоря глядя на то как вычисляется dx в коде и считаются координаты вывода эллипса ey1,ey2 я не понимаю как это работает, вы уж меня извините.
Надеюсь получить разъяснения по коду, может они до конца происнят ситуацию.
x1, x2, y1, y1 - координаты концов линии в пикселах
date1, date2 - даты концов линии (x - координаты)
price1, price2 - цены на концах линии (y - координаты)
diagram.scale - масштаб диаграммы 1, 2, 4, 8
16x2 - ширина клетки по горизонтали в пикселах
MinPoint это да минимальный шаг валюты
разнородные координаты это неважно я ищу пропорцию отдельно для x и y
насколько я сейчас вспоминаю код dx выходит в барах а dy в пунктах, дальше определяем хитрую длину линии уж не знаю в каких единицах и от нее вычисляем по пропорции расстояние dx и dy эллипса
Asta la vista
Mike
Mike
-
- Сообщения: 7
- Зарегистрирован: Вт апр 17, 2007 6:55 pm
Re: Дуги Фибоначи
Таким образом получается, что вы определяете dx в барах, dy в пунктах, затем в этих разнородных координатах определяете длину линии. Потом ищете в зависимости от очередного уровня Фибоначи длину отрезка линии flen. И вот здесь начинается самое интересное.Terranin писал(а):насколько я сейчас вспоминаю код dx выходит в барах а dy в пунктах, дальше определяем хитрую длину линии уж не знаю в каких единицах и от нее вычисляем по пропорции расстояние dx и dy эллипса
Этот отрезок flen, вычисленный в разнородных координатах, потом преобразованный назад в пиксели:
dx := round(flen*16/diagram.scale), он и становится в результате первым радиусом эллипса. А потом этот же отрезок используется для вычисления длины второго радиуса как его длина в пунктах.
Фантастика, но это действительно на практике работает. Но вот теоретически взглянув на код я бы никогда не сказал что дуги будут правильно рисоваться!
Еще раз спасибо за код!
- Terranin
- Site Admin
- Сообщения: 846
- Зарегистрирован: Вс июл 23, 2006 12:01 pm
Re: Дуги Фибоначи
Ага, я уже не помню в чем была идея но она работает.Grad писал(а):Таким образом получается, что вы определяете dx в барах, dy в пунктах, затем в этих разнородных координатах определяете длину линии. Потом ищете в зависимости от очередного уровня Фибоначи длину отрезка линии flen. И вот здесь начинается самое интересное.Terranin писал(а):насколько я сейчас вспоминаю код dx выходит в барах а dy в пунктах, дальше определяем хитрую длину линии уж не знаю в каких единицах и от нее вычисляем по пропорции расстояние dx и dy эллипса
Этот отрезок flen, вычисленный в разнородных координатах, потом преобразованный назад в пиксели:
dx := round(flen*16/diagram.scale), он и становится в результате первым радиусом эллипса. А потом этот же отрезок используется для вычисления длины второго радиуса как его длина в пунктах.
Фантастика, но это действительно на практике работает. Но вот теоретически взглянув на код я бы никогда не сказал что дуги будут правильно рисоваться!
Еще раз спасибо за код!
Asta la vista
Mike
Mike
- Николай Тарасов
- Сообщения: 144
- Зарегистрирован: Чт авг 27, 2009 4:39 pm
- Откуда: Екатеринбург
- Контактная информация:
Re: Дуги Фибоначи
Рекомендую почитать на досуге: http://gann.suTerranin писал(а):Ага, я уже не помню в чем была идея но она работает.Grad писал(а):Таким образом получается, что вы определяете dx в барах, dy в пунктах, затем в этих разнородных координатах определяете длину линии. Потом ищете в зависимости от очередного уровня Фибоначи длину отрезка линии flen. И вот здесь начинается самое интересное.Terranin писал(а):насколько я сейчас вспоминаю код dx выходит в барах а dy в пунктах, дальше определяем хитрую длину линии уж не знаю в каких единицах и от нее вычисляем по пропорции расстояние dx и dy эллипса
Этот отрезок flen, вычисленный в разнородных координатах, потом преобразованный назад в пиксели:
dx := round(flen*16/diagram.scale), он и становится в результате первым радиусом эллипса. А потом этот же отрезок используется для вычисления длины второго радиуса как его длина в пунктах.
Фантастика, но это действительно на практике работает. Но вот теоретически взглянув на код я бы никогда не сказал что дуги будут правильно рисоваться!
Еще раз спасибо за код!
Это собрание сочинений Ганна В.Д. и не только.
Для расширения сознания, так сказать.
Я желаю всем счастья.
- alshaboz
- Сообщения: 6
- Зарегистрирован: Ср дек 28, 2011 5:55 pm
Дуги фибоначи
При установке на график дуги Фибоначчи видны как три параллельные прямые (в режиме "Закрытый эллипс" - шесть).
Как получить нормальные дуги?
Как получить нормальные дуги?
-
- Сообщения: 329
- Зарегистрирован: Сб июл 11, 2009 3:59 pm
- alshaboz
- Сообщения: 6
- Зарегистрирован: Ср дек 28, 2011 5:55 pm
Дуги фибоначи
Такое поведение Дуг Фибо появляется на котировках, отличных от котировок Форекс. Например, как у меня на текущий момент: фьючерс на индекс РТС с Авг 2005 по Сен 2012. Там ценовые значения порядка "153780". Предполагаю, что в этом и дело. Проверил на котировках Форекс - там дуги нормально рисуются.
Понимаю, что FT "заточен" для Форекс и нельзя требовать бесконечной универсальности. Всё же обращаю Ваше внимание на то, что в MT4 в параметрах "дуг" есть параметр "Масштаб", которого нет у "дуг" в FT и с помощью которого можно было бы решить обсуждаемую проблему.
Без "дуг" нельзя воспользоваться таким инструментом, как векторы Ганна.
В нынешней редакции FT, как вариант, мне остаётся только попробовать подогнать делением котировки фьючерса под диапазоны котировок Форекса. Однако, это придётся делать позже. Слишком далеко я зашёл в тестировании фьючерса на других инструментах анализа и не хочется терять проект, пока не дойду до конца. (При сохранении и открытии проектов идут какие-то "непонятки" с потерей проектов. Обучатся приходится на ходу, тестировать FT на работоспособность и выявлять его свойства пока некогда, контекстная справка - сами знаете какая).
Понимаю, что FT "заточен" для Форекс и нельзя требовать бесконечной универсальности. Всё же обращаю Ваше внимание на то, что в MT4 в параметрах "дуг" есть параметр "Масштаб", которого нет у "дуг" в FT и с помощью которого можно было бы решить обсуждаемую проблему.
Без "дуг" нельзя воспользоваться таким инструментом, как векторы Ганна.
В нынешней редакции FT, как вариант, мне остаётся только попробовать подогнать делением котировки фьючерса под диапазоны котировок Форекса. Однако, это придётся делать позже. Слишком далеко я зашёл в тестировании фьючерса на других инструментах анализа и не хочется терять проект, пока не дойду до конца. (При сохранении и открытии проектов идут какие-то "непонятки" с потерей проектов. Обучатся приходится на ходу, тестировать FT на работоспособность и выявлять его свойства пока некогда, контекстная справка - сами знаете какая).
- alshaboz
- Сообщения: 6
- Зарегистрирован: Ср дек 28, 2011 5:55 pm
-
- Сообщения: 329
- Зарегистрирован: Сб июл 11, 2009 3:59 pm
Здравствуйте, Вы сами ответили на свой вопрос
ФТ действительно заточен для работы с форекс котировками и котировки "большого порядка" могут вызывать проблемы. И действительно эти проблемы можно решить поделив котировки на 10/100/1000 (в зависимости от данных).
В следующих версиях мы постараемся решить эту проблему и добавить поддержку котировок "большого порядка"
ФТ действительно заточен для работы с форекс котировками и котировки "большого порядка" могут вызывать проблемы. И действительно эти проблемы можно решить поделив котировки на 10/100/1000 (в зависимости от данных).
В следующих версиях мы постараемся решить эту проблему и добавить поддержку котировок "большого порядка"