CalcTradePrice方法应在Trade初始化后立即调用。现在,在此之前正在调用它,这导致了一个例外:
System.DivideByZeroException:“试图除以零。”
var trade = new Trade
{
Pair = pair,
OpenRate = buyCandle.Close,
OpenDate = buyCandle.OpenTime,
Amount = 12345,
OpenFee = _backtestOptions.OpenFee,
CloseFee = _backtestOptions.CloseFee,
IsOpen = true
};我知道我可以在初始化之后手动调用该方法,如下所示:
var trade = new Trade
{
Pair = pair
};
CalcTradePrice();或者创建一个执行它的派生类,但我不想这样做。有什么建议吗?
贸易级别:
public class Trade
{
public string Pair { get; set; }
public decimal OpenRate { get; set; }
public decimal CloseRate { get; set; }
public DateTime OpenDate { get; set; }
public DateTime CloseDate { get; set; }
public decimal OpenTradePrice { get; set; }
public decimal Amount { get; set; }
public decimal OpenFee { get; set; }
public decimal CloseFee { get; set; }
public SellType SellType { get; set; }
public Trade()
{
CalcTradePrice();
}
public void CalcTradePrice()
{
this.OpenTradePrice = ... // DivideByZeroException because all elements are null at that moment
}
}发布于 2021-01-21 14:18:19
您可以创建参数化构造函数。通过传递给constructor.Use的参数分配所有属性,这些属性以CalcTradePrice()函数计算交易价格。
public class Trade
{
...
//I just passed two properties as an example, you can pass all required properties.
public Trade(int currentBalance, int candleCloseValue)
{
this.CurrentBalance = currentBalance;
this.CandleCloseValue= candleCloseValue;
CalcTradePrice();
}
public void CalcTradePrice()
{
this.OpenTradePrice = this.CurrentBalance/this.CandleCloseValue;
}
}在创建Trade类对象时,将值作为参数传递,
var currentBalance = 100;
var candleCloseValue = 20;
Trade trade = new Trade(currentBalance , candleCloseValue);注意:我使用上述两个属性只是为了展示如何在调用CalcTradePrice()函数之前分配属性值。
发布于 2021-01-21 14:23:20
那这个呢?
public class Trade
{
public string Pair { get; set; }
public decimal OpenRate { get; set; }
public decimal CloseRate { get; set; }
public DateTime OpenDate { get; set; }
public DateTime CloseDate { get; set; }
public decimal OpenTradePrice { get; set; }
public decimal Amount { get; set; }
public decimal OpenFee { get; set; }
public decimal CloseFee { get; set; }
public SellType SellType { get; set; }
public Trade(buyCandle,_backtestOptions, ..and so on )
{
Pair = pair,
OpenRate = buyCandle.Close;
OpenDate = buyCandle.OpenTime;
Amount = currentBalance / buyCandle.Close;
OpenFee = _backtestOptions.OpenFee;
CloseFee = _backtestOptions.CloseFee;
IsOpen = true;
CalcTradePrice();
}
};发布于 2021-01-21 14:26:26
您的异常System.DivideByZeroException: 'Attempted to divide by zero.'可能由
金额= currentBalance / buyCandle.Close
而不是构造函数调用。
https://stackoverflow.com/questions/65829264
复制相似问题