.NET 4.x Не удается применить индексирование через [] к int - C#
Формулировка задачи:
Добрый день!
Это индикатор (ТАС ATAS) - SMA, которая рассчитывается по ценам максимального объема в баре. Задача в том, чтобы передать определенное значение (int)candle.MaxVolumePriceInfo.Price для расчета. Выдает ошибку CS0021: Не удается применить индексирование через [] к int. Где косяк? Помогите, люди добрые, пожалуйста - никак не могу разобраться...
Вот код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Drawing;
using ATAS.Indicators;
namespace MeIndicatorSet
{
[DisplayName("New SMA")]
[Description("Пользовательская скользящая средняя")]
public class SMA : Indicator
{
#region Период
private int _period;
public int Period
{
get { return _period; }
set
{
_period = value;
RecalculateValues();
}
}
#endregion
public SMA()
{
Period = 10;
}
protected override void OnCalculate(int bar, decimal value)
{
var candle = GetCandle(bar);
var currentVol = (int)candle.MaxVolumePriceInfo.Price;
var start = Math.Max(0, bar - Period + 1);
var count = Math.Min(bar + 1, Period);
var sum = 0m;
for (var i = start; i < start + count; i++)
sum += (int)currentVol[i];// CS0021 - не могу понять, как обойти. C# это нечто ужасное...
this[bar] = sum / count;
}
}
}Решение задачи: «.NET 4.x Не удается применить индексирование через [] к int»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Drawing;
using ATAS.Indicators;
namespace CustomIndicatorSet
{
[DisplayName("POCSMA")]
[Description("Пользовательская скользящая средняя по ценам POC бара")]
public class SMA : Indicator
{
#region Период
private int _period;
public int Period
{
get { return _period; }
set
{
_period = value;
RecalculateValues();
}
}
#endregion
public SMA()
{
Period = 10;
}
protected override void OnCalculate(int bar, decimal value)
{
// Определяем ценовой уровень с максимальным объемом в баре
var candle = GetCandle(bar);
var currentVol = (int)candle.MaxVolumePriceInfo.Price;
// Организуем список и записываем в него полученное значение на последнее место
List<int> numbers = new List<int>();
numbers.Add(currentVol);
// Рассчитываем значения простой средней по нужным ценам, которые берем из списка
var start = Math.Max(0, bar - Period + 1);
var count = Math.Min(bar + 1, Period);
var sum = 0;
for (var i = start; i < start + count; i++)
sum += numbers[i];
this[bar] = sum / count;
}
}
}