У вас не стоит Flash Player
Настройки
#81687 - Wed Apr 12 2017 05:33 AM Определение угла
vyudin77 Offline
journeyman

Registered: Sun May 26 2013
Записи: 84
Добрый день! Столкнулся с трудностью в определении угла, между максимальными и минимальными точками. Atan2 - дает не верное значение, class Vector тоже выдает значение с которым визуально согласиться нельзя. Структура Vector Метод Vector.AngleBetween (Vector, Vector) тоже выдает кривое значение.
Может кто сталкивался, как правильно написать определение угла???
Цены же все время движутся по прямоугольным треугольникам, получается это важно учитывать...

Наверх
#81695 - Wed Apr 12 2017 09:35 AM Re: Определение угла [Re: vyudin77]
sar Offline
Pooh-Bah

Registered: Fri Jan 28 2011
Записи: 1630
Делал, но давно, через atan но не помню по итогу как было. Знаю что выбирал именно этот метод.
_________________________
Обучение TSLab
https://www.youtube.com/channel/UC_ifEsHB5QTxG7LPr9n7KtA?view_as=subscriber

Наверх
#81704 - Wed Apr 12 2017 11:27 AM Re: Определение угла [Re: sar]
vyudin77 Offline
journeyman

Registered: Sun May 26 2013
Записи: 84
Atan не учитывает время (индекс) поэтому не точно. Ведь 1000 пунктов пройденные за 1 мин, и пройденные за 30 мин дадут разный угол.

Наверх
#81705 - Wed Apr 12 2017 11:47 AM Re: Определение угла [Re: vyudin77]
sar Offline
Pooh-Bah

Registered: Fri Jan 28 2011
Записи: 1630
я рассматривал угол наклона от текущей цены. то есть берем две точки 1 начальная (например точка пересечения) привязываемся к номеру бара. 2 конечная (либо текущая цена, либо например максимум за период) и между этими точками я считаю угол наклона.
Если я хочу сохранить угол наклона, тогда привязываюсь во втором шаге, к номеру бара когда это произошло, и в таком случае сохраню угол.
_________________________
Обучение TSLab
https://www.youtube.com/channel/UC_ifEsHB5QTxG7LPr9n7KtA?view_as=subscriber

Наверх
#81706 - Wed Apr 12 2017 12:10 PM Re: Определение угла [Re: sar]
Michael Shpin Offline
stranger

Registered: Thu Jun 27 2013
Записи: 6
(Цена(точка2) - Цена(точка1)) / (Индекс Бара(точка2) - Индекс Бара(точка1));

Наверх
#81708 - Wed Apr 12 2017 12:21 PM Re: Определение угла [Re: Michael Shpin]
Rezident Offline
old hand

Registered: Wed Oct 12 2011
Записи: 742
Loc: Россия
Я слышал про применение тангенса. Не пробовали? Я пробовал определять через него. Но мне пока не понятно, что именно Вам нужно-просто значение угла или "рисовалку некоего тренда" хотите сделать.

Наверх
#81711 - Wed Apr 12 2017 01:33 PM Re: Определение угла [Re: Rezident]
vyudin77 Offline
journeyman

Registered: Sun May 26 2013
Записи: 84
(Цена(точка2) - Цена(точка1)) / (Индекс Бара(точка2) - Индекс Бара(точка1));
Вот здесь мы получим скорость за один бар между двумя точками, но не угол.
Про тангенс нужно почитать, но там же все равно нужно брать угол и его подавать в тангенс или синус или косинус.

Наверх
#81712 - Wed Apr 12 2017 01:38 PM Re: Определение угла [Re: vyudin77]
vyudin77 Offline
journeyman

Registered: Sun May 26 2013
Записи: 84
Есть в C# Методы заложенные стандартно но они показывают не корректно
public static IList<double> AngleU(IList<double> maxZa, IList<double> minZa)
{
var count = Math.Max(maxZa.Count, minZa.Count);
double[] numArray = new double[count];
for (var i = 1; i < count; i++)
{
Vector vec1 = new Vector(minZa[i], maxZa[i]);
Vector vec2 = new Vector(minZa[i], minZa[i]);
var angleUp = (Vector.AngleBetween(vec1, vec2) * 100)*-1;
numArray[i] = Math.Round(angleUp, 2);
}
return (IList<double>)numArray;
}

