Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1279

 
leonerd:

Ткните носом в простой код, вычисляющий угол движения цены. На картинке ниже показано.


Смотря в чем измеряются x(пикселях, барах или времени) и y(пикселях или цене). 
И смотря какая задача: измерять угол на текущем графике с текущим масштабом(шириной бара в пикселях) и тайфреймом? Или измерять угол, чтобы он оставался одинаковым для любого ТФ и масштаба?
Разные задачи и системы координат - разные решения.
 
leonerd:

Ткните носом в простой код, вычисляющий угол движения цены. На картинке ниже показано.


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

 
Alexey Viktorov:

А по хорошему вам сам угол, как таковой и не нужен, достаточно тангенс узнать.

Точно! И наш тангенс называется: скорость.

 

На примере цена прошла 1884 пункта за 39 часовых свечей. Итого скорость движения этой волны равна: 1884/(39/24) = 1159 пунктов в день.

double interval=double(iBarShift(symbol,frame,start_time)-iBarShift(symbol,frame,finish_time)*PeriodSeconds(frame)/86400;
int distance=MathAbs(finish_price-start_price);
int speed=interval>0?(distance/interval):0;
А угол нам не нужен, зачем нам угол? Когда начнём график растягивать или плющить, как будет тогда выглядеть этот угол?  Угол можно измерять, когда оси x и y имеют одинаковые единицы измерения. Например взяли тетрадь в клеточку, прочертили по диагоналям этих клеточек линию, вот и получили 45 градусов. И что вверх, что вправо сантиметры. А здесь, чему равен один пункт цены? Одному часу, одному дню? Величины то, несопоставимые. 
 
Aleksei Stepanenko:

Точно! И наш тангенс называется: скорость.

 

На примере цена прошла 1884 пункта за 39 часовых свечей. Итого скорость движения этой волны равна: 1884/(39/24) = 1159 пунктов в день.

А угол нам не нужен, зачем нам угол? Когда начнём график растягивать или плющить, как будет тогда выглядеть этот угол?  Угол можно измерять, когда оси x и y имеют одинаковые единицы измерения. Например взяли тетрадь в клеточку, прочертили по диагоналям этих клеточек линию, вот и получили 45 градусов. И что вверх, что вправо сантиметры. А здесь, чему равен один пункт цены? Одному часу, одному дню? Величины то, несопоставимые

А зачем их сопоставлять? Километры и время также несопоставимы, но это нам не мешает считать скорость км/час.

Если у вас тангенс это скорость, то и будет эта скорость в единицу времени периода графика. Если у вас 1884 пункта цена прошла за 39 часов то скорость будет 48 пунктов в час. И совсем нет необходимости пересчитывать это в дни.

Но ещё можно посчитать «ускорение» в виде отношения текущей скорости к скорости на предыдущем баре. А собрав несколько таких значений можно определить среднее ускорение.

 
Aleksei Stepanenko:

А здесь, чему равен один пункт цены? Одному часу, одному дню? Величины то, несопоставимые. 

Ну расстояние тоже меряют в световых годах. Так что это не проблема.
Вводим постоянную скорость. Например, 1 _Point за один 1 минутный бар и приводим систему координат к цене по обоим осям.

Тогда углы будут одинаковыми на любом таймфрейме.

Главное правильно посчитать количество минутных бар между x1 и x2.

В такой системе координат угол в 45 градусов будет означать, что цена меняется на N*tg(45) =N пунктов за N  минутных баров, а угол в 30 градусов будет означать, что цена меняется на N*tg(30)=N*0.57735 пунков за N минутных баров.
Лучше использовать минутные бары, а не время, т.к. существуют временные дырки в виде выходных, низкой волонтильности и т.д.
 

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

Можно вопрос не по теме?

Как правильно преобразовать datatime в double что-бы не ругался компилятор (возможна потеря данных из-за неправильного преобразования)

double A = Time[1];

Заранее спасибо!

 
Alexey Viktorov:
   

Если у вас 1884 пункта цена прошла за 39 часов то скорость будет 48 пунктов в час. И совсем нет необходимости пересчитывать это в дни.

Да, это моё допущение. Поскольку, скорость я сделал int (т.е. целые пункты), подумал пусть будет период побольше, чтобы  доли пункта в скорости не играли особой роли, и их можно было откинуть. Вот и получилось пункты в день. Ну это и согласуется с биологическими часами человека. Устали, поспали, утром встали: "Какая там скорость вчера была?". Выглядит непротиворечиво, вот я и сделал для себя такой стандарт. А так конечно, кому как удобно.


Nikolai Semko:

Ну расстояние тоже меряют в световых годах. Так что это не проблема.
Вводим постоянную скорость. Например, 1 _Point за один 1 минутный бар и приводим систему координат к цене по обоим осям.

Да, опять же скорость получается, только единицы: пункты в минуту. А по поводу выходных и дырок принял для себя так: какие свечи есть на графике, то и есть интервал времени, а чего нет (дней/часов), то этого и не существует. Потому, что если учитывать выходные, а цена в это время стоит на месте, то скорость здесь будет заметно падать без всякого основания. Но это опять же, каждому своё:)


Roni Iron:
   

Как правильно преобразовать datatime в double что-бы не ругался компилятор (возможна потеря данных из-за неправильного преобразования)

double A = (double)Time[1];

А зачем вам хранить дату в double? Если, Вы храните различные типы переменных в одном массиве, и приводите их туда сюда, то подумайте о замене обычного массива на массив структур:


struct My
   {
   datetime time;
   double price;  
   } my[];

int finish=0;
ArrayResize(my,finish+1);
my[finish].time=Time[1];
my[finish].price=Close[1];
 

Спасибо огромное!

Структуры работают только в mql 5 или уже в mql 4  ?

 
Да работают в четвёрке, очень удобно писать с их помощью, наглядно.
 
Roni Iron:

Спасибо огромное!

Структуры работают только в mql 5 или уже в mql 4  ?

Не только структуры работают, но и union тоже.

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