# 数据科学和机器学习（第 13 部分）：配合主成分分析（PCA）改善您的金融市场分析

MetaTrader 5交易系统 | 11 八月 2023, 07:56
1 050 0

“PCA 是数据分析和机器学习的基础技术，广泛用于从图像和信号处理到金融和社会科学的各种应用。“

### 概述

PCA 的主要思想在核心上非常简单：减少数据集中的变量数量，同时保留尽可能多的信息。 我们来看一下主成分分析算法中涉及的步骤。

### 主成分分析算法涉及的步骤

1. 标准化数据
2. 查找矩阵的协方差
3. 查找特征向量和特征值
4. 查找 PCA 得分并对其进行标准化
5. 获取成分

### 01：标准化数据

```   matrix Matrix = matrix_utiils.ReadCsv("bp data.csv");

pre_processing = new CPreprocessing(Matrix, NORM_STANDARDIZATION);
```

```CS      0       10:17:31.956    PCA Test (NAS100,H1)    Non-Standardized data
CS      0       10:17:31.956    PCA Test (NAS100,H1)    [[82.59999999999999,132.1,71,172]
CS      0       10:17:31.956    PCA Test (NAS100,H1)     [79.09999999999999,129.9,79,180]
CS      0       10:17:31.956    PCA Test (NAS100,H1)     [81.7,131.2,78,172]
CS      0       10:17:31.956    PCA Test (NAS100,H1)     [80.7,132.1,66,166]
CS      0       10:17:31.956    PCA Test (NAS100,H1)     [74.90000000000001,125,70,173]
CS      0       10:17:31.956    PCA Test (NAS100,H1)     [79.09999999999999,129.1,64,162]
CS      0       10:17:31.956    PCA Test (NAS100,H1)     [83.8,133.1,60,164]
CS      0       10:17:31.956    PCA Test (NAS100,H1)     [78.40000000000001,127,67,165]
CS      0       10:17:31.956    PCA Test (NAS100,H1)     [82.3,131.6,64,164]
CS      0       10:17:31.956    PCA Test (NAS100,H1)     [79.40000000000001,129.2,77,179]]
CS      0       10:17:31.956    PCA Test (NAS100,H1)    Standardized data
CS      0       10:17:31.956    PCA Test (NAS100,H1)    [[0.979632638610581,0.8604038253411385,0.2240645398825688,0.3760399462363875]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-0.4489982926965129,-0.0540350228475094,1.504433339211528,1.684004976623816]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [0.6122703991316175,0.4863152056275964,1.344387239295408,0.3760399462363875]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [0.2040901330438764,0.8604038253411385,-0.5761659596980309,-0.6049338265541837]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-2.163355410265021,-2.090739730176784,0.06401843996644889,0.539535575034816]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-0.4489982926965129,-0.3865582403706605,-0.8962581595302708,-1.258916341747898]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [1.469448957915872,1.276057847245071,-1.536442559194751,-0.9319250841510407]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-0.7347244789579271,-1.259431686368917,-0.416119859781911,-0.7684294553526122]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [0.8571785587842599,0.6525768143891719,-0.8962581595302708,-0.9319250841510407]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-0.326544212870186,-0.3449928381802696,1.184341139379288,1.520509347825387]]
```

### 02：查找矩阵的协方差

```   matrix Cova = Matrix.Cov(false);

Print("Covariances\n", Cova);
```

```CS      0       10:17:31.957    PCA Test (NAS100,H1)    Covariances
CS      0       10:17:31.957    PCA Test (NAS100,H1)    [[1.111111111111111,1.05661579634328,-0.2881675653452953,-0.3314539233600543]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [1.05661579634328,1.111111111111111,-0.2164241126576326,-0.2333966556085017]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-0.2881675653452953,-0.2164241126576326,1.111111111111111,1.002480628180182]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-0.3314539233600543,-0.2333966556085017,1.002480628180182,1.111111111111111]]
```

```matrix matrix::Cov(
const bool    rowvar=true  // rows or cols vectors of observations
);
```

### 03：查找特征向量和特征值

```   if (!Cova.Eig(component_matrix, eigen_vectors))
Print("Failed to get the Component matrix matrix & Eigen vectors");
```

```bool matrix::Eig(
matrix&  eigen_vectors,     // matrix of eigenvectors
vector&  eigen_values       // vector of eigenvalues
);
```

`Print("\nComponent matrix\n",component_matrix,"\nEigen Vectors\n",eigen_vectors);`

