下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

2014.02.03 07:34
程序库

IncMatrix - MetaTrader 5程序库

| Chinese English Русский Español Deutsch 日本語 Português

显示:
355
等级:
投票: 32
\MQL5\Include\
incmatrix.mqh (29.22 KB)预览
smatrix.mq5 (2.18 KB)预览

用于处理矩阵的类.

矩阵使用一维数组创建, 按顺序: 第一行的元素, 第二行等等. 最后两个元素表示矩阵的大小: 列数和行数.

例子:

double m[]={1,2,3,
           4,5,6,
           2,3}; // 两行三列的矩阵.

类方法:

方法 方法的描述和参数

void SetSize(
  double& aA[],
  int aRows,
  int aCols
)

设置矩阵 aA 的大小. aRows - 行数, aCols - 列数.

void SetValue(
  double& aA[],
  int aRow,
  int aCol,
  double aValue
)

设置矩阵 (aA) 位于 aRow 行, aCol 列的元素的值 (Value).

int GetSize(
  double& aA[],
  int& aRows,
  int& aCols
)

返回矩阵 aA 元素的数量. 使用引用返回: aRows - 行数, aCols - 列数.

int GetRows(
  double& aA[]
)

返回矩阵 aA 的行数.

int GetCols(
  double& aA[]
)

返回矩阵 aA 的列数.

double GetValue(
  double& aA[],
  int aRow,
  int aCol
)

取得矩阵 aA 位于 aRow 行和 aCol 列的元素的值.

void Copy(
  double& aFrom[],
  double& aTo[]
)

从数组 aFrom 到数组 aTo 复制矩阵.

bool CheckForAdd(
  double& aA[],
  double& aB[]
)

检查两个矩阵大小是否适合相加 (高度和宽度完全吻合).

bool CheckForMult(
  double& aA[],
  double& aB[]
)

检查两个矩阵大小是否适合相乘 (矩阵 aA 的列数等于矩阵 aB 的行数).

bool CheckIsSq(
  double& aA[]
)

检查矩阵是否为正方.

void AddNum(
  double& aA[],
  double aNum,
  double& aR[]
)

把数字 aNum 加到矩阵 aA. 结果矩阵以引用形式使用数组 aR.

void MultNum(
  double& aA[],
  double aNum,
  double& aR[]
)

使用数字 aNum 和矩阵 aA相乘. 结果矩阵以引用形式使用数组 aR.

void AddMx(
  double& aA[],
  double& aB[],
  double& aAB[]
)

把矩阵 aA 和 aB 相加. 结果矩阵以引用形式使用数组 aAB.

void MultMx(
  double& aA[],
  double& aB[],
  double& aAB[])

把矩阵 aA 和 aB 相乘. 结果矩阵以引用形式使用数组 aAB.

void Transpose(
  double& aA[],
  double& aT[]
)

转置矩阵 aA. 转置的矩阵以引用形式使用数组 aT 返回.

void AlgAdd(
  double& aA[],
  double& aAA[]
)

取得余因子矩阵. aA - 源矩阵, aAA - 余因子矩阵 (以引用返回).

bool Invert(
  double& aA[],
  double& aB[]
)

以引用的形式返回矩阵aA的反转矩阵aR. 如果反转矩阵存在, 此方法返回true, 否则返回false.

void Triangle(
  double& aA[],
  double& aT[]
)

以引用的形式返回矩阵aA的三角矩阵aT.

void Minor(
  double aA[],
  int aRow,
  int aCol,
  double& aM[]
)

以行数aRow和列数aCol返回矩阵aA的小部分. 小部分以引用形式在数组aM中返回.

double MinorDef(
  double& aA[],
  int aRow,
  int aCol
)

返回矩阵aA以行aA和列aCol确定的子矩阵的行列式值.

void MinorDefMx(
  double& aA[],
  double& aM[]
)

取得子矩阵 (矩阵值使用子行列式). aA - 源矩阵, aM - 子行列式的矩阵 (用引用返回).

double Def(
  double& aA[]
)

返回矩阵 aA 的行列式值.

int Rank(
  double& aA[]
)

返回矩阵 aA 的级别.

int RankDRC(
  double& aA[],
  double& aDef,
  int& aRow,
  int& aCol
)

使用引用返回矩阵aA的级别:

  • aDef - 行列式值,
  • aRow - 行列式不等于0的子矩阵行数
  • aCol - 行列式不等于0的子矩阵列数

void CopyCol(
  double& aFrom[],
  double& aTo[],
  int aFromCol,
  int aToCol,
  double& aR[]
)

从矩阵 aFrom 的 aFromCol 列复制到矩阵 aTo 的 aToCol列. 结果以引用方式在数组 aR 中返回.

void CopyRow(
  double& aFrom[],
  double& aTo[],
  int aFromRow,
  int aToRow,
  double & aR[]
)

从矩阵 aFrom 的 aFromRow 行复制到矩阵 aTo 的 aToRow 行. 结果以引用方式在数组 aR 中返回.

void AppendCol(
  double& aA[],
  double& aC[],
  double& aF[]
)

把 aC 列增加到矩阵 aA 以扩展矩阵. 结果以引用方式在数组aF中返回.

void AppendRow(
  double& aA[],
  double& aR[],
  double& aF[]
)

把 aR 行增加到矩阵 aA 以扩展矩阵. 结果以引用方式在数组aF中返回.

bool SystemKramer(
  double& aK[],
  double& aY[],
  double& aX[]
)

使用克拉默法则解决线性方程系统.

  • aK - 系数矩阵 (正方),
  • aY - 列值,
  • aX - 结果行

bool SystemInverse(
  double& aK[],
  double& aY[],
  double& aX[]
)

使用反转矩阵解决线性方程系统.

  • aK - 系数矩阵 (正方),
  • aY - 列值,
  • aX - 结果行

bool SystemGauss(
  double& aK[],
  double& aY[],
  double& aX[]
)

使用高斯消元法解决线性方程系统.

  • aK - 系数矩阵 (正方),
  • aY - 列值,
  • aX - 结果行

int SystemCheck(
  double& aK[],
  double& aY[]
)

检查方程系统.

  • aK - 系数矩阵 (正方),
  • aY - 列值.

返回值:

  • -1 - 无解,
  • 0 - 一个解,
  • 1 - 解法数量无限

void Alert(
  double& aA[],
  int aDigits=2,
 string aCaption=""
)

在一个提醒框中显示整个矩阵Displays the entire matrix in one alert box.

  • aA - 矩阵,
  • aDigits - 小数点后位数,
  • aCaption - 信息标题

void Alert2(
  double& aA[],
  int aDigits=2,
 string aCaption=""
)

在提醒框中按行显示矩阵, 行数从底部到顶部, 然后是标题, 这样, 在提醒框中矩阵方向就显示正常了: 顶部是标题, 然后按顺序显示行.

void Alert1Str(
  double& aA[],
  int aDigits=2
)

在提醒框中以字符串显示矩阵数组.

 


sMatrix.mq4 脚本是使用此库解线性方程的例子, 分别使用克拉默法则, 转换矩阵和高斯消元法.

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/951

PEMA PEMA

PEMA - 五重指数移动平均.

QEMA QEMA

QEMA - 四重指数移动平均.

CCI T3 CCI T3

使用 Tilson 算法平滑过的CCI.

周期的高度 周期的高度

本指标计算周期最大值和最小值的差. 周期在指标参数中指定.