使用 C# 我确定这是一个基本问题。我收到错误消息。“当前上下文中不存在名称'_stocks'”。我知道这是因为我在 Initialize 方法中声明了 _stocks 字典。这使得 _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]' 的最佳重载方法匹配有一些无效参数 Argument '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]++;
}
}
}
}
}