```CS      0       10:17:31.957    PCA Test (NAS100,H1)    Component matrix
CS      0       10:17:31.957    PCA Test (NAS100,H1)    [[-0.5276049902734494,0.459884739531444,0.6993704635263588,-0.1449826035480651]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-0.4959779194731578,0.5155907011803843,-0.679399121133044,0.1630612352922813]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [0.4815459137666799,0.520677926282417,-0.1230090303369406,-0.6941734714553853]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [0.4937128827246101,0.5015643052337933,0.184842006606018,0.6859404272536788]]
CS      0       10:17:31.957    PCA Test (NAS100,H1)    Eigen Vectors
CS      0       10:17:31.957    PCA Test (NAS100,H1)    [2.677561590453738,1.607960239905343,0.04775016337426833,0.1111724507110918]
```

### 05：查找 PCA 得分

` pca_scores = Matrix.MatMul(component_matrix);`

```CS      0       10:17:31.957    PCA Test (NAS100,H1)    PCA SCORES
CS      0       10:17:31.957    PCA Test (NAS100,H1)    [[-0.6500472384886967,1.199407986803537,0.1425145462368588,0.1006701620494091]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [1.819562596624738,1.393614599196321,-0.1510888243020112,0.1670753033981925]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [0.2688014256048517,1.420914385142756,0.001937917070391801,-0.6847663538666366]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-1.110534258768705,-0.06593596223641518,-0.4827665581567511,0.09571954869438426]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [2.475561333978323,-1.768915328424386,-0.0006861487484489809,0.2983796568520111]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-0.6245145789301378,-1.503882637300733,-0.1738415909335406,-0.2393186981373224]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-2.608156175249579,0.0662886285379769,0.1774740257067155,0.4223436077935874]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [0.4325302694103054,-1.589321053467977,0.2509606394263523,-0.337079680008286]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-1.667608250048573,-0.2034163217366656,0.09411419638842802,-0.03495245015036286]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [1.664404875867474,1.051245703485609,0.1413817973120564,0.2119289033750197]]
```

`   pre_processing = new CPreprocessing(pca_scores_standardized, NORM_STANDARDIZATION);`

```CS      0       10:17:31.957    PCA Test (NAS100,H1)    PCA SCORES | STANDARDIZED
CS      0       10:17:31.957    PCA Test (NAS100,H1)    [[-0.4187491401035159,0.9970295470975233,0.68746486754918,0.3182591681100855]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [1.172130620033975,1.15846730049564,-0.7288256625700642,0.528192723531639]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [0.1731572094549987,1.181160740523977,0.009348167869829477,-2.164823873278453]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-0.715386880184365,-0.05481045923432144,-2.328780161211247,0.3026082735855334]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [1.594713612332284,-1.470442808583469,-0.003309859736641006,0.9432989819176616]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-0.4023014443028848,-1.250129598312728,-0.8385809690405054,-0.7565833632510734]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-1.68012890598631,0.05510361946569121,0.8561031894464458,1.335199254045385]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [0.2786284867625921,-1.321151824538665,1.210589566461227,-1.06564543418136]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [-1.074244269325531,-0.1690934905926844,0.4539901733759543,-0.1104988556867913]
CS      0       10:17:31.957    PCA Test (NAS100,H1)     [1.072180711318756,0.8738669736790375,0.6820006878558206,0.6699931252073736]]
```

### 06：获取 PCA 成分

```   pca_scores_coefficients.Resize(cols);
vector v_row;

for (ulong i=0; i<cols; i++)
{
v_row = pca_scores.Col(i);

pca_scores_coefficients[i] = v_row.Var(); //variance of the pca scores
}
```

```2023.02.25 10:17:31.957 PCA Test (NAS100,H1)    SCORES COEFF [2.409805431408367,1.447164215914809,0.04297514703684173,0.1000552056399828]

```

1. 特征值（Eigenvalues_and_eigenvectors）准则：该准则涉及选择具有最大特征值的主成分。 该思路是，最大的特征值对应于捕获数据中最大方差的主成分。
2. 方差比例（The Proportion of Variance）准则：此准则涉及选择解释数据中总方差一定比例的主成分。 在此函数库中，我将它设置为大于 90%。
3. 碎石图（Scree Plot）准则：该准则涉及检查碎石图，该碎石图按降序显示每个主成分的特征值。 曲线开始趋于平稳的点位用作选择要保留的主成分的阈值。
4. 凯撒（Kaiser）准则：此标准涉及仅保留特征值大于系数平均值的主分量。 换言之，系数大于 1 的主成分。
5. 交叉验证（Cross-validation）准则：此准则涉及评估验证集上 PCA 模型的性能，并选择产生最佳预测准确性的主成分。

