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

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

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

Добавлено: evge » 15 апр 2016, 11:42

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

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

Владимир Валерьевич писал(а):1. Math.IEEERemainder - это что? С++ или что-то встроенное?


Этот метод можно было заменить просто на %

Вот новая версия 2 индикатора, где уже рисуются OHLC серии для вышестоящего бара, их можно использовать на входе в других индикаторах, например в SMA можно указать входящую серию не CLOSE свечи, а CL индикатора и будет отрисована SMA по Close вышестоящего ТФ.

Вот скриншот, где выводится BarFrame с периодом 15, указал цвет линии Close (CL) и линии Open (OP) (для примера), которые показываются для вышестоящих баров. По CL рисуется SMA с периодом 50 - красным цветом.

BarFrame-05.png
Деомнстрация SMA по CL индикатора BarFrame


По умолчанию, OHLC вышестоящего ТФ не рисуются, т.к. указан прозрачный цвет. Можно задать свой цвет в настройках индикатора и будет отображаться как на скриншоте. Например, на скриншоте: Желтый цвет - OP(en), Черный цвет - CL(ose) вышестоящего ТФ.

Видно в заголовке скриншота
SMA(BarFrame(SRM6=ФОРТС).CL, 750)
, что задана входящая серия для SMA как значение CL индикатора BarFrame, т.е. это 50 * 15 = 750 (SMA(50) для M15)

ещё один SMA с периодом 50 (синим цветом) выведен на график для сравнения, который рисуется по CLOSE свечи

код индикатора (версия 2)

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

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++; // :)

}
Вложения
тесты 2.docx
(106.39 КБ) 0 скачиваний