Каталог файлов форума

Список вложений в сообщениях, оставленных на этой конференции.

Все файлы форума: 1230

Добавлено: evge » 06 апр 2016, 23:26

Тема: BarFrame - бары вышестоящего таймфрейма

Текст сообщения:

Индикатор BarFrame позволяет выводить на графике бары вышестоящего таймфрейма.

Работает только на таймфрейме M1.

Параметры

Period - период вышестоящего таймфрейма в минутах

Примеры работы

BarFrame-05.png
BarFrame версии 2, с периодом 15. Демонстрация вывода Open, Close линии вышестоящего ТФ и использования Close линии в качестве входящей серии для стандартного индикатора SMA (период 750 = периоду 50 для М15)

BarFrame.v2.zip
(1.75 КБ) 1627 скачиваний

BarFrame-03.png
Два индикатора BarFrame с Period = 5 и 30
BarFrame-03.png (23.57 КБ) 36803 просмотра

BarFrame.zip
(1.4 КБ) 1516 скачиваний

BarFrame-02.png
Два индикатора BarFrame с Period = 5 и 15
BarFrame-02.png (29.46 КБ) 36812 просмотров


Исходный текст индикатора (версия 1)

Код: Выделить всё

function Initialize()
{
   IndicatorName = "BarFrame";   
   AddInput("Input", Inputs.Candle);   

   PriceStudy = false;
   
   AddSeries("Bull", DrawAs.Custom, Color.Green, AxisType.Default, true, Axes.Parent);
   AddSeries("Bear", DrawAs.Custom, Color.Red, AxisType.Default, true, Axes.Parent);

   AddSeries("BullHi", DrawAs.Custom, Color.Transparent, AxisType.Default, true, Axes.Parent);
   AddSeries("BearLo", DrawAs.Custom, Color.Transparent, AxisType.Default, true, Axes.Parent);
   
   AddParameter("Period", 5);

   AddGlobalVariable("H", Types.Double, 0.0); // High последнего бара вышестоящего ТФ
   AddGlobalVariable("L", Types.Double, 0.0); // Low последнего бара вышестоящего ТФ
   AddGlobalVariable("Last", Types.Int, 0);     // последний бар 1 - бычий, -1 - медвежий
   AddGlobalVariable("C", Types.Int, 0);      // Счетчик неотрисованного последнего бара вышестоящего ТФ
   AddGlobalVariable("BT", Types.Double, 0);      // кол-во минут бара отсчета
}

function Evaluate()
{
// evge 06.04.2016 http://alfadirect4.ru

// Только на минутном ТФ
if ( (BarTime(0)-BarTime(1)) == AsTime(0, 1, 0) || (BarTime(1)-BarTime(2)) == AsTime(0, 1, 0) )
if ((Math.IEEERemainder(BarTime(0).TotalMinutes, Period) == 0) ||
    ( BT !=0 && (BarTime(0).TotalMinutes - BT) >= Period) )
{

var P = Period;

// Если начало сессии, берем количество баров из счетчика для периода
if ( BarTime(0) == AsTime(10, 0, 0) ) P = C;

L = Input.Low[1];
H = Input.High[1];
for (var x = 1; x <= P; x++) {
   if ((BarTime(1).TotalMinutes - BarTime(x).TotalMinutes) >= P) break;
   if ((Math.IEEERemainder(BarTime(x - 1).TotalMinutes, Period) == 0) && x > 1) break;
   if (Input.Low[x] < L) L = Input.Low[x];
   if (Input.High[x] > H) H = Input.High[x];
}

if (Input.Open[P] < Input.Close[1]) Last = 1; else Last = -1;

for (var x = 1; x <= P; x++) {
   if ((BarTime(1).TotalMinutes - BarTime(x).TotalMinutes) >= P) break;
   if ((Math.IEEERemainder(BarTime(x - 1).TotalMinutes, Period) == 0) && x > 1) break;
   if (Last == 1)
      {
      Bull[x] = L;
      BullHi[x] = H;
      } else
      {
      BearLo[x] = L;
      Bear[x] = H;
      }
}

C = 0; BT = BarTime(0).TotalMinutes;

} // ieee

Bull.DrawHistogram(BullHi);
Bear.DrawHistogram(BearLo);

C++; // :)

}


Скачать исходный текст

BarFrame-04.png
Три индикатора BarFrame с Period = 5, 30, 60


Исходный текст индикатора (версия 2, с OHLC сериями вышестоящего ТФ)

Код: Выделить всё