```enum criterion
{
CRITERION_VARIANCE,
CRITERION_KAISER,
CRITERION_SCREE_PLOT
};

```

```matrix Cpca::ExtractComponents(criterion CRITERION_)
{

vector vars = pca_scores_coefficients;
vector vars_percents = (vars/(double)vars.Sum())*100.0;

//--- for Kaiser
double vars_mean = pca_scores_coefficients.Mean();

//--- for scree
double x[], y[];

//---
matrix PCAS = {};

double sum=0;
ulong  max;
vector v_cols = {};

switch(CRITERION_)
{
case  CRITERION_VARIANCE:
#ifdef DEBUG_MODE
Print("vars percentages ",vars_percents);
#endif

for (int i=0, count=0; i<(int)cols; i++)
{
count++;

max = vars_percents.ArgMax();
sum += vars_percents[max];

vars_percents[max] = 0;

v_cols.Resize(count);
v_cols[count-1] = (int)max;

if (sum >= 90.0)
break;
}

PCAS.Resize(rows, v_cols.Size());

for (ulong i=0; i<v_cols.Size(); i++)
PCAS.Col(pca_scores.Col((ulong)v_cols[i]), i);

break;
case  CRITERION_KAISER:

#ifdef DEBUG_MODE
Print("var ",vars," scores mean ",vars_mean);
#endif

vars = pca_scores_coefficients;
for (ulong i=0, count=0; i<cols; i++)
if (vars[i] > vars_mean)
{
count++;

PCAS.Resize(rows, count);

PCAS.Col(pca_scores.Col(i), count-1);
}

break;
case  CRITERION_SCREE_PLOT:
v_cols.Resize(cols);
for (ulong i=0; i<v_cols.Size(); i++)
v_cols[i] = (int)i+1;

vars = pca_scores_coefficients;
SortAscending(vars); //Make sure they are in ascending first order
ReverseOrder(vars);  //Set them to descending order

VectorToArray(v_cols, x);
VectorToArray(vars, y);

plt.ScatterCurvePlots("Scree plot",x,y,"variance","PCA","Variance");

//---
vars = pca_scores_coefficients;
for (ulong i=0, count=0; i<cols; i++)
if (vars[i] > vars_mean)
{
count++;
PCAS.Resize(rows, count);
PCAS.Col(pca_scores.Col(i), count-1);
}

break;
}
return (PCAS);
}
```

```  vector vars = pca_scores_coefficients;
vector vars_percents = (vars/(double)vars.Sum())*100.0;
```

```CS      0       12:03:49.579    PCA Test (NAS100,H1)    PCA'S
CS      0       12:03:49.579    PCA Test (NAS100,H1)    [[-0.6500472384886967,1.199407986803537]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [1.819562596624738,1.393614599196321]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [0.2688014256048517,1.420914385142756]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [-1.110534258768705,-0.06593596223641518]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [2.475561333978323,-1.768915328424386]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [-0.6245145789301378,-1.503882637300733]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [-2.608156175249579,0.0662886285379769]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [0.4325302694103054,-1.589321053467977]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [-1.667608250048573,-0.2034163217366656]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [1.664404875867474,1.051245703485609]]
```

```CS      0       12:03:49.579    PCA Test (NAS100,H1)    PCA'S
CS      0       12:03:49.579    PCA Test (NAS100,H1)    [[-0.6500472384886967,1.199407986803537]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [1.819562596624738,1.393614599196321]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [0.2688014256048517,1.420914385142756]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [-1.110534258768705,-0.06593596223641518]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [2.475561333978323,-1.768915328424386]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [-0.6245145789301378,-1.503882637300733]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [-2.608156175249579,0.0662886285379769]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [0.4325302694103054,-1.589321053467977]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [-1.667608250048573,-0.2034163217366656]
CS      0       12:03:49.579    PCA Test (NAS100,H1)     [1.664404875867474,1.051245703485609]]
```

