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

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

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

Добавлено: Владимир » 16 янв 2017, 14:42

Тема: Re: Как нарисовать в индикаторе

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

Добрый день! Подскажите не совсем понятно:
1 как задать толщину и тип линии?
2 как нарисовать восходящий тренд зеленым, нисходящий красным (используя массив) ?
3 как можно нарисовать луч и можно ли получать числовые значения этого луча на нулевой свече?
Эта попытка написать индикатор "Волны Вульфа" описание его полно в интернете если кому интересно.


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

function Initialize()
{
// Область определения параметров индикатора
// Обязательные параметры:
   IndicatorName = "WolfeWave";   // Задайте название индикатора и сохраните с данным именем
   PriceStudy = true;   // Рисовать в области цены (true – да, false – нет)
   AddInput("Input", Inputs.Candle);   // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
   AddSeries("LineHigh", DrawAs.Line, Color.Green);   // Задаем вид линии индикатора с именем LineHigh
   AddSeries("LineLow", DrawAs.Line, Color.Red);   // Задаем вид линии индикатора с именем LineLow 
   AddSeries("MarkerUp", DrawAs.Custom, Color.Red);   // Метим экстремум
   AddSeries("MarkerLow", DrawAs.Custom, Color.Yellow);   // Метим экстремум

// Дополнительные параметры:
 AddParameter("ExsN1", 80, 1);
 AddParameter("Scan", 163, 1); // сканируемый период
 //AddParameter("имя переменной", период, множитель),  требующий размер истории 163 баров ( т.е. 163*1)
 AddGlobalVariable("Kbuy", Types.Double, 0.0);  //выводим значение предпологаемой переменной цены покупки
 //AddGlobalVariable("ExstremaNumber", Types.Int, 80); // Задаем число экстремумов
 AddGlobalVariable("NaprHelp", Types.Int,1); // Задаем число экстремумов
 AddGlobalVariable("XHighN", Types.Int);   //переменная хранения номера свечи хая для сравнения
 AddGlobalVariable("XLowN", Types.Int);     //переменная хранения номера свечи лоу для сравнения
//AddGlobalVariable("ExstremaNumber", Types.Int);

}

function Evaluate()
{ var ExstremaNumber=ExsN1/1;
double [] Buf_High = new double[ExstremaNumber];   // Объявление массивов цен (под буферы индикатора)
double [] Buf_Low = new double[ExstremaNumber];   // Объявление массивов цен (под буферы индикатора)
int [] Buf_time_High = new int[ExstremaNumber];   // Объявление массивов время цены (под буферы индикатора)
int [] Buf_time_Low = new int[ExstremaNumber];   // Объявление массивов время цены (под буферы индикатора)

   if ((MaxIndex - CurrentIndex) > Scan) return;
   {
    if (CurrentIndex == MaxIndex)
{
   var Napr=0; //направление движения цены 0- нет; 1-лонг; 2-шорт;
  //  var NaprHelp=1; //изменение направления ;
   var IzNapr=0; //изменение направления  0- нет; 1-лонг; 2-шорт;
    var HighX= Input.High[Scan];   //переменная хранения значения хая для сравнения
    var LowX=Input.Low[Scan];     //переменная хранения значения лоу для сравнения
    var High = Input.High[Scan];  //переменная сравнения хая
   var Low = Input.Low[Scan];    //переменная сравнения лоу
    XHighN=Scan-1; XLowN=Scan-1;
  for (var x= Scan-1; x>0; x--) 
   {
 /////при нормальных свечах
     if (Input.Open[x]<Input.Close[x]) //проверяем закрытие свечи лонг шорт
        {//лонг
          if (High<Input.Close[x])
          {   // считаем, что произошло обновление High. Поэтому переписываея значения хая и лоу
          Napr=1;   //лонг
          High=Input.High[x];
          Low=Input.Low[x];
          HighX=High; //сохраняем значение хая в памяти
          XHighN=x;   //сохраняем значение в памяти
          }
      }
      else
          {//шорт
           if (Low>Input.Close[x])
            { // считаем, что произошло обновление low. Поэтому переписываея значения хая и лоу
             Napr=2;  //шорт
             High=Input.High[x];
             Low=Input.Low[x];
             LowX=Low; //сохраняем значение лоу в памяти
             XLowN=x; //сохраняем значение в памяти
            }
           }
 /////при формировании свечей с гепами
     if (Input.Open[x]>Input.Close[x]) //проверяем закрытие свечи лонг шорт
        {//лонг
          if (High<Input.Open[x])
          {   // считаем, что произошло обновление High. Поэтому переписываея значения хая и лоу
          Napr=1;   //лонг
          High=Input.High[x];
          Low=Input.Low[x];
          HighX=High; //сохраняем значение хая в памяти
          XHighN=x;   //сохраняем значение в памяти
          }
      }
      else
          {//шорт
           if (Low>Input.Open[x])
            { // считаем, что произошло обновление low. Поэтому переписываея значения хая и лоу
             Napr=2;  //шорт
             High=Input.High[x];
             Low=Input.Low[x];
             LowX=Low; //сохраняем значение лоу в памяти
              XLowN=x; //сохраняем значение в памяти
           }
           }

    //заполняем буфер хаёв
            if (Napr==NaprHelp && Napr==2)    //смена направления с лонга в шорт
            {
              for (var ch=ExstremaNumber-1; ch>0; ch--) //ExstremaNumber-1
              {
               Buf_High[ch]=Buf_High[ch-1];
               Buf_time_High[ch]=Buf_time_High[ch-1];
               }
              Buf_High[0]=HighX;
              Buf_time_High[0]=XHighN;
              NaprHelp=1;
             }
   //заполняем буфер лоёв
            if (Napr==NaprHelp && Napr==1)    //смена направления с шорта в лонг
            {
              for (var Lo=ExstremaNumber-1; Lo>0; Lo--)  //ExstremaNumber-1
              {
               Buf_Low[Lo]=Buf_Low[Lo-1];
                Buf_time_Low[Lo]=Buf_time_Low[Lo-1];
               }
              Buf_Low[0]=LowX;
              Buf_time_Low[0]=XLowN;
              NaprHelp=2;
             }
   /////////////////////////////////////
   } //закрытие цикла for
 
  ///пробуем строить  график
        for(var i=0; i<ExstremaNumber-1; i++)
           {
            if (MarkerLow[Buf_time_Low[i]]>0 || Buf_Low[i]>0)// нулевые данные игнорируем для построения
            MarkerLow[Buf_time_Low[i]]=Buf_Low[i]; //данные для построения меток хаёв
              if (MarkerUp[Buf_time_High[i]]>0 || Buf_High[i]>0) // нулевые данные игнорируем для построения
              MarkerUp[Buf_time_High[i]]=Buf_High[i];  //данные для построения меток лоёв
          if ((MarkerLow[Buf_time_Low[i]]>0 || Buf_Low[i]>0) && (MarkerUp[Buf_time_High[i]]>0 || Buf_High[i]>0))
              {
               LineHigh[Buf_time_Low[i]]=Buf_Low[i];
               LineHigh[Buf_time_High[i]]=Buf_High[i];
              }
            }//построение графика закончено
  }
}
MarkerUp.DrawArrowDown();
MarkerLow.DrawArrowUp();
LineHigh.DrawLine();
LineLow.DrawLine();
}


Вложения
Пример индикатора.jpg