function Initialize()
{
   IndicatorName = "BarFrame";   
   AddInput("Input", Inputs.Candle);   

   PriceStudy = false;
   
   AddSeries("Bull", DrawAs.Custom, Color.Green, AxisType.Default, true, Axes.Parent);
   AddSeries("Bear", DrawAs.Custom, Color.Red, AxisType.Default, true, Axes.Parent);

   AddSeries("BullHi", DrawAs.Custom, Color.Transparent, AxisType.Default, true, Axes.Parent);
   AddSeries("BearLo", DrawAs.Custom, Color.Transparent, AxisType.Default, true, Axes.Parent);

   AddSeries("CL", DrawAs.Line, Color.Transparent, AxisType.Default, true, Axes.Parent); //Close вышестоящего бара
   AddSeries("OP", DrawAs.Line, Color.Transparent, AxisType.Default, true, Axes.Parent); //Open вышестоящего бара
   AddSeries("HI", DrawAs.Line, Color.Transparent, AxisType.Default, true, Axes.Parent); //High вышестоящего бара
   AddSeries("LO", DrawAs.Line, Color.Transparent, AxisType.Default, true, Axes.Parent); //Low вышестоящего
   
   AddParameter("Period", 5);

   AddGlobalVariable("H", Types.Double, 0.0); // High последнего бара вышестоящего ТФ
   AddGlobalVariable("L", Types.Double, 0.0); // Low последнего бара вышестоящего ТФ
   AddGlobalVariable("Last", Types.Int, 0);     // последний бар 1 - бычий, -1 - медвежий
   AddGlobalVariable("C", Types.Int, 0);      // Счетчик неотрисованного последнего бара вышестоящего ТФ
   AddGlobalVariable("BT", Types.Double, 0);      // кол-во минут бара отсчета
}

function Evaluate()
{
// evge 06.04.2016 http://alfadirect4.ru
// version 2 от 15.04.2016 
//      Добавлены серии CL, OP, HI, LO сохраняющие Close, Open, High, Low вышестоящих ТФ

// Только на минутном ТФ
if ( (BarTime(0)-BarTime(1)) == AsTime(0, 1, 0) || (BarTime(1)-BarTime(2)) == AsTime(0, 1, 0) )
if ( ((BarTime(0).TotalMinutes % Period) == 0) ||
    ( BT !=0 && (BarTime(0).TotalMinutes - BT) >= Period) )
{

var P = Period;

// Если начало сессии берем количество баров из счетчика для периода
if ( BarTime(0) == AsTime(10, 0, 0) ) P = C + 1;

// Поиск мин / макс . L(ow), H(high)
L = Input.Low[1];
H = Input.High[1];
int Lx = 1, Hx = 1; // для сохранения позиции L и H вышестоящего ТФ
int PP = 0;        // для сохранения макс P
for (var x = 1; x <= P; x++) {
   if ((BarTime(1).TotalMinutes - BarTime(x).TotalMinutes) >= P) break;
   if (((BarTime(x - 1).TotalMinutes % Period) == 0) && x > 1) break;
   if (Input.Low[x] < L) { L = Input.Low[x]; Lx = x; }
   if (Input.High[x] > H) { H = Input.High[x]; Hx = x; }
   PP++;
}

if (Input.Open[PP] < Input.Close[1]) Last = 1; else Last = -1;

for (var x = 1; x <= PP; x++) {
   if (((BarTime(x - 1).TotalMinutes % Period) == 0) && x > 1) break;
   if (Last == 1)
      {
      Bull[x] = L;
      BullHi[x] = H;
      } else
      {
      BearLo[x] = L;
      Bear[x] = H;
      }

   CL[x] = Input.Close[1];  // Сохраняем CL(ose) вышестоящего ТФ в серии CL
   OP[x] = Input.Open[PP];   // Сохраняем OP(en) вышестоящего ТФ в серии OP
   HI[x] = Input.High[Hx]; // Сохраняем HI(gh) вышестоящего ТФ в серии HI
   LO[x] = Input.Low[Lx]; // Сохраняем LO(w) вышестоящего ТФ в серии LO
}
CL[0] = Input.Close[1];  // Сохраняем CL(ose) вышестоящего ТФ в серии CL
OP[0] = Input.Open[PP];   // Сохраняем OP(en) вышестоящего ТФ в серии OP
HI[0] = Input.High[Hx]; // Сохраняем HI(gh) вышестоящего ТФ в серии HI
LO[0] = Input.Low[Lx]; // Сохраняем LO(w) вышестоящего ТФ в серии LO

C = 0; BT = BarTime(0).TotalMinutes;

} // ieee
else {
if (CL[1] > 0) CL[0] = CL[1];
if (OP[1] > 0) OP[0] = OP[1];
if (HI[1] > 0) HI[0] = HI[1];
if (LO[1] > 0) LO[0] = LO[1];
}

Bull.DrawHistogram(BullHi);
Bear.DrawHistogram(BearLo);

C++; // :)

}


Скачать исходный текст

BarFrame-01.png
Индикатор BarFrame с Period = 5
BarFrame-01.png (26.78 КБ) 36812 просмотров