EA: MarketPredictor - 页 2

 

感谢您的提示,代码已经进行了 5 天,我已经解决了不设置任何交易的问题,我只是想做一些小的更新:)

 

您需要重新迭代

    // 根据波动率(ATR)调整阿尔法值
    double atr = iATR(_Symbol, PERIOD_CURRENT, period); // 计算 ATR
    if(atr > 0.0)
        alpha = atr * 0.1; // 设置阿尔法值与波动率成正比
    else
        alpha = inputAlpha; // 如果 ATR 不可用,则回退到输入值

此代码无法正确计算 ATR

https://www.mql5.com/zh/docs/indicators/iatr

返回值

返回指定技术指标的句柄


返回代码句柄,不返回 ATR 值

Documentation on MQL5: Technical Indicators / iATR
Documentation on MQL5: Technical Indicators / iATR
  • www.mql5.com
The function returns the handle of the Average True Range indicator. It has only one buffer. Parameters symbol [in] The symbol name of the security...
 
1. 错误修正:
- 在 FFT 中:如果数组大小不是 2 阶,对偶数和奇数数组的递归 FFT 调用可能导致无限递归。
我们必须确保数组的大小是二阶。目前的代码没有检查这一点。
- 在 CalculateFractalComponentFFT: 函数中,我们使用了 FFT,但没有检查 N 是否为二阶。
此外,在 FFT 之后,我们只使用了前 N/2 个元素,这是正确的,但 FFT 代码在组合时的索引有误。
2.改进之处:
- 在 ExecuteTrade 函数中:使用PositionSelect(_Symbol) 检查未平仓头寸并 完全正确,
,因为如果某个符号上有任何头寸,该函数返回 true,但并不一定返回当前未平仓头寸。
最好是循环查看所有仓位,并检查魔法编号和符号。
- 此外,在 ExecuteTrade 中,我们不会检查是否已经开仓,因此我们可以开多个仓位。
我们需要将开仓限制在一个仓位(或使用神奇数字来识别仓位)。
- 在 OptimiseParameters: 函数中,可以用内置的 iMA 函数代替移动平均值计算。
- 在 SimulatePrice 函数中:使用 MathRand() 可能不是蒙特卡罗的最佳选择,最好使用正态分布