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

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

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

Добавлено: evge » 12 фев 2022, 11:39

Тема: Re: StrategyRay() формат даты точек

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

Набросок примера использования StrategyRay()

StrategyRay-03.png
StrategyRay-03.png (39.98 КБ) 12881 просмотр


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

function Initialize()
{
IndicatorName = "StrategyRayDemo";
PriceStudy = true;
AddInput("Input", Inputs.Candle, 1, true, "");
AddSeries("ExtH", DrawAs.Custom, Color.Green);
AddSeries("ExtL", DrawAs.Custom, Color.Red);
AddSeries("HH", DrawAs.Custom, Color.Red);
AddSeries("LL", DrawAs.Custom, Color.Green);
AddParameter("Period", 10, 1);
AddParameter("History", 4, 1);

AddGlobalVariable("H", Types.IntList);
AddGlobalVariable("L", Types.IntList);
}

function Evaluate()
{

// evge 12.02.2022 https://alfadirect4.ru

var I = Input;

// проверяем экстремум ли это
bool isH = true, isL = true;
for (int x = 1; x <= Period; x++)
{
   if (I.High[Period + x] > I.High[Period] || I.High[Period - x] > I.High[Period]) isH = false;
   if (I.Low[Period + x] < I.Low[Period] || I.Low[Period - x] < I.Low[Period]) isL = false;
}

// Сохраним индекс экстремума в List
if (isH)
   {   
   H.Add(CurrentIndex - Period);
   ExtH[Period] = I.High[Period];   
   }
if (isL)
   {
   L.Add(CurrentIndex - Period);
   ExtL[Period] = I.Low[Period];   
   }

// Храним только кол-во не более History последних экстремумов
if (H.Count() > History) H.RemoveAt(0);
if (L.Count() > History) L.RemoveAt(0);

///////////////////
// строим RAYs

//по нисходящим High экстремумам
if (H.Count() >= 2)
{
   // смещение баров экстремумов
   int I0 = 0;
   int I1 = 0;
   for (int x = H.Count() - 1; x >= 1; x--)
   {
      I0 = CurrentIndex - H[x];
      I1 = CurrentIndex - H[x-1];
      if (I.High[I0] < I.High[I1]) break;
   }
   
   // экстремумы High нисходящие   
   if (I.High[I0] < I.High[I1])
   {
      DateTime dt1 = BarDate(I0).Add(BarTime(I0));
      long bt1 = DataPoint.SecondsFromDateTime(dt1);
   
      DateTime dt2 = BarDate(I1).Add(BarTime(I1));
      long bt2 = DataPoint.SecondsFromDateTime(dt2);
   
      var TrendLine = StrategyRay(I, bt1, I.High[I0], bt2, I.High[I1]);
      
      //HH[0] = TrendLine[0];
      
      //Дорисовываем (перерисовываем) по экстремумам
      for (int x = 0; x <= I0; x++)
      HH[x] = TrendLine[x];
   }
}

//по восходящим Low экстремумам
if (L.Count() >= 2)
{
   // смещение баров экстремумов
   int I0 = 0;
   int I1 = 0;
   for (int x = L.Count() - 1; x >= 1; x--)
   {
      I0 = CurrentIndex - L[x];
      I1 = CurrentIndex - L[x-1];
      if (I.Low[I0] > I.Low[I1]) break;
   }

   // экстремумы Low восходящие   
   if (I.Low[I0] > I.Low[I1])
   {
      DateTime dt1 = BarDate(I0).Add(BarTime(I0));
      long bt1 = DataPoint.SecondsFromDateTime(dt1);
   
      DateTime dt2 = BarDate(I1).Add(BarTime(I1));
      long bt2 = DataPoint.SecondsFromDateTime(dt2);
   
      var TrendLine = StrategyRay(I, bt1, I.Low[I0], bt2, I.Low[I1]);
      
      //LL[0] = TrendLine[0];
      
      //Дорисовываем (перерисовываем) по экстремумам
      for (int x = 0; x <= I0; x++)
      LL[x] = TrendLine[x];
   }
}


// Отрисовка лучей
HH.DrawCircle();
LL.DrawCircle();

// Отрисовка заданных экстремумов
ExtH.DrawArrowDown();
ExtL.DrawArrowUp();

}



если убрать циклическую отрисовку, а оставить только на текущем баре

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

      //HH[0] = TrendLine[0];
      
      //Дорисовываем (перерисовываем) по экстремумам
      for (int x = 0; x <= I0; x++)
      HH[x] = TrendLine[x];


заменив на

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

      HH[0] = TrendLine[0];
      
      //Дорисовываем (перерисовываем) по экстремумам
      //for (int x = 0; x <= I0; x++)
      //HH[x] = TrendLine[x];


и аналогично проделав с Low экстремумами, то отрисовка будет от момента обнаружения экстремума (точнее, отрисовка будет одинаково начата, но не будет дорисовки до значений до второй точки от бара обнаружения) и далее
на скрине ниже оба варианта, но второй с увеличенным размером кружков (Circle) в настройках индикатора

StrategyRay-02.png
StrategyRay-02.png (39.41 КБ) 12884 просмотра