这款指标能够自动为每个金融工具在伪平稳投资组合中选择最优系数,使其趋向于零的均衡状态。
请确保在交易终端的Include\Math文件夹中存在AlgLib库。
一点理论
每种金融工具都有自己独特的运动方向,而每个方向在多维数组中都是一个独立的维度。通过旋转矩阵,即对矩阵的每个元素乘以某个特定的数字,我们试图找到一条与所有金融工具的距离最小的轴线,也就是方差最小的轴线。这个乘数就成为了每个金融工具应该如何转动以与其他工具朝同一方向移动的角度值。而这个角度值就是投资组合中每种货币的系数。
如果系数值大于0,则买入该货币;如果小于0,则卖出。通过不时重新计算系数,可以维持所创建合成的平稳性。此外,PCA不仅仅找到投资组合中方差最小的轴线,还能找到多条轴线。投资组合中的工具数量就是成分(向量)的数量。每个成分被称为主成分,并决定了它对投资组合整体运动变化的影响程度。
可能遇到的问题
如果图表没有绘制,检查“专家”标签页中打印的信息。可能有一些错误,或者正在与其他图表同步。如果没有任何消息,可以尝试切换其他时间框架。
获得的向量值与在R包中计算的值进行了验证,因此这些值是正确的。但特定系数的符号可能会错误,因为PCA并不关注符号。"-"或"+"符号只能通过经验来确定,即通过反复试验。
第二个问题的详细描述可以通过这里的图片查看:http://stats.stackexchange.com/questions/34396/im-getting-jumpy-loadings-in-rollapply-pca-in-r-can-i-fix-it
参数设置
InpVector = 0; // 如果投资组合中有N种货币,运动轴数量0 = 最大方差,N - 1 = 最小
InpFrame = 300; // 计算系数的浮动窗口,对于每个InpDepth的K线进行InpFrame次计算
InpDepth = 1000; // 图表绘制的历史K线总数
InpForward = 500; // 停止重新计算系数的K线,这是OOS
InpPeriod = 1; // MA平滑处理,让图表看起来不那么抖动
InpTimePeriod = PERIOD_CURRENT; // 计算的时间框架
InpNormalize = true; // 在显示之前对价格进行归一化,以平滑USDJPY和EURGBP的波动差距
InpSynthetics = true; // 绘制乘以找到的系数的合成结果,或单独绘制每个货币对
InpPrices = Logs; // 货币对的归一化算法
InpSymbols = "AUDUSD,USDCHF,USDCAD"; // 投资组合中的货币对
InpMagic = "ID" // 指标的自定义名称,以便于在同一图表上放置多个实例而不发生冲突
InpFrame = 300; // 计算系数的浮动窗口,对于每个InpDepth的K线进行InpFrame次计算
InpDepth = 1000; // 图表绘制的历史K线总数
InpForward = 500; // 停止重新计算系数的K线,这是OOS
InpPeriod = 1; // MA平滑处理,让图表看起来不那么抖动
InpTimePeriod = PERIOD_CURRENT; // 计算的时间框架
InpNormalize = true; // 在显示之前对价格进行归一化,以平滑USDJPY和EURGBP的波动差距
InpSynthetics = true; // 绘制乘以找到的系数的合成结果,或单独绘制每个货币对
InpPrices = Logs; // 货币对的归一化算法
InpSymbols = "AUDUSD,USDCHF,USDCAD"; // 投资组合中的货币对
InpMagic = "ID" // 指标的自定义名称,以便于在同一图表上放置多个实例而不发生冲突
这个想法来源于这里:https://www.mql5.com/en/code/9908



评论 0