```   handles[0] = iATR(Symbol(),PERIOD_CURRENT, period);
handles[1] = iBearsPower(Symbol(), PERIOD_CURRENT, period);
handles[2] = iMACD(Symbol(),PERIOD_CURRENT,12, 26,9,PRICE_CLOSE);
handles[3] = iChaikin(Symbol(), PERIOD_CURRENT,12,26,MODE_SMMA,VOLUME_TICK);
handles[4] = iCCI(Symbol(),PERIOD_CURRENT,period, PRICE_CLOSE);
handles[5] = iDeMarker(Symbol(),PERIOD_CURRENT,period);
handles[6] = iForce(Symbol(),PERIOD_CURRENT,period,MODE_EMA,VOLUME_TICK);
handles[7] = iMomentum(Symbol(),PERIOD_CURRENT,period, PRICE_CLOSE);
handles[8] = iRSI(Symbol(),PERIOD_CURRENT,period,PRICE_CLOSE);
handles[9] = iWPR(Symbol(),PERIOD_CURRENT,period);

for (int i=0; i<10; i++)
{
matrix_utiils.CopyBufferVector(handles[i],0,0,bars,buff_v);
ind_Matrix.Col(buff_v, i); //store each indicator in ind_matrix columns
}
```

`    Print("Oscillators Correlation Matrix\n",ind_Matrix.CorrCoef(false));  `

```CS      0       18:03:44.405    PCA Test (NAS100,H1)    Oscillators Correlation Matrix
CS      0       18:03:44.405    PCA Test (NAS100,H1)    [[1,0.01772984879133655,-0.01650305145071043,0.03046861668248528,0.2933315924162302,0.09724971519249033,-0.054459564042778,-0.0441397473782667,0.2171969726706487,0.3071254662907512]
CS      0       18:03:44.405    PCA Test (NAS100,H1)     [0.01772984879133655,1,0.6291675928958272,0.2432064602541826,0.7433991440764224,0.7857575973967624,0.8482060554701495,0.8438879842180333,0.8287766948950483,0.7510097635884428]
CS      0       18:03:44.405    PCA Test (NAS100,H1)     [-0.01650305145071043,0.6291675928958272,1,0.80889919514547,0.3583185473647767,0.79950773673123,0.4295059398014639,0.7482107564439531,0.8205910850439753,0.5941794310595322]
CS      0       18:03:44.405    PCA Test (NAS100,H1)     [0.03046861668248528,0.2432064602541826,0.80889919514547,1,0.03576792595345671,0.436675349452699,0.08175026884450357,0.3082792264724234,0.5314362133025707,0.2271361556104472]
CS      0       18:03:44.405    PCA Test (NAS100,H1)     [0.2933315924162302,0.7433991440764224,0.3583185473647767,0.03576792595345671,1,0.6368513319457978,0.701918992559641,0.6677393692960837,0.7952832674277922,0.8844891719743937]
CS      0       18:03:44.405    PCA Test (NAS100,H1)     [0.09724971519249033,0.7857575973967624,0.79950773673123,0.436675349452699,0.6368513319457978,1,0.6425071357003039,0.9239712092224102,0.8809179254503203,0.7999862160768584]
CS      0       18:03:44.405    PCA Test (NAS100,H1)     [-0.054459564042778,0.8482060554701495,0.4295059398014639,0.08175026884450357,0.701918992559641,0.6425071357003039,1,0.7573281438252102,0.7142333470379938,0.6534102287503526]
CS      0       18:03:44.405    PCA Test (NAS100,H1)     [-0.0441397473782667,0.8438879842180333,0.7482107564439531,0.3082792264724234,0.6677393692960837,0.9239712092224102,0.7573281438252102,1,0.8565660350098397,0.8221821793990941]
CS      0       18:03:44.405    PCA Test (NAS100,H1)     [0.2171969726706487,0.8287766948950483,0.8205910850439753,0.5314362133025707,0.7952832674277922,0.8809179254503203,0.7142333470379938,0.8565660350098397,1,0.8866871375902136]
CS      0       18:03:44.405    PCA Test (NAS100,H1)     [0.3071254662907512,0.7510097635884428,0.5941794310595322,0.2271361556104472,0.8844891719743937,0.7999862160768584,0.6534102287503526,0.8221821793990941,0.8866871375902136,1]]
```

```    pca = new Cpca(ind_Matrix);
matrix pca_matrix = pca.ExtractComponents(ENUM_CRITERION);
```

