Общие вопросы по разработке > Учусь писать индикатор. JapanCandles Patterns

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Balalayka
Сообщения: 38
Зарегистрирован: 21 сен 2018, 10:57
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Re: Учусь писать индикатор. JapanCandles Patterns

Непрочитанное сообщение Balalayka » 09 ноя 2018, 06:51

evge писал(а):Как пример рисования свечек кодом

EvgeBars

RangeChart


Евгений, я посмотрел ваш код для заполнения баров цветом на графике цены.
В ваших примерах везде используется доп. область, это обязательно?
Я пробовал на основе вашего кода (но с pricestudy=true) залить цвет бара, у меня не вышло

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 363 раза
Контактная информация:

Re: Учусь писать индикатор. JapanCandles Patterns

Непрочитанное сообщение evge » 09 ноя 2018, 11:10

Можно на графике. EvgeBars он на графике и в доп области, там разные примеры.
никогда такого не было и вот опять

Balalayka
Сообщения: 38
Зарегистрирован: 21 сен 2018, 10:57
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Re: Учусь писать индикатор. JapanCandles Patterns

Непрочитанное сообщение Balalayka » 15 ноя 2018, 15:46

evge писал(а):Можно на графике. EvgeBars он на графике и в доп области, там разные примеры.


Разобрался, спасибо!
Для примера выкладываю образец, с добавлением кода по определению свечного паттерна Харами и отрисовки бычьего и медвежьего сценариев цветом.

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

function Initialize()
{
 IndicatorName = "JapanCandles";                     
 AddInput("Input", Inputs.Candle);     
 AddSeries("Hammer", DrawAs.Custom, Color.Green, true, Axes.Parent);
 AddSeries("Hanged", DrawAs.Custom, Color.Black, true, Axes.Parent);   //произв.метод рисования, ряд отображается в области входного ряда
 PriceStudy = true;
 AddParameter("pips", 1, 0);
 AddParameter("pips1", 3, 0);
 AddSeries("BullEngulfing", DrawAs.Custom, Color.Green, true, Axes.Parent);
 AddSeries("BearEngulfing", DrawAs.Custom, Color.Black, true, Axes.Parent);
 AddSeries("DarkCloud", DrawAs.Custom, Color.Red, true, Axes.Parent);
 AddSeries("BrightCloud", DrawAs.Custom, Color.Blue, true, Axes.Parent);
 AddSeries("MorningStar", DrawAs.Custom, Color.LimeGreen, true, Axes.Parent);
 AddSeries("EveningStar", DrawAs.Custom, Color.Purple, true, Axes.Parent);
 AddSeries("Doji", DrawAs.Custom, Color.Yellow, true, Axes.Parent);
 AddSeries("Bear", DrawAs.Custom, Color.Red, AxisType.Default, true, Axes.Parent);
 AddSeries("Bull", DrawAs.Custom, Color.Green, AxisType.Default, true, Axes.Parent);
 AddGlobalVariable("MSbullMiddle", Types.Int, 0);
 AddGlobalVariable("MSbearMiddle", Types.Int, 0);
 AddGlobalVariable("ESbullMiddle", Types.Int, 0);
 AddGlobalVariable("ESbearMiddle", Types.Int, 0);
 AddGlobalVariable("ESAllBear", Types.Int, 0);
 AddGlobalVariable("HaramiBearSetup", Types.Int, 0);
 AddGlobalVariable("HaramiBullSetup", Types.Int, 0);
 ///AddParameter("PriceStep", 0);
 ///                            
 ///AddParameter("", , 0);          
 ///AddGlobalVariable("GetPriceStep", Types.Double, 0.0);
}

