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;
}
}
}