Ещё в бета релизе от 6 мая 2019 и по текущие версии АД4 появилась возможность торговли по линиям граф инструментов с графика.
Появился вопрос в ЛС по поводу какой же формат даты передавать в StrategyRay() для роботов по линии, если это луч?
Замечу, что StrategyRay() можно использовать и в индикаторах.
подсмотрел ответ в TA.dll
используется DataPoint и методы:
Код: Выделить всё
public static long SecondsFromDateTime(DateTime value)
{
return (long)value.Subtract(Standard1990).TotalSeconds;
}
public static DateTime DateTimeFromSeconds(long value)
{
return Standard1990.AddSeconds(value);
}
т.е. это long кол-ва секунд с начала 1990 года, т.к. Standard1990 это:
Код: Выделить всё
public static DateTime Standard1990 = new DateTime(1990, 1, 1, 0, 0, 0);
в общем можно получить эти значения с любого бара графика по их индексам смещения (например) или от CurrentIndex запомнить и искать смещение через разницу CurrentIndex текущего бара и гл. переменной CurrentIndex сохраненного бара в истории. Это уже кому как нравится и зависит от задачи.
как получить?
Код: Выделить всё
DataPoint.SecondsFromDateTime(ДатаВремяБара)
как получить дату время бара?
Код: Выделить всё
DateTime dt = BarDate(0).Add(BarTime(0));
здесь 0 - это смещение бара назад в историю от текущего. (0 - текущий)
в итоге чтобы задать время двух точек на графике от известных баров можно сделать будет так:
Код: Выделить всё
//200 баров назад
DateTime dt1 = BarDate(200).Add(BarTime(200));
long bt1 = DataPoint.SecondsFromDateTime(dt1);
//100 баров назад
DateTime dt2 = BarDate(100).Add(BarTime(100));
long bt2 = DataPoint.SecondsFromDateTime(dt2);
//строим луч от даты и времени bt1 до bt2 по ценам 5000 и 5500
var TrendLine = StrategyRay(Input, bt1, 5000, bt2, 5500);
Получаем луч построенный по двум точкам на графике.
Можно использовать для своих нужд и цену или знач. индикаторов сравнивать с значением из TrendLine
Ещё выяснил, что ряд полученный по StrategyRay() не строится непосредственно от точки 1 до точки 2 и далее, строится начиная только с точки 2 и далее.
Думаю, что это сделано для оптимизации, т.к. нет необходимости в стратегии знать какие были значения непосредственно между этими двумя точками, т.к. эта информация никак стратегии не поможет, а вот что содержится для текущего бара уже интересно.
Хотя по оптимизации тут же вопрос возникает.
Зачем тогда вообще получать ряд?
Может быть только одна точка для текущего бара была бы ещё более производительным вариантом.
Какой смысл несет информация от второй точки до текущего бара?!
Получилось как-то неполноценно.
Оптимизация неполная, а с другой стороны и данные неполные, т.е. отсутствует расчет между заданными точками.
Меня бы конечно вариант с полными данными от точки 1 по текущий бар больше устроил.
Но для работы стратегий вообще тут ряд не нужен, а нужен только результат луча на текущем баре.
Это показали тесты отрисовки индикатором данных по ряду TrendLine между двумя точками.
Данные имелись только от второй точки и далее.
Хотел сделать индикатор использующий данные StrategyRay() полученный по экстремумам.
Набросок есть, но озвученное выше идею загубило , а добавлять свой расчет значений между точками экстремумов весь смысл использования StrategyRay() отменяет.