在 C++ 中使用指数移动平均线编码 P&Q 规则
Posted
技术标签:
【中文标题】在 C++ 中使用指数移动平均线编码 P&Q 规则【英文标题】:Coding the P&Q rule using Exponential Moving Average in C++ 【发布时间】:2016-05-18 17:10:07 【问题描述】:我正在开发一个使用 C++ 作为练习的小型交易机器人。他将首先收到基本信息,例如我们的资本和日常股票价值(表示为迭代)。
这是我的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_;
int numOfStocks_; // Amount of stock options in our possession
float EMA_; // Exponential Moving Average
float lastEMA_; // Last EMA
public:
// functions
;
从最后两个属性可以看出,我正在使用指数移动平均线原理和趋势跟踪算法。
我已经通过这篇论文http://www.cis.umac.mo/~fstasp/paper/jetwi2011.pdf(主要在第 3 页)阅读了它,并希望实现他们与我们共享的伪代码;它是这样的:
Repeat
Compute EMA(T)
If no position opened
If EMA(T) >= P
If trend is going up
Open a long position
Else if trend is going down
Open a short position
Else if any position is opened
If EMA(¬T) >= Q
Close position
If end of market
Close all opened position
Until market close
到目前为止,我是这样做的:
void Trade::scanTrend()
if (this->numOfStocks_ == 0) // If no position is opened
this->EMA_ = this->calcEMA(); // Calculates the EMA
if (this->EMA_ >= this->currentStock_) // If EMA(T) >= P
if (this->EMA_ > this->lastEMA_) // If trend is going up
// Trend is going up, open a long position
else if (this->EMA_ < this->lastEMA_) // If trend is going down
// Trend is going down, open a short position
else // Else if any position is opened
this->EMA_ = this->calcEMA();
// How may I represent closing positions?
this->lastEMA_ = this->EMA_;
我的问题来自于不理解“开仓”和“平仓”的行为。它与买卖股票有什么关系吗?到目前为止,我所拥有的似乎与伪代码相符吗?
【问题讨论】:
这与***.com/q/37300684的问题不同吗? 当然,在解决了计算 EMA 的第一个问题之后(感谢 Rakete1111),我现在专注于算法本身。 【参考方案1】:在这种情况下,P 和 Q 是两个日期之间的阈值或 EMA 变化。
P 将是第一次观察和当前观察之间的变化。如果 P 为正,那么您可以假设 P
Q 也是 EMA 的变体,但用于知道何时平仓,它是第一次观察的最高(最低)EMA 值与当前上升(下降)趋势值之间的差异。
【讨论】:
以上是关于在 C++ 中使用指数移动平均线编码 P&Q 规则的主要内容,如果未能解决你的问题,请参考以下文章