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

DeltaCumPeriod - кумулятивная Дельта за период

Добавлено: 11 май 2016, 19:26
evge
Индикатор кумулятивная Дельта за период рассчитывается как сумма разниц объемов сделок, совершенных по Bid и Ask и показывает агрессивность покупателей или продавцов. Отличие от индикатора кумулятивная дельта за день (DeltaCumOfDay) в том, что в индикаторе DeltaCumPeriod задается параметр периода расчета. В обычной ситуации при падении рынка больше агрессивных продавцов, а при росте – покупателей.

Delta > 0 больше агрессивных покупателей (зеленый цвет)
Delta < 0 больше агрессивных покупателей (красный цвет)

Параметры

Period - период, количество баров

Сигналы

Индикатор является вспомогательным. Обращать внимание на переходы через 0 и статистически большие значения при боковом движении.

Автор

AlfaDirect 2016. OX

Пример:

DeltaCumPeriod-01.png
DeltaCumPeriod-01.png (38.4 КБ) 31456 просмотров


Исходный текст:

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

function Initialize()
{
IndicatorName = "DeltaCumPeriod";
AddInput("Input", Inputs.Candle);
PriceStudy = false;
AddParameter("Period", 100, 1);
AddSeries("DeltaCum", DrawAs.Custom, Color.Gray);
AddSeries("DeltaOpen", DrawAs.Custom, Color.Gray);
AddGlobalVariable("s", Types.DoubleList);
AddLevel(0, Color.Gray, "DeltaCum");
}

function Evaluate()
{
// AlfaDirect 2016. OX
// Кумулятивная Дельта за период
// Добавляем новую дельту в лист
var Delta = Input.VolumeAsk[0] - Input.VolumeBid[0];
s.Add(Delta);
// Если точек больше периода убираем первую дельту из листа
if ( CurrentIndex >= Period )
s.RemoveAt(0);
// Считаем сумму
DeltaCum = s.Sum();

// Рисование
if ( CurrentIndex > 0 )
{
DeltaOpen = DeltaCum[-1];
if ( DeltaCum > DeltaCum[-1] )
DeltaCum.DrawHistogram(DeltaOpen, Color.Green, Line.Solid, 1, Color.Green, 50);
else
DeltaCum.DrawHistogram(DeltaOpen, Color.Red, Line.Solid, 1, Color.Red, 50);
}

}


Скачать индикатор

DeltaCumPeriod.zip
(1.04 КБ) 1875 скачиваний

Re: DeltaCumPeriod - кумулятивная Дельта за период

Добавлено: 31 янв 2017, 22:26
JASON
Добрый день.
Не могли бы прописать построение средней (ЕМА или СМА-не важно) для DeltaCumPeriod?
Через функцию вызова средней для построения не получается.
Спасибо

Re: DeltaCumPeriod - кумулятивная Дельта за период

Добавлено: 01 фев 2017, 07:24
evge
Почему не получается?

Ничего дописывать не нужно, это умеет сам АД4.
Построение индикатора от серий другого индикатора.

Пример:

DelataCumPeriod-EMA-01.png
DelataCumPeriod-EMA-01.png (27.51 КБ) 30864 просмотра

DelataCumPeriod-EMA-02.png
DelataCumPeriod-EMA-02.png (27.58 КБ) 30864 просмотра

Re: DeltaCumPeriod - кумулятивная Дельта за период

Добавлено: 01 фев 2017, 07:49
evge
Дописывать понадобится только если Вы решили на основе этой MA строить мех. стратегию \ робота.

Re: DeltaCumPeriod - кумулятивная Дельта за период

Добавлено: 01 фев 2017, 12:30
JASON
Да с построением в АД4 и наложением индикатора на индикатор разобрался.
Хотел скрипт средней как подтверждающий сигнал для стратегии.

Re: DeltaCumPeriod - кумулятивная Дельта за период

Добавлено: 01 фев 2017, 13:58
evge
JASON писал(а):Да с построением в АД4 и наложением индикатора на индикатор разобрался.
Хотел скрипт средней как подтверждающий сигнал для стратегии.


вот DeltaCumPeriod с SMA

DelataCumPeriod-SMA-01.png
DelataCumPeriod-SMA-01.png (26.86 КБ) 30844 просмотра


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

function Initialize()
{
IndicatorName = "DeltaCumPeriodSMA";
AddInput("Input", Inputs.Candle);
PriceStudy = false;
AddParameter("Period", 100, 1);
AddParameter("PeriodMA", 20, 1);
AddSeries("DeltaCum", DrawAs.Custom, Color.Gray);
AddSeries("DeltaOpen", DrawAs.Custom, Color.Gray);
AddSeries("MA", DrawAs.Line, Color.Blue);
AddGlobalVariable("s", Types.DoubleList);
AddGlobalVariable("SUM", Types.Double, 0.0);         
AddLevel(0, Color.Gray, "DeltaCum");
}

function Evaluate()
{
// AlfaDirect 2016. OX
// Кумулятивная Дельта за период

// evge 01.02.2017 http://alfadirect4.ru
// добавлена SMA

// Добавляем новую дельту в лист
var Delta = Input.VolumeAsk[0] - Input.VolumeBid[0];
s.Add(Delta);

// Если точек больше периода убираем первую дельту из листа
if ( CurrentIndex >= Period )
s.RemoveAt(0);

// Считаем сумму
DeltaCum = s.Sum();

// Рисование
if ( CurrentIndex > 0 )
{
DeltaOpen = DeltaCum[-1];
if ( DeltaCum > DeltaCum[-1] )
DeltaCum.DrawHistogram(DeltaOpen, Color.Green, Line.Solid, 1, Color.Green, 50);
else
DeltaCum.DrawHistogram(DeltaOpen, Color.Red, Line.Solid, 1, Color.Red, 50);

if ( CurrentIndex < PeriodMA )
{
   SUM = SUM + DeltaCum[0];     
   MA = SUM / (CurrentIndex + 1);     
}
else
{
   SUM = SUM + DeltaCum[0] - DeltaCum[(int)PeriodMA] ;     
   MA = SUM / PeriodMA;   
}

} //CI > 0

}

Re: DeltaCumPeriod - кумулятивная Дельта за период

Добавлено: 01 фев 2017, 14:36
JASON
Большое спасибо!

Re: DeltaCumPeriod - кумулятивная Дельта за период

Добавлено: 01 фев 2017, 18:30
JASON
Еще вопрос:
возможно ли , чтобы по стратегии (роботу) сигнал генерировался на одном инструменте, а исполнение шло по другому или сразу по нескольким, в том числе сделки разной направленности?

Re: DeltaCumPeriod - кумулятивная Дельта за период

Добавлено: 01 фев 2017, 18:32
evge
JASON писал(а):Еще вопрос:
возможно ли , чтобы по стратегии (роботу) сигнал генерировался на одном инструменте, а исполнение шло по другому или сразу по нескольким, в том числе сделки разной направленности?


На сегодня нет, разве что "обходными маневрами".
Например сохраняя команды в файл в одном роботе и читая их в другом исполняя.
Возможно в будущем АД4 доработают, зачатки там есть (неработающие) про множественные входные ряды.

Re: DeltaCumPeriod - кумулятивная Дельта за период

Добавлено: 01 фев 2017, 18:39
JASON
Эх, жаль.