Re: Как в индикаторах и стратегиях получать данные вышестоящих таймфреймов?!
Добавлено: 16 янв 2017, 10:22
Добрый день, Evge!
СПАСИБО!!!
Все работает!
СПАСИБО!!!
Все работает!
Неофициальный форум клиентского терминала Альфа-Инвестиции (Альфа-Директ 4). Обсуждение терминала, обмен опытом, разработка скриптов индикаторов и стратегий.
https://www.alfadirect4.ru/
Код: Выделить всё
function Initialize()
{
IndicatorName = "temp1"; // Задайте название индикатора и сохраните с данным именем
PriceStudy = true; // Рисовать в области цены (true – да, false – нет)
AddInput("Input", Inputs.Candle); // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
AddSeries("A", DrawAs.Line, Color.Red); // Задаем вид линии индикатора A
AddParameter("Period", 326, 1); // Сканируемый период
// для сохранения списков значений OHLC дневных баров
AddGlobalVariable("O", Types.DoubleList);
AddGlobalVariable("H", Types.DoubleList);
AddGlobalVariable("L", Types.DoubleList);
AddGlobalVariable("C", Types.DoubleList);
// для хранения минимальной и максимальной цены текущего дня
AddGlobalVariable("Min", Types.Double, 999999999);
AddGlobalVariable("Max", Types.Double, 0.0);
// для хранения цены открытия текущего дня
AddGlobalVariable("Open", Types.Double, 0.0);
}
function Evaluate()
{
// закончился дневной бар и начался новый
// сохраняем дневные данные в списках
if (BarDate(0).Day != BarDate(1).Day)
{
// новый бар
O.Insert(0, Input.Open[0]);
H.Insert(0, Input.High[0]);
L.Insert(0, Input.Low[0]);
C.Insert(0, Input.Close[0]);
// лишнее удаляем
var CN = O.Count;
if (CN > Period)
{
O.RemoveAt(CN - 1);
H.RemoveAt(CN - 1);
L.RemoveAt(CN - 1);
C.RemoveAt(CN - 1);
}
}
if (O.Count > 0)
{
if (Input.Low[0] < L[0]) L[0] = Input.Low[0];
if (Input.High[0] > H[0]) H[0] = Input.High[0];
C[0] = Input.Close[0];
}
LogData ("[0] //O - " + Convert.ToString(O[0]) + "// H - " + Convert.ToString(H[0]) + "// L - " + Convert.ToString(L[0]) + "// C - " + Convert.ToString(C[0]) , IndicatorName);
LogData ("////////" , IndicatorName);
LogData ("[1] //O - " + Convert.ToString(O[1]) + "// H - " + Convert.ToString(H[1]) + "// L - " + Convert.ToString(L[1]) + "// C - " + Convert.ToString(C[1]) , IndicatorName);
}
Код: Выделить всё
// новый бар
O.Insert(0, Input.Open[1]);
H.Insert(0, Input.High[1]);
L.Insert(0, Input.Low[1]);
C.Insert(0, Input.Close[1]);
Владимир писал(а):Добрый день! Евгений у меня вопрос по индикатору, как можно получить данные предыдущих дней?
данные по сегодняшнему дню получить удаётся, а вот данные по вчерашнему не получается менял
Код: Выделить всё
if (O.Count > 0)
{
LogData ("[0] //O - " + Convert.ToString(O[0]) + "// H - " + Convert.ToString(H[0]) + "// L - " + Convert.ToString(L[0]) + "// C - " + Convert.ToString(C[0]) , IndicatorName);
}
LogData ("////////" , IndicatorName);
if (O.Count > 1)
{
LogData ("[1] //O - " + Convert.ToString(O[1]) + "// H - " + Convert.ToString(H[1]) + "// L - " + Convert.ToString(L[1]) + "// C - " + Convert.ToString(C[1]) , IndicatorName);
}
Код: Выделить всё
2017.03.28 08:51:22.379 [0] //O - 51,01// H - 51,01// L - 50,04// C - 50,79
2017.03.28 08:51:22.379 ////////
2017.03.28 08:51:22.379 [1] //O - 50,58// H - 51,06// L - 50,4// C - 51,03
2017.03.28 08:51:22.379 [0] //O - 51,01// H - 51,01// L - 50,04// C - 50,79
2017.03.28 08:51:22.379 ////////
2017.03.28 08:51:22.379 [1] //O - 50,58// H - 51,06// L - 50,4// C - 51,03
2017.03.28 18:54:36.335 ////////
2017.03.28 18:54:36.335 [1] //O - 2072,25// H - 2072,25// L - 2048,1// C - 2050,4
2017.03.28 18:54:36.335 [0] //O - 2052,25// H - 2057,25// L - 2051,35// C - 2053,1
2017.03.28 18:54:36.335 ////////
Владимир писал(а):не совпадает