Страница 1 из 4
PriceChannel – ценовой канал или Канал Дончяна
Добавлено: 07 фев 2016, 12:39
evge
Ценовой канал – это индикатор показывающий максимум и минимум за последний интервал изменения цен заданной длительности.
Индикатор имеет 2 выходных ряда High и Low. Для их вычисления используются следующие формулы:
Hight = max(Ht, Ht-1, …, Ht-n+1 ),
Lowt = max(Lt, Lt-1, …, Lt-n+1 ).
Типовые параметрыЗначение периода усреднения выбирается n = 20 для дневного тайм-фрейма.
Автор: Ричард Дончян (Richard Donchian).
Первоисточник: Википедия. (
http://ru.wikipedia.org/wiki/Канал_Дончяна)
Пример:

- PriceChannel-00.png (25.84 КБ) 61771 просмотр
Исходный текст:Код: Выделить всё
function Initialize()
{
// Определение параметров индикатора
IndicatorName = "PriceChannel4";
AddInput("Input", Inputs.Candle);
AddParameter("Period", 50, 1);
PriceStudy = true;
AddSeries("Upper", DrawAs.Line, Color.Blue);
AddSeries("Lower", DrawAs.Line, Color.Red);
AddGlobalVariable("Uppers", Types.DoubleList);
AddGlobalVariable("Lowers", Types.DoubleList);
}
function Evaluate()
{
// AlfaDirect. 2015.
// Верхняя линия "Upper" - максимальная цена за Period
// Нижняя линия "Lower" - минимальная цена за Period
var high = Input.High[0];
var low = Input.Low[0];
Uppers.Add(high);
Lowers.Add(low);
if ( CurrentIndex > Period )
{
Uppers.RemoveAt(0);
for (var i = 0; i < Uppers.Count-1; i++)
high = Math.Max(Uppers[i], high);
Lowers.RemoveAt(0);
for (var i = 0; i < Lowers.Count-1; i++)
low = Math.Min(Lowers[i], low);
}
Upper = high;
Lower = low;
}
Re: PriceChannel – ценовой канал или Канал Дончяна
Добавлено: 11 мар 2016, 21:13
keeper
Доработал индикатор на два периода. Т.к. по идее открытие позиции идёт по первому большему периоду (20 например), а закрытие по меньшему (10 к примеру).
Re: PriceChannel – ценовой канал или Канал Дончяна
Добавлено: 01 мар 2019, 19:18
Владимир
Добрый день! На одном курсе вебинаров Станислава Шмелёва-Агинского рассказывалось как этот индикатор можно использовать для выявления боковика и начала трендового движения, только для этого надо сместить сам канал построения линий на несколько баров (4-5 баров). Тогда в случаи проития канала означало бы возможность появления (развития) тренда. В коде добавил смещение переменная "Bias".
Код: Выделить всё
function Initialize()
{
// Определение параметров индикатора
IndicatorName = "PriceChannel";
AddInput("Input", Inputs.Candle);
AddParameter("Period", 50, 1);
AddParameter("Bias", 4);
PriceStudy = true;
AddSeries("Upper", DrawAs.Line, Color.Blue);
AddSeries("Lower", DrawAs.Line, Color.Red);
}
function Evaluate()
{
// AlfaDirect. 2016. OX
// Верхняя линия "Upper" - максимальная цена за Period
// Нижняя линия "Lower" - минимальная цена за Period
var high = Input.High[Bias];
var low = Input.Low[Bias];
if ( CurrentIndex >= Period )
{
int i = 0;
for (i = 1; i < Period; i++)
high = Math.Max(Input.High[i+Bias], high);
for (i = 1; i < Period; i++)
low = Math.Min(Input.Low[i+Bias], low);
}
Upper = high;
Lower = low;
}
Re: PriceChannel – ценовой канал или Канал Дончяна
Добавлено: 18 апр 2019, 19:21
Orange2000
Евгений здравствуйте!, можете подсказать?. Хочу сделать систему на основе канала дончииана.
Только там надо проверять условие внутри бара:
лонг=high>upperline
шорт=low<lowerline
вроде я где то встречал упоминание , что можно иметь 1 сигнал внутри бара?
спасибо
Re: PriceChannel – ценовой канал или Канал Дончяна
Добавлено: 18 апр 2019, 19:30
evge
UseClosedBar – настройка, позволяющая вызывать код метода OnUpdate() внутри бара (по приходу новых сделок). Если в коде указано
UseClosedBar = false, то вызов метода будет происходить внутри бара не чаще чем один раз в
LiveBarTimeout секунд.
Тестирование стратегии с
UseClosedBar = false невозможно. Предварительно оценить ее эффективность можно в режиме робота-советника.
Пример.
Код: Выделить всё
UseClosedBar = false;
LiveBarTimeout = 10; // Вызывать не чаще чем раз в 10 секунд
Re: PriceChannel – ценовой канал или Канал Дончяна
Добавлено: 18 апр 2019, 20:45
Orange2000
благодарю за пояснение. А если вызывать каждую секунду., сильно будет грузить систему? и к слову таких роботов будет несколько.
и я так понимаю выше указанный код надо поместить в инициализацию?
и как грамотно добавить в индикатор линию middle=(upper+lower)/2
что бы потом к ней обращаться
Re: PriceChannel – ценовой канал или Канал Дончяна
Добавлено: 18 апр 2019, 21:15
Orange2000
так правильно?
Код: Выделить всё
function Initialize()
{
// Определение параметров индикатора
IndicatorName = "don";
AddInput("Input", Inputs.Candle);
AddParameter("Period", 50, 1);
PriceStudy = true;
AddSeries("Upper", DrawAs.Line, Color.Blue);
AddSeries("Lower", DrawAs.Line, Color.Red);
AddSeries("Midl", DrawAs.Line, Color.Green);
AddGlobalVariable("Uppers", Types.DoubleList);
AddGlobalVariable("Lowers", Types.DoubleList);
AddGlobalVariable("Midls", Types.DoubleList);
}
function Evaluate()
{
// AlfaDirect. 2015.
// Верхняя линия "Upper" - максимальная цена за Period
// Нижняя линия "Lower" - минимальная цена за Period
var high = Input.High[0];
var low = Input.Low[0];
Uppers.Add(high);
Lowers.Add(low);
if ( CurrentIndex > Period )
{
Uppers.RemoveAt(0);
for (var i = 0; i < Uppers.Count-1; i++)
high = Math.Max(Uppers[i], high);
Lowers.RemoveAt(0);
for (var i = 0; i < Lowers.Count-1; i++)
low = Math.Min(Lowers[i], low);
}
Upper = high;
Lower = low;
Midl = (high + low)/2;
}
Re: PriceChannel – ценовой канал или Канал Дончяна
Добавлено: 19 апр 2019, 07:36
evge
Нормально, но есть лишнее:
Код: Выделить всё
AddGlobalVariable("Midls", Types.DoubleList);
можно убрать
Re: PriceChannel – ценовой канал или Канал Дончяна
Добавлено: 22 апр 2019, 18:57
Orange2000
Евгений, нужен хелп.Вот что у меня получилось. Индикатор don как вверъу только со сдвигом на 1.
Код: Выделить всё
/**
**/
function Initialize()
{
StrategyName = "don1";
AddParameter("P1", 15, "", 1);
AddInput("Input1", Inputs.Candle, 10, true, "");
LongLimit = 0;
ShortLimit = 0;
UseClosedBar = false;
LiveBarTimeout = 1; // Вызывать не чаще чем раз в 10 секунд
}
function OnUpdate()
{
/// ПРАВИЛО 1
if ( (Input1.High > MY.don(Input1, P1).GetValue("Upper", 0)) )
{
EnterLong();
}
/// ПРАВИЛО 2
if ( (Input1.Low < MY.don(Input1, P1).GetValue("Midl", 0)) )
{
CloseLong();
}
/// ПРАВИЛО 3
if ( (Input1.Low < MY.don(Input1, P1).GetValue("Lower", 0)) )
{
EnterShort();
}
/// ПРАВИЛО 4
if ( (Input1.High > MY.don(Input1, P1).GetValue("Midl", 0)) )
{
CloseShort();
}
if ( ( RealizedPL() + CurrentPL() ) < -9000.0 )
{
Stop();
}
}
Робот не открывает лонг( Не пойму в чем ошибка.Около 17-00 должен ьыл купить. Чуть раньше закрыл шорт, но как-то не в момент пересечения, а на след баре...
Re: PriceChannel – ценовой канал или Канал Дончяна
Добавлено: 22 апр 2019, 18:59
Orange2000
вот картинка