public static IList<double> AngleD(IList<double> maxZa, IList<double> minZa)
{
var count = Math.Max(maxZa.Count, minZa.Count);
double[] numArray = new double[count];
for (var i = 1; i < count; i++)
{
Vector vec1 = new Vector(maxZa[i], minZa[i]);
Vector vec2 = new Vector(maxZa[i], maxZa[i]);
var angleUp = Vector.AngleBetween(vec1, vec2) * 100;
numArray[i] = Math.Round(angleUp, 2);
}
return (IList<double>)numArray;
}

Наверх
#81715 - Wed Apr 12 2017 04:31 PM Re: Определение угла [Re: vyudin77]
Michael Shpin Offline
stranger

Registered: Thu Jun 27 2013
Записи: 6
лично у меня прекрасно получается таким кодом строить наклонную линию
Code:

//Получаем угол наклона линии 
double angle = (pointY2 - pointY1) / (pointX2 - pointX1);

//Получаем отступ по Y
double offset = pointY1 - pointX1 * angle;

//Пробегаем по барам, строим наклонную линию начиная со startBar
var angleLine = sec.Bars.Select((bar, i) => i >= startBar ? angle * i + offset : 0d).ToList();

Наверх
#81744 - Mon Apr 17 2017 09:32 PM Re: Определение угла [Re: Michael Shpin]
Stan Offline
veteran

Registered: Wed Oct 02 2013
Записи: 1357
Originally Posted By: Michael Shpin
лично у меня прекрасно получается таким кодом строить наклонную линию
Code:

//Получаем угол наклона линии 
double angle = (pointY2 - pointY1) / (pointX2 - pointX1);

//Получаем отступ по Y
double offset = pointY1 - pointX1 * angle;
//Пробегаем по барам, строим наклонную линию начиная со startBar
var angleLine = sec.Bars.Select((bar, i) => i >= startBar ? angle * i + offset : 0d).ToList();

Можете полностью выложить?

Наверх
#81785 - Sat Apr 22 2017 12:55 AM Re: Определение угла [Re: Stan]
Michael Shpin Offline
stranger

Registered: Thu Jun 27 2013
Записи: 6
Думаю такого примера будет достаточно


Code:
using System.Linq;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Optimization;

namespace MichaelShpin.TSLab.Scripts.Tests
{
	public class AngleLineScript : IExternalScript
	{
		public readonly OptimProperty FirstPointBar = new OptimProperty(1000, 1, 2000, 1);

		public void Execute(IContext ctx, ISecurity sec)
		{
			int pointX1 = (int)FirstPointBar.Value;
			int pointX2 = sec.Bars.Count-1;

			double pointY1 = sec.ClosePrices[pointX1];
			double pointY2 = sec.ClosePrices[pointX2];

			//Получаем угол наклона линии 
			double angle = (pointY2 - pointY1) / (pointX2 - pointX1);

			int startBar = pointX1;

			//Получаем отступ по Y
			double offset = pointY1 - pointX1 * angle;
			//Пробегаем по барам, строим наклонную линию начиная со startBar
			var angleLine = sec.Bars.Select((bar, i) => i >= startBar ? angle * i + offset : 0d).ToList();

			IPane pane = ctx.CreatePane("MainPane", 100, false);
			pane.HideLegend = false;
			pane.UpdatePrecision(PaneSides.RIGHT, sec.Decimals);
			pane.AddList(sec.ToString(), sec, CandleStyles.BAR_CANDLE, true, System.Drawing.Color.DarkBlue.ToArgb(), PaneSides.RIGHT);

			IGraphList line = pane.AddList("AngleLine",angleLine, ListStyles.LINE_WO_ZERO, System.Drawing.Color.OrangeRed.ToArgb(), LineStyles.SOLID, PaneSides.RIGHT);
			line.Thickness = 2;


		}

	}

}


Отредактировано Michael Shpin (Sat Apr 22 2017 12:57 AM)

Наверх
#81786 - Sat Apr 22 2017 06:07 PM Re: Определение угла [Re: Michael Shpin]
Stan Offline
veteran

Registered: Wed Oct 02 2013
Записи: 1357
Спасибо большое

Наверх
#82150 - Thu Jul 13 2017 06:10 PM Re: Определение угла [Re: Stan]
PavelRD Offline
stranger

Registered: Wed May 01 2013
Записи: 9
Loc: Россия, Бийск
спасибо

Наверх


Moderator:  ViL, sar