Страница 1 из 1
Парсинг данных с графика
Добавлено: 03 май 2018, 21:34
ilya0610
Добрый день
Подскажите, как используя индикатор HeikenAshi, сделать следующее условие:
Открыть, либо закрыть позицию при появление некоторого n количества баров синего цвета
Re: Парсинг данных с графика
Добавлено: 04 май 2018, 07:10
evge
Если требуется в конструкторе, то мы тут ограничены и можем задать жестко кол-во баров на повышении или понижении.
Пример:
- 3 бара синих - Long
- HA-01.png (26.18 КБ) 21467 просмотров
- 3 бара пурпурных - Short
- HA-02.png (35.08 КБ) 21467 просмотров
- Результат
- 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 (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 дней