function Evaluate()
{
  var O = Input.Open[0];
  var C = Input.Close[0];
  var H = Input.High[0];
  var L = Input.Low[0];
  MSbullMiddle = 0;
  MSbearMiddle = 0;
  ESbullMiddle = 0;
  ESbearMiddle = 0;
  ESAllBear = 0;
  HaramiBearSetup = 0;
  HaramiBullSetup = 0;
 
  Bear = Input.Low[0];
  Bull = Input.High[0];
 
  Hammer = Input.Low - pips;
  Hanged = Input.High + pips;
 
  if ( (C>O) && (O-L)>(C-O)*2.1 && ((C==H) || (H-C) < (C-O)) )     
  {
    Hammer.DrawCircle();
  }
  if ((C<O) && (C-L)>(O-C)*2.1 && ((O==H) || (H-O) < (O-C))  )   
  {
    Hanged.DrawCircle();
  }

  BullEngulfing=Input.Low-pips;     // Поглощение
  BearEngulfing=Input.High+pips;

  if (Input.Close[1] < Input.Open[1]) // определение типа свечи
  if ( (C > O) && (C > Input.Open[1]) && (O < Input.Close[1]) )
  if ( ((Input.Open[1] - Input.Close[1])*5.0) > (Input.High[1] - Input.Low[1]) )
  {
    BullEngulfing.DrawArrowUp();
  }
 
  if ( (Input.Close[1] > Input.Open[1]) && (C < O) )
  if ( (O > Input.Close[1]) && (C < Input.Open[1]) )
  if ( ((Input.Close[1] - Input.Open[1])*5.0) > (Input.High[1] - Input.Low[1]) ) 
  {
    BearEngulfing.DrawArrowDown();
  }
 
  DarkCloud=Input.High+pips1;            //Завеса из облаков
  BrightCloud=Input.Low-pips1;

  if ((Input.Close[1] > Input.Open[1]) && (C < O) )  //определение типа свечей
  if ( (O>Input.Close[1]) && (C<Input.Close[1]) && (C>Input.Open[1]) )
  if ((Input.Close[1] - C) > ((Input.Close[1] - Input.Open[1])*0.45))

  {
    DarkCloud.DrawSquare();
  }

  if ((Input.Close[1] < Input.Open[1]) && (C > O))  //определение типа свечей
  if ((O<Input.Close[1]) && (C<Input.Open[1]) && (C>Input.Close[1]))   
  if ((C - Input.Close[1]) > ((Input.Open[1] - Input.Close[1])*0.51))

  {
    BrightCloud.DrawSquare ();
  }
 
  MorningStar=Input.Low-pips1;     
  EveningStar=Input.High+pips1;

  // Morning Star (две разновидности)
  // BullMiddle
  if (Input.Close[2]<Input.Open[2] )                       //1 свеча bear                                                                 
  if ((Input.Close[1]>Input.Open[1]) )                     //2 свеча bull                                                     
  if ((Input.Close[1]-Input.Open[1])<(Input.Open[2]-Input.Close[2]) &&     (Input.Close[1]-Input.Open[1])<(C-O))                      //  и 2 свеча <1и3ей свечей
  if (C>O)                                                 // 3 свеча bull                                                                                             

  {
    MSbullMiddle=1;
  }

  if (MSbullMiddle == 1)
  if ((Input.Close[1] < ((Input.Open[2] + Input.Close[2])/2)) && (Input.Close[1] < ((O+C)/2)))

  {
   MorningStar.DrawArrowUp();
  }
 
  // BearMiddle
  if (Input.Close[2]<Input.Open[2] )                       //1 свеча bear                                                                 
  if ((Input.Close[1]<Input.Open[1]) )                      //2 свеча bear                                                     
  if ((Input.Close[1]-Input.Open[1])<(Input.Open[2]-Input.Close[2]) &&     (Input.Close[1]-Input.Open[1])<(C-O))                      //  и 2 свеча <1и3ей свечей
  if (C>O)                                                 // 3 свеча bull   
 
  {
    MSbearMiddle=1;
  }

  if (MSbearMiddle == 1)
  if ((Input.Open[1] < ((Input.Open[2] + Input.Close[2])/2)) && (Input.Open[1] < ((O+C)/2)))
  {
   MorningStar.DrawArrowUp();
  }


//Evening Star (две разновидности)
  // BullMiddle
 
  if (Input.Close[2]>Input.Open[2] )                            //1 свеча bull
  if ((Input.Close[1]>Input.Open[1]) )                         //2 свеча bull                                   
  if ((Input.Close[1]-Input.Open[1])<(Input.Close[2]-Input.Open[2]) && (Input.Close[1]-Input.Open[1])<(O-C))                                        //  и 2 свеча < 1ой и 3ей свечей
  if (C<O)                                                    // 3 свеча bear                                                   

  {
    ESbullMiddle=1;
  }

  if (ESbullMiddle == 1)
  if ((Input.Open[1] > ((Input.Open[2] + Input.Close[2])/2)) && (Input.Open[1] > ((C+O)/2)))
  if (Input.Volume[0] >= Input.Volume[2])
 
  {
   EveningStar.DrawArrowDown();
  }
 
  //BearMiddle
  if (Input.Close[2]>Input.Open[2] )                            //1 свеча bull
  if ((Input.Close[1]<Input.Open[1]) )                         //2 свеча bear                                   
  if ((Input.Open[1]-Input.Close[1])<(Input.Close[2]-Input.Open[2]) && (Input.Open[1]-Input.Close[1])<(O-C))                                        //  и 2 свеча <1ой и 3ей свечей
  if (C<O)                                                   // 3 свеча bear                                                   

  {
    ESbearMiddle=1;
  }

 if (ESbearMiddle == 1)
 if ((Input.Close[1] > ((Input.Open[2] + Input.Close[2])/2)) && (Input.Close[1] > ((C+O)/2)))
 if (Input.Volume[0] >= Input.Volume[2])
  {
   EveningStar.DrawArrowDown();
  }

//AllBear
  if (Input.Close[2]<Input.Open[2] )                            //1 свеча bear
  if ((Input.Close[1]<Input.Open[1]) )                         //2 свеча bear                                   
  if ((Input.Open[1]-Input.Close[1])<(Input.Open[2]-Input.Close[2]) && (Input.Open[1]-Input.Close[1])<(O-C))                                        //  и 2 свеча <1ой и 3ей свечей
  if (C<O)                                                    // 3 свеча bear
 
  {
    ESAllBear=1;
  }
 if (ESAllBear == 1)
 if ((Input.Close[1] > ((Input.Close[2] + Input.Open[2])/2)) && (Input.Close[1] > ((C+O)/2)))
 if (Input.Volume[0] >= Input.Volume[2])
  {
   EveningStar.DrawArrowDown();
  }

   // Doji Detection определение дожи на графике
   
   Doji = Input.High[0] + pips;
   
   double Percent = Input.Open*0.0007;
   
   if ( (C>O) && ( C < (O + Percent )) )
   {
   Doji.DrawCircle();
   }
   
   if ( (C<O) && ( C > (O - Percent) ) ) 
   {
   Doji.DrawCircle();
   }

   // Харами Медвежий с отрисовкой свечи цветом
   
   if ( (Input.Close[1] > Input.Open[1]) && (C >= O) )           // медвежий сетап #1 со второй бычьей свечой
   {
   HaramiBearSetup = 1;
   }

   if ( (Input.Close[1] > Input.Open[1]) && (C <= O)  )         // медвежий сетап #2 со второй медвежьей свечой
   {
   HaramiBearSetup = 2;
   }


  if (HaramiBearSetup == 1)
  if ( (C < Input.Close[1]) && (O > Input.Open[1]) )
  {
  Bear.DrawHistogram(Bull);
  }

  if (HaramiBearSetup == 2)
  if ( (C > Input.Open[1])  && (O < Input.Close[1]) )
  {
  Bear.DrawHistogram(Bull);
  }
 
  // Харами бычий с отрисовкой свечи цветом
  if ( (Input.Close[1] < Input.Open[1]) && (C >= O) )           // бычий сетап #1 со второй бычьей свечой
   {
   HaramiBullSetup = 1;
   }
   
   if ( (Input.Close[1] < Input.Open[1]) && (C <= O)  )         // бычий сетап #2 со второй медвежьей свечой
   {
   HaramiBullSetup = 2;
   }
   
   if (HaramiBullSetup == 1)
   if ( (O > Input.Close[1]) && (C < Input.Open[1]) )
   {
   Bull.DrawHistogram(Bear);
   }
   
   if (HaramiBullSetup == 2)
   if ( (C > Input.Close[1]) && (O < Input.Open[1]) )
   {
   Bull.DrawHistogram(Bear);
   }

       
   }


