#81687 - Wed Apr 12 2017 05:33 AM
Определение угла
|
journeyman
Registered: Sun May 26 2013
Записи: 84
|
Добрый день! Столкнулся с трудностью в определении угла, между максимальными и минимальными точками. Atan2 - дает не верное значение, class Vector тоже выдает значение с которым визуально согласиться нельзя. Структура Vector Метод Vector.AngleBetween (Vector, Vector) тоже выдает кривое значение. Может кто сталкивался, как правильно написать определение угла??? Цены же все время движутся по прямоугольным треугольникам, получается это важно учитывать...
|
Наверх
|
|
|
|
#81704 - Wed Apr 12 2017 11:27 AM
Re: Определение угла
[Re: sar]
|
journeyman
Registered: Sun May 26 2013
Записи: 84
|
Atan не учитывает время (индекс) поэтому не точно. Ведь 1000 пунктов пройденные за 1 мин, и пройденные за 30 мин дадут разный угол.
|
Наверх
|
|
|
|
#81706 - Wed Apr 12 2017 12:10 PM
Re: Определение угла
[Re: sar]
|
stranger
Registered: Thu Jun 27 2013
Записи: 6
|
(Цена(точка2) - Цена(точка1)) / (Индекс Бара(точка2) - Индекс Бара(точка1));
|
Наверх
|
|
|
|
#81708 - Wed Apr 12 2017 12:21 PM
Re: Определение угла
[Re: Michael Shpin]
|
old hand
Registered: Wed Oct 12 2011
Записи: 742
Loc: Россия
|
Я слышал про применение тангенса. Не пробовали? Я пробовал определять через него. Но мне пока не понятно, что именно Вам нужно-просто значение угла или "рисовалку некоего тренда" хотите сделать.
|
Наверх
|
|
|
|
#81711 - Wed Apr 12 2017 01:33 PM
Re: Определение угла
[Re: Rezident]
|
journeyman
Registered: Sun May 26 2013
Записи: 84
|
(Цена(точка2) - Цена(точка1)) / (Индекс Бара(точка2) - Индекс Бара(точка1)); Вот здесь мы получим скорость за один бар между двумя точками, но не угол. Про тангенс нужно почитать, но там же все равно нужно брать угол и его подавать в тангенс или синус или косинус.
|
Наверх
|
|
|
|
#81712 - Wed Apr 12 2017 01:38 PM
Re: Определение угла
[Re: vyudin77]
|
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]
|
stranger
Registered: Thu Jun 27 2013
Записи: 6
|
лично у меня прекрасно получается таким кодом строить наклонную линию
//Получаем угол наклона линии
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]
|
veteran
Registered: Wed Oct 02 2013
Записи: 1357
|
лично у меня прекрасно получается таким кодом строить наклонную линию
//Получаем угол наклона линии
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]
|
stranger
Registered: Thu Jun 27 2013
Записи: 6
|
Думаю такого примера будет достаточно 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]
|
veteran
Registered: Wed Oct 02 2013
Записи: 1357
|
|
Наверх
|
|
|
|
#82150 - Thu Jul 13 2017 06:10 PM
Re: Определение угла
[Re: Stan]
|
stranger
Registered: Wed May 01 2013
Записи: 9
Loc: Россия, Бийск
|
|
Наверх
|
|
|
|
|
|