Использование C# Это основной вопрос, который я уверен. Я получаю сообщение об ошибке .. «Имя« _stocks »не существует в текущем контексте». Я знаю, это потому, что я объявил словарь _stocks в методе Initialize. Это делает переменную _stocks локальной переменной и доступна только в методе Initialize. Мне нужно объявить переменную _stocks в качестве поля класса (поэтому к ней можно получить доступ любым методом класса). Другой метод, как вы увидите ниже, - OnBarUpdate(). Как я могу объявить переменную _stocks в качестве поля класса?объявить переменную как поле класса
public class MAcrossLong : Strategy
{
//Variables
private int variable1 = 0
private int variable2 = 0
public struct StockEntry
{
public string Name { get; set; }
public PeriodType Period { get; set; }
public int Value { get; set; }
public int Count { get; set; }
}
protected override void Initialize()
{
Dictionary<string, StockEntry> _stocks = new Dictionary<string, StockEntry>();
_stocks.Add("ABC", new StockEntry { Name = "ABC", Period = PeriodType.Minute, Value = 5, Count = 0 });
}
protected override void OnBarUpdate()
{
//_stocks dictionary is used within the code in this method. error is occurring within this method
}
}
* * Добавлена Порция ....
я, вероятно, следует просто разместить код в OnBarUpdate(), потому что я теперь получаю другие ошибки ... Лучший перегруженный метод подходит для 'System.Collections.Generic.Dictionary.this [string]' имеет некоторые недопустимые аргументы Аргумент '1': невозможно преобразовать из 'int' в 'string' Оператор '<' не может быть применен к операндам типа 'NinjaTrader.Strategy .MAcrossLong.StockEntry 'и' int '
protected override void OnBarUpdate()
{ //for loop to iterate each instrument through
for (int series = 0; series < 5; series++)
if (BarsInProgress == series)
{
var singleStockCount = _stocks[series];
bool enterTrade = false;
if (singleStockCount < 1)
{
enterTrade = true;
}
else
{
enterTrade = BarsSinceEntry(series, "", 0) > 2;
}
if (enterTrade)
{ // Condition for Long Entry here
EnterLong(200);
{
if(_stocks.ContainsKey(series))
{
_stocks[series]++;
}
}
}
}
}
я добавил код OnBardUpdate() на мой оригинальный пост в нижней части должность. Я опубликовал другие ошибки, которые я получаю сейчас. Это простое решение? спасибо – zirjeo
Ваша добавленная часть является отдельной проблемой и должна быть размещена как новый вопрос. Проблема заключается в том, что вы не получаете доступ к словарю с помощью индекса, такого как обычные массивы или списки. Вы получаете доступ через свой ключ, который вы определили как строку. Посмотрите в циклы foreach и используйте 'KeyValuePair' как итератор. –
awudoin
Итак, используйте для каждого и замените серию KeyValuePair? –
zirjeo