Вложения
Скриншот 2018-11-15 15.03.58.png

Balalayka
Сообщения: 38
Зарегистрирован: 21 сен 2018, 10:57
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Re: Учусь писать индикатор. JapanCandles Patterns

Непрочитанное сообщение Balalayka » 19 ноя 2018, 14:51

evge писал(а):Можно на графике. EvgeBars он на графике и в доп области, там разные примеры.


Евгений добрый день!
Подскажите пож-та по такому моменту

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

AddSeries("GAP", DrawAs.Custom, Color.Black);


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

GAP = L;
   
   if (L > Input.High[1])
   {
   GAP.DrawDash();
   }



Какие дополнения нужно внести, чтобы линия тянулась на 10,15,20.... баров. По аналогии с вашим примером на EvgeBars
Указанный код выводит вот такую картину:
Вложения
Скриншот 2018-11-19 15.25.38.png
Скриншот 2018-11-19 15.25.38.png (1.95 КБ) 11935 просмотров

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 363 раза
Контактная информация:

Re: Учусь писать индикатор. JapanCandles Patterns

Непрочитанное сообщение evge » 20 ноя 2018, 09:00

Тянулась линия куда?

Горизонтально? Тогда лучше использовать DrawLine() с одинаковым значением на каждом нужном баре.
никогда такого не было и вот опять


Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 20 гостей