maze9a
|
Дата: 09.06.2011
Maxim:
Взял себе:
VHF
VMA
WilliamsR
Volatility
UltimateOsc
Vidya
Если кто то уже их делает, прошу сообщить.
Maxim что вы понимаете под Volatility? Я уже делаю HV (Historical Volatility of the selected Price Series) если это оно то уже занято.
|
|
|
|
Спасибо:
|
|
|
|
|
|
InsiderHSE
|
Дата: 09.06.2011
Прошу включить меня в проект, ник InsiderHSE.
И если не сложно, вкратце объяснить чем и как пользоваться для совместного редактирования проекта, у меня в этом никакого опыта нет.
Сделал индикаторы, касающиеся линейной регрессии - LinearReg, LinearRegSlope, RSquared и StdError. Не знаю как залить...
|
|
|
|
Спасибо:
|
|
|
|
|
|
Maxim
|
Дата: 09.06.2011
|
|
|
|
Спасибо:
|
|
|
|
|
|
artemox
|
Дата: 09.06.2011
maze9a:
Формат можно сделать любой, а вот данные думаю будут разные, но сильно они отличаться не должны иначе это будет просто смешно.
На самом деле я бы очень не хотел разные расчеты на истории и в реале.
Поэтому для неоднозначных индикаторов можно сделать режимы расчета, напр: AmiBrokerMode, WealthLabMode ...
Оффтоп, а я так понимаю, что большинство на ВЛ тестит историю?
|
|
|
|
Спасибо:
|
|
|
|
|
|
Maxim
|
Дата: 09.06.2011
Из форума не совсем понял, кто делал EMA.
Мне кажется в реализации есть ошибка.
public override void Add(decimal newValue)
{
Buffer.Add(newValue);
if (Buffer.Count < Length)
return;
if (Buffer.Count == Length)
{
base.Value = Buffer.Sum() / Length;
}
else
{
base.Value = (newValue - base.Value) * _multiplier + base.Value;
Buffer.RemoveAt(0);
}
base.RaiseChangedEvent();
}
При последовательном вызове Add с определенного момента значение Value будет равно (Buffer.Sum() / Length),
потом ((newValue - base.Value) * _multiplier + base.Value),
потом опять (Buffer.Sum() / Length),
и так далее поочередно.
Вот такой вариант будет более верным:
if (Buffer.Count > Length - 1)
{
Value = (newValue - Value) * multiplier + Value;
}
else if (Buffer.Count < Length - 1)
{
Buffer.Add(newValue);
return;
}
else
{
Buffer.Add(newValue);
Value = Buffer.Sum() / Length;
}
|
|
|
|
Спасибо:
|
|
|
|
|
|
Maxim
|
Дата: 09.06.2011
1)Хотелось бы определится, в каком случае вызывается Changed?
а) Когда отработал метод Add? Если да, то некоторые индикаторы не соответсвуют этому критерию.
б) Или когда значение Value изменилось? Если да, то аналогично многие индикаторы не соответсвуют критерию.
Так как нет проверки, что новое значение Value не равно старому значению.
в) Вызывается ли это событие, если IsFormed false?
- Какое значение Value, пока IsFormed равно false?
|
|
|
|
Спасибо:
|
|
|
|
|
|
esper
|
Дата: 09.06.2011
maze9a:
Понятно, а насколько большее расхождение получается с данными из Велса? У меня например так и не получилось посчитать значения для ADX точно такие же как в Велсе, расхождение порядка 1.5. И еще, многие индикаторы строятся с использованием других индикаторов, поэтому вопрос тестирования того, что мы написали, мне кажется важный и идея использовать тестовые файлы мне нравится.
Конкретные цифры я сказать не могу, надо тесты писать, если примерно, то для сбера (значение цены в районе 100 рублей) где-то сотые отличаются, иногда десятые, но общая направленность индикатора совпадает
|
|
|
|
Спасибо:
|
|
|
|
|
|
Mikhail Sukhov
|
Дата: 09.06.2011
|
|
|
|
Спасибо:
|
|
|
|
|
|
esper
|
Дата: 09.06.2011
Maxim:
Из форума не совсем понял, кто делал EMA.
Мне кажется в реализации есть ошибка.
public override void Add(decimal newValue)
{
Buffer.Add(newValue);
if (Buffer.Count < Length)
return;
if (Buffer.Count == Length)
{
base.Value = Buffer.Sum() / Length;
}
else
{
base.Value = (newValue - base.Value) * _multiplier + base.Value;
Buffer.RemoveAt(0);
}
base.RaiseChangedEvent();
}
>
> При последовательном вызове Add с определенного момента значение Value будет равно (Buffer.Sum() / Length),
> потом ((newValue - base.Value) * _multiplier + base.Value),
> потом опять (Buffer.Sum() / Length),
> и так далее поочередно.
Да вроде верно все, когда достигли макс. размер буфера первый раз, сработает условие
if (Buffer.Count == Length)
в следующий раз добавится новый элемент и размер списка будет Length+1 и попадем в блок *else*
|
|
|
|
Спасибо:
|
|
|
|
|
|
esper
|
Дата: 09.06.2011
Maxim:
1)Хотелось бы определится, в каком случае вызывается Changed?
а) Когда отработал метод Add? Если да, то некоторые индикаторы не соответсвуют этому критерию.
б) Или когда значение Value изменилось? Если да, то аналогично многие индикаторы не соответсвуют критерию.
Так как нет проверки, что новое значение Value не равно старому значению.
в) Вызывается ли это событие, если IsFormed false?
- Какое значение Value, пока IsFormed равно false?
Тут ранее поступало предложение
maze9a:
В моей реализации значение индикатора равно нулю до тех пор пока он полностью не сформирован (в велсе индикатор расчитывается таким же образом), поэтому нет смысла рисовать кривую пока она не сформированна. Если вызывать событие Changed до того как индикатор сформировался то скорей всего некоторым подписчикам придется проверять IsFormed, а это мне кажется лишнее.
|
|
|
|
Спасибо:
|
|
|
|
|