RSI.IsFormed команда IsFormed не работает в индикаторе RSI== помогите~/topic/3239/rsi_isformed-komanda-isformed-ne-rabotaet-v-indikatore-rsi-pomogite/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-28T22:04:57Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/posts/m/24020/Исправлено в последней версии на кодепдексе.2013-02-14T07:36:54Z2013-02-14T07:36:54Zesperhttps://stocksharp.ru/users/5990/info@stocksharp.ruИсправлено в последней версии на кодепдексе.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/23988/я на 4.1.7 сижу. Не за что.2013-02-13T04:38:02Z2013-02-13T04:38:36ZИван З.https://stocksharp.ru/users/6502/info@stocksharp.ruя на 4.1.7 сижу.<br />Не за что.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/23987/Версия библиотеки какая? Иван З., спасибо за пример, багу подтверждаю.2013-02-13T04:25:02Z2013-02-13T04:36:11Zesperhttps://stocksharp.ru/users/5990/info@stocksharp.ruВерсия библиотеки какая?<br /><br /><b>Иван З.</b>, спасибо за пример, багу подтверждаю.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/23986/создал индикатор private RelativeStrengthIndex RSI = new RelativeStrengthIndex() { Length=10}; подпи...2013-02-13T04:12:37Z2013-02-13T04:12:37ZИван З.https://stocksharp.ru/users/6502/info@stocksharp.ruсоздал индикатор<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
private RelativeStrengthIndex RSI = new RelativeStrengthIndex() { Length=10};</pre>
</div></div><br /><br />подписываюсь на свечки<br /><br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
private void Chart_Click(object sender, RoutedEventArgs e)
{
//добавляем источник информации трейдера
_trader = new QuikTrader();
InitChart();
_candleManager = new CandleManager();
var startTime = new DateTime(2012, 1, 1);
var endTime = new DateTime(2012, 1, 5);
// Добавление в источник свечек TimeFrameCandleBuilder источник данных в виде файлов гидры
var storageRegistry = new StorageRegistry();
((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = PathStorage;
var stor = new StorageCandleSource { StorageRegistry = storageRegistry };
_series = new CandleSeries(typeof(TimeFrameCandle), SelectedSecurity,
TimeSpan.FromMinutes(SelectedTimeFrame));
_candleManager.Sources.Add(stor);
_candleManager.Container.CandlesKeepTime = TimeSpan.FromDays(2);
_candleManager.Processing += Draw;
_candleManager.Start(_series, startTime, endTime);
}</pre>
</div></div><br />через отладку смотрю значения<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
private void Draw(CandleSeries series, Candle candle)
{
var ggg = RSI.Process(candle.ClosePrice);
var fff = RSI.GetCurrentValue();
}</pre>
</div></div><br />И ggg и fff равны 100<br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/23985/Давайте пока не трогать код индикатора, просто покажите как вы его используете.2013-02-13T03:42:48Z2013-02-13T03:42:48Zesperhttps://stocksharp.ru/users/5990/info@stocksharp.ruДавайте пока не трогать код индикатора, просто покажите как вы его используете.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/23982/Здравствуйте. Проверил RSI, действительно не работает. Стал разбираться в чем дело. RSI в себе испол...2013-02-13T02:38:14Z2013-02-13T02:47:38ZИван З.https://stocksharp.ru/users/6502/info@stocksharp.ruЗдравствуйте. Проверил RSI, действительно не работает. Стал разбираться в чем дело. RSI в себе использует индикатор SmoothedMovingAverage. Взял коды двух индикаторов. И получилось следующее.<br /><br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
using StockSharp.Algo.Indicators;
namespace WpfApplication1
{
using System.ComponentModel;
using System.Linq;
/// <summary>
/// Сглаженное скользящее среднее.
/// </summary>
[DisplayName("SMMA")]
[Description("Сглаженное скользящее среднее.")]
public class SmoothedMovingAverage : LengthIndicator<decimal>
{
/// <summary>
/// Создать <see cref="SmoothedMovingAverage"/>.
/// </summary>
public SmoothedMovingAverage()
: base(typeof(decimal))
{
}
/// <summary>
/// Обработать входное значение.
/// </summary>
/// <param name="input">Входное значение.</param>
/// <returns>Результирующее значение.</returns>
protected override decimal OnProcess(IIndicatorValue input)
{
var newValue = input.GetValue<decimal>();
if (input.IsFinal)
Buffer.Add(newValue);
if (!IsFormed)
return this.GetCurrentValue();
if (Buffer.Count == Length)
{
return Buffer.Sum() / Length;
}
else
{
if (input.IsFinal)
Buffer.RemoveAt(0);
return (this.GetCurrentValue() * (Length - 1) + newValue) / Length;
}
}
}
/// <summary>
/// Индекс относительной силы.
/// </summary>
[DisplayName("RSI")]
[Description("Индекс относительной силы.")]
public class RelativeStrengthIndex : LengthIndicator<decimal>
{
private readonly SmoothedMovingAverage _gain;
private readonly SmoothedMovingAverage _loss;
private bool _isInitialized;
private decimal _last;
/// <summary>
/// Создать <see cref="RelativeStrengthIndex"/>.
/// </summary>
public RelativeStrengthIndex()
: base(typeof(decimal))
{
_gain = new SmoothedMovingAverage();
_loss = new SmoothedMovingAverage();
}
/// <summary>
/// Сформирован ли индикатор.
/// </summary>
public override bool IsFormed { get { return _gain.IsFormed; } }
/// <summary>
/// Длина периода.
/// </summary>
public override int Length
{
get
{
return _gain.Length;
}
set
{
_loss.Length = _gain.Length = value;
Reset();
}
}
/// <summary>
/// Обработать входное значение.
/// </summary>
/// <param name="input">Входное значение.</param>
/// <returns>Результирующее значение.</returns>
protected override decimal OnProcess(IIndicatorValue input)
{
var value = input.GetValue<decimal>();
if (!_isInitialized)
{
_last = value;
_isInitialized = true;
return this.GetCurrentValue();
}
var delta = value - _last;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Для проверки ввел следующие 4 строки, на работу индикатора они ни как не влияют, их можно удалить
var g = input.SetValue(delta > 0 ? delta : 0m); // После изменения входное значения индикатора, у g значения индикатора g свойство IsFinal=false
var l = input.SetValue(delta > 0 ? 0m : -delta); // После изменения значения индикатора, у l значения индикатора g свойство IsFinal=false
var gg = _gain.Process(g);//SmoothedMovingAverage проверяет свойство IsFinal и при false считается несформированным и выдает последнее значение которое = 100
var ll = _loss.Process(l);//SmoothedMovingAverage проверяет свойство IsFinal и при false считается несформированным и выдает последнее значение которое = 100
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Поможет следующее действие
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Это мы закоментируем до лучших времен
//var gainValue = _gain.Process(input.SetValue(delta > 0 ? delta : 0m)).GetValue<decimal>();
//var lossValue = _loss.Process(input.SetValue(delta > 0 ? 0m : -delta)).GetValue<decimal>();
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Честно говоря, не вижу смысла изменять входное значение индикатора(если я не прав прошу поправить и объяснить почему? Здесь так мало что-то кому-то объясняют, до всего самому доходить приходиться.), так как SmoothedMovingAverage принимает на вход decimal то
// input.SetValue(delta > 0 ? delta : 0m) можно заменить на delta > 0 ? delta : 0m И все, код работает
var gainValue = _gain.Process(delta > 0 ? delta : 0m).GetValue<decimal>();
var lossValue = _loss.Process(delta > 0 ? 0m : -delta).GetValue<decimal>();
_last = value;
if (lossValue == 0)
{
return 100m;
}
else if (gainValue / lossValue == 1)
{
return 0m;
}
else
{
return 100m - 100m / (1m + gainValue / lossValue);
}
}
}
}
</pre>
</div></div><br /><br />Проблема возникает из-за того, что input.SetValue(delta > 0 ? 0m : -delta) выдает значение со свойством IsFinal=false, SmoothedMovingAverage проверяет свойство IsFinal и при false считается не сформированным и выдает последнее значение которое = 100. В коде я написал как привести индикатор в рабочее состояния, по крайней мере у меня он работает.[blush] <br /><br />Остается вопрос input.SetValue() должно выдавать значение со свойством IsFinal=false?<br /><br />p.s. Когда проверять будете длину индикатора RSI поставте. Значение по умолчанию 100 и 0 выдает. Хотя бы так<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:csharp">
private RelativeStrengthIndex RSI = new RelativeStrengthIndex() { Length=10};</pre>
</div></div>Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/23979/В проекте с индикаторами есть набор тестов для большинства индикаторов, в том числе для RSI. Т.к. ин...2013-02-12T18:39:34Z2013-02-12T18:39:34ZKefirhttps://stocksharp.ru/users/6033/info@stocksharp.ru<div class="quote"><span class="quotetitle">esper <a href="https://stocksharp.ru/posts/m/23952/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">В проекте с индикаторами есть набор тестов для большинства индикаторов, в том числе для RSI. Т.к. индикатор RSI свой тест проходит без ошибок, то он должен рассчитывать свои значения верно и ошибка, скорее всего, где-то у вас, что и было написано в предыдущем сообщении.<br />Т.к. вы не показали никакого кода, как вы работаете с индикатором, то и сказать что-то еще нет возможности.</div></div><br /><br />То же столкнулся с той же проблемой значение RSI постоянно равно 100<br /><br />в классе RelativeStrengthIndex<br /><br />var gainValue = _gain.Process(input.SetValue(delta > 0 ? delta : 0m)).GetValue<decimal>();<br />var lossValue = _loss.Process(input.SetValue(delta > 0 ? 0m : -delta)).GetValue<decimal>();<br /><br />gainValue и lossValue постоянно равны нулю и соответственно<br /><br />if (lossValue == 0)<br />{<br /> return 100m;<br />}<br /><br />всегда возвращает 100<br /><br />не очень силен в программировании может что то не то подаю на вход?<br /><br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/23952/В проекте с индикаторами есть набор тестов для большинства индикаторов, в том числе для RSI. Т.к. ин...2013-02-12T05:39:02Z2013-02-12T05:39:02Zesperhttps://stocksharp.ru/users/5990/info@stocksharp.ruВ проекте с индикаторами есть набор тестов для большинства индикаторов, в том числе для RSI. Т.к. индикатор RSI свой тест проходит без ошибок, то он должен рассчитывать свои значения верно и ошибка, скорее всего, где-то у вас, что и было написано в предыдущем сообщении.<br />Т.к. вы не показали никакого кода, как вы работаете с индикатором, то и сказать что-то еще нет возможности.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/23945/Что-то у вас не так. Rsi из последней версии на кодеплексе проходит тест. Было написано так в ответе...2013-02-11T18:15:13Z2013-02-11T18:15:13Zkapustin-vladimirhttps://stocksharp.ru/users/227/info@stocksharp.ruЧто-то у вас не так. Rsi из последней версии на кодеплексе проходит тест. Было написано так в ответе и воз ныне там, скажите что происходит. больше ответов не было, закончились ли тесты???Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/23004/Что-то у вас не так. Rsi из последней версии на кодеплексе проходит тест.2012-12-17T15:27:29Z2012-12-17T15:27:29Zesperhttps://stocksharp.ru/users/5990/info@stocksharp.ruЧто-то у вас не так. Rsi из последней версии на кодеплексе проходит тест.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/23003/выводил для проверки "LongSma.GetCurrentValue()", LongSma.GetCurrentValue(), "RSI", RSI.GetCurrentVa...2012-12-17T14:23:12Z2012-12-17T14:23:12Zkapustin-vladimirhttps://stocksharp.ru/users/227/info@stocksharp.ruвыводил для проверки <br />"LongSma.GetCurrentValue()", LongSma.GetCurrentValue(), "RSI", RSI.GetCurrentValue()<br />LongSma.GetCurrentValue(), 10336.05, RSI, 100, SMAStrategy<br />LongSma.GetCurrentValue(), 11491.05, RSI, 100, SMAStrategy<br />LongSma.GetCurrentValue(), 12646.05, RSI, 100, SMAStrategy<br />RSI выводи все время 100 без измененийCopyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/22957/А значения вычисляются?2012-12-14T15:27:01Z2012-12-14T15:27:01Zesperhttps://stocksharp.ru/users/5990/info@stocksharp.ruА значения вычисляются?Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/22956/RSI.IsFormed команда IsFormed не работает в индикаторе RSI== помогите.. показывает все время false2012-12-14T14:31:31Z2012-12-14T14:31:31Zkapustin-vladimirhttps://stocksharp.ru/users/227/info@stocksharp.ruRSI.IsFormed команда IsFormed не работает в индикаторе RSI== помогите.. показывает все время falseCopyright @ StockSharp Platform LLC 2010 - 2024