```CS      0       15:03:30.992    PCA Test (NAS100,H1)    PCA'S
CS      0       15:03:30.992    PCA Test (NAS100,H1)    [[-2.297373513063062,0.8489493134565058,0.02832445955171548]
CS      0       15:03:30.992    PCA Test (NAS100,H1)     [-2.370488225540198,0.9122356709081817,-0.1170316144060158]
CS      0       15:03:30.992    PCA Test (NAS100,H1)     [-2.728297784013197,1.066014896296926,-0.2859442064697605]
CS      0       15:03:30.992    PCA Test (NAS100,H1)     [-1.818906988827231,1.177846546204641,-0.748128826146959]
...
...
CS      0       15:03:30.992    PCA Test (NAS100,H1)     [-3.26602969252589,0.4816995789189212,-0.7408982990360158]
CS      0       15:03:30.992    PCA Test (NAS100,H1)     [-3.810781495417407,0.4426824869307094,-0.5737277071364888…]

```

`       plt.ScatterCurvePlotsMatrix("pca's ",pca_matrix,"var","PCA");`

### 主成分分析的优势

1. 降维：PCA 可以有效地减少数据集中的变量数量，同时保留最重要的信息。 这可以简化数据分析和可视化，降低计算复杂性，并提高模型性能。
2. 数据压缩：PCA 可以有效地将大型数据集压缩成较少数量的主成分，可以节省存储空间，并减少数据传输时间。
3. 降噪：PCA 可以通过关注最重要的形态，或趋势来消除数据中的噪声或随机变化。 正如您刚刚看到的，10 个振荡器里有很多噪声。
4. 可解释的结果：PCA 产生易于解释和可视化的主成分，这有助于理解数据的结构。
5. 数据规范化：PCA 通过缩放到单位方差来标准化数据，可以减少变量尺度差异的影响，提高统计模型的准确性。

### 主成分分析的缺点。

1. 信息丢失：如果丢弃了太多主成分，或者保留的成分未能捕获数据中的所有相关变化，则 PCA 可能导致信息丢失。
2. 解释结果可能很烦人：解释主成分可能很困难，因为它们只是变量，您不知道具体线索，尤其是当原始变量高度相关，或主成分数量很大时。
3. 对异常值敏感：就像许多 ML 技术一样，异常值令该算法失真，并导致结果的偏差。
4. 计算密集型：在大型数据集中，PCA 算法在试图求解时也许会产生相同的问题。
5. 模型假设：该算法假设数据线性相关，主成分不相关，这在实践中并不总是正确的。 违反这些假设可能会导致糟糕的结果。

### 后记

总之，主成分分析（PCA）是一种强大的技术，可用于降低数据的维度，同时保留最重要的信息。 通过辨别数据集的主要成分，我们可以深入了解市场的底层结构。 PCA 在工程和生物学等交易领域之外具有广泛的应用，尽管它是一种数学密集型技术，但它的好处令其值得一试。 依据正确的方式和数据，PCA 可以帮助我们解锁新的见解，并根据我们可能拥有的数据做出明智的交易决策。

在我的 GitHub 存储库上跟踪该算法的发展和更新：https://github.com/MegaJoctan/MALE5

文件 说明
matrix_utils.mqh  包含其它矩阵操作函数
pca.mqh  主成分分析函数库
plots.mqh   包含有助于绘制向量的类
preprocessing.mqh  为 ML 算法准备和扩展数据的函数库
PCA Test.mqh  测试算法的 EA 以及本文中讨论的所有内容

参考文章：

本文由MetaQuotes Ltd译自英文
原文地址： https://www.mql5.com/en/articles/12229

附加的文件 |

#### 该作者的其他文章

种群优化算法：树苗播种和成长（SSG）算法
树苗播种和成长（SSG）算法的灵感来自星球上最具韧性的生物之一，在各种条件下都表现出杰出的生存能力。
开发回放系统 — 市场模拟（第 02 部分）：首次实验（II）
这一次，我们尝试换一种不同的方式来实现 1 分钟的目标。 然而，这项任务并非如人们想象的那么简单。
学习如何基于斐波那契（Fibonacci）设计交易系统
在本文中，我们将继续如何基于最流行的技术指标创建交易系统的系列文章。 这次一个新的技术工具，即斐波那契（Fibonacci），我们将学习如何基于该技术指标设计交易系统。
数据科学和机器学习（第 12 部分）：自训练神经网络能否帮助您跑赢股市？
您是否厌倦了持续尝试预测股市？ 您是否希望有一个水晶球来帮助您做出更明智的投资决策？ 自训练神经网络可能是您一直在寻找的解决方案。 在本文中，我们将探讨这些强大的算法是否可以帮助您“乘风破浪”，并跑赢股市。 通过分析大量数据和识别形态，自训练神经网络通常可以做出比人类交易者更准确的预测。 发现如何使用这项尖端技术来最大化您的盈利，并制定更明智的投资决策。