我正在开发一个小型交易机器人作为练习。它每天都会接收股票价格(表示为迭代)。
这是我的Trade
类的样子:
class Trade
{
private:
int capital_;
int days_; // Total number of days of available stock prices
int daysInTrading_; // Increments as days go by.
std::list<int> stockPrices_; // Contains stock prices day after day.
int currentStock_; // Current stock we are dealing with.
int lastStock_; // Last stock dealt with
int trend_; // Either {-1; 0; 1} depending on the trend.
int numOfStocks_; // Number of stocks in our possession
int EMA_; // Exponential Moving Average
int lastEMA_; // Last EMA
public:
// functions
};
从我的最后两个属性中可以看出,我希望作为趋势跟踪算法的一部分实现指数移动平均线。
但是我认为我没有完全理解如何实现它;这是我的calcEMA
函数,它只是计算EMA
:
int Trade::calcEMA()
{
return ((this->currentStock_ - this->lastEMA_
* (2/(this->daysInTrading_ + 1)))
+ this->lastEMA_);
}
但是,如果我的股票价值(以文件形式传递)如下所示:
1000, 1100, 1200, 1300, 1400, 1500, 1400, 1300, 1200, 1100, 1000
为了确保我的EMA有意义,但是...它没有!
我在操作中错在哪里了?
此外,如果这是我第一次调用calcEMA
,我应该给lastEMA
赋什么值?
2/(this->daysInTrading_ + 1)
-- 这会截断结果,因为这是整数除法。这是你想要做的吗? - PaulMcKenzie