Страница 1 из 1

Парсинг данных с графика

Добавлено: 03 май 2018, 21:34
ilya0610
Добрый день

Подскажите, как используя индикатор HeikenAshi, сделать следующее условие:

Открыть, либо закрыть позицию при появление некоторого n количества баров синего цвета

123.png

Re: Парсинг данных с графика

Добавлено: 04 май 2018, 07:10
evge
Если требуется в конструкторе, то мы тут ограничены и можем задать жестко кол-во баров на повышении или понижении.

Пример:

HA-01.png
3 бара синих - Long
HA-01.png (26.18 КБ) 21467 просмотров

HA-02.png
3 бара пурпурных - Short
HA-02.png (35.08 КБ) 21467 просмотров

HA-03.png
Результат
HA-03.png (37.19 КБ) 21467 просмотров

Re: Парсинг данных с графика

Добавлено: 04 май 2018, 07:21
evge
Но лучше конечно через код, т.к. будет больше гибкости.
Например, можно будет задать кол-во баров на повышение и\или понижении.

Пример с возможностью задать кол-во баров повышения \ понижения по индикатору HeikenAshi:

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

/**

**/
function Initialize()
{
   StrategyName = "HA";
   AddParameter("Bars", 5, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 5;
   ShortLimit = -5;
   AddChartIndicator("MY.HeikenAshi", new Dictionary <string, double>{});
}

function OnUpdate()
{

   var H = MY.HeikenAshi(Input1);
   var HO = H["Open"];
   var HC = H["Close"];

   bool isLong = true, isShort = true;
   
   for (int x = 0; x <= Bars; x++)
   {
      if (HO[x] > HC[x]) isLong = false;
      if (HO[x] < HC[x]) isShort = false;
      if (!isLong && !isShort) break;
   }
   
   if ( isLong )
   {
      EnterLong();
   }

   if ( isShort )
   {
      EnterShort();
   }
}


HA-04.png
HA-04.png (37.42 КБ) 21465 просмотров

Re: Парсинг данных с графика

Добавлено: 07 май 2018, 20:49
ilya0610
О можно пояснить, почему берется цена открытия по HeikenAshi > цены закрытия по индикатору HeikenAshi
Можно где-то почитать по принцип построения стратегий по индикаторов в конструкторе?

Re: Парсинг данных с графика

Добавлено: 07 май 2018, 21:03
evge
Данный пользовательский индикатор возвращает 4 ряда

Open, High, Low, Close

Проверка простая, если цена открытия "Open" меньше "Close" значит бар растущий (синий цвет).

И наоборот "Close" меньше "Open" цена падает (пурпурный цвет)

Задав смещение каждой из проверок мы смотрим на текущий (смещение 0), предыдущий (смещение 1) и 2 бара назад (смещение 2).

Проводятся вебинары по роботам и есть документация и видео обучение на оф. сайте http://alfadirect.ru в разделе "Обучение"

+ записи вебинаров здесь на форуме. Ищите там вебинары "Быстрый старт" и "Создай своего робота".

Re: Парсинг данных с графика

Добавлено: 17 май 2018, 20:03
ilya0610

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

/**

**/

function Initialize()
{
   StrategyName = "HeikenAshi";
   AddParameter("Bars_Blue", 3, "", 1);
   AddParameter("Bars_Magenta", 2, "", 1);
   AddParameter("delta_short", 2, "", 1);
   AddParameter("delta_long", 2, "", 1);

   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 5;
   ShortLimit = -5;
   AddChartIndicator("MY.HeikenAshi", new Dictionary <string, double>{});
}

function OnUpdate()
{

   var H = MY.HeikenAshi(Input1);
   var HO = H["Open"];
   var HC = H["Close"];
   int x = 0, y = 0;
   bool isLong = true, isShort = true;
   
   while( x != Bars_Blue)
   {
      if (HO[x] > HC[x]) isLong = false;
      if (!isLong) break;
      x++; 
   }
    while( y != Bars_Magenta)
   {
      if (HO[y] < HC[y]) isShort = false;
      if (!isShort) break;
      y++; 
   }
   if ( isLong )
   {
      EnterLong();
     StopLoss(delta_long, SignalPriceType.DeltaInPercentFromAveragePrice);
   }

   if ( isShort )
   {
      EnterShort();
     StopLoss(delta_short, SignalPriceType.DeltaInPercentFromAveragePrice);
   }

}


Просьба пояснить, как правильно поставить стоп-лосс, когда откроется позиция шорт, и соответственно наоборот.
По коду видно куда я их расставил, правильно ли я то сделал и что еще не хватает

Re: Парсинг данных с графика

Добавлено: 17 май 2018, 21:32
evge
Что-то не работает?

Если говорить о стопе, то тут всё ок.

После открытия позиции ставим стоп.

Т.е. сначала уйдёт лимитная заявка на открытие лонг или шорт, как (если) она исполнится выставится стоп заявка.

Порядок правильный.

Re: Парсинг данных с графика

Добавлено: 20 май 2018, 10:51
ilya0610
А не надо ли его отменять, если он не сработал? Он пропадёт, когда откроется другпя заявка и новый стоп?
CanselStoploss() не нужно использовать?

Re: Парсинг данных с графика

Добавлено: 21 май 2018, 07:56
evge
Не надо.
При открытии новой позиции стоп отменится. Если позиция увеличится, то прежний стоп останется и его надо при необходимости перевыставить. Если же позиция будет закрыта частично, то стоп снимается весь и надо выставлять новый. Есть и баги в этом плане в АД4, если позицию закрыли частично лимитной заявкой CloseLongLimit(), CloseShortLimit() то стоп почему-то не снимается и будет висеть на ранее выставленную позицию, и в этом случае можно стопом получить переворот в другую сторону - это баг. Последнее утверждение я не проверял на последних версиях, но пару версий назад точно такое было. Надо проверять.

Если необходимо будет переставить стоп или вообще отменить, тогда надо делать CancelStopLoss() перед StopLoss().

из документации:

CancelStopLoss() – отменить (снять) стоп¬ заявку, выставленную для защиты текущей позиции робота. Функция используется для отмены или редактирования положения текущего стопа. Повторный вызов функции выставления стопа не снимает старый и не выставляет новый стоп. Поэтому необходимо использовать данную функцию для отмены ранее выставленной заявки.

Особенности использования стопов:
1) Стоп выставляется один раз к открытой позиции, повторный вызов функции установки стопа без изменения позиции не приводит к его изменению.
2) Для изменения параметра стопа необходимо предварительно использовать функцию CancelStopLoss()
3) Срок хранения стоп заявок 30 дней