文章 "什么是趋势,行情结构是基于趋势还是横盘?" - 页 8

 
Maxim Dmitrievsky:

我会去副部长办公室做两个月这样的学徒。

我愿意为此当总统),学习如何在几乎没有风险的情况下赚钱。

 

能否请您告诉我,您为参考图所取的方差是多少?数学期望值显然是 -0。

 
Alexey Klenov:

能否请您告诉我,您为参考图所取的方差是多少?数学期望值显然是 0。

我没有计算基准的方差。我用表格建立了基准,其中一部分如图 4 所示。 我在文章中附上了 Excel 文件,其中包含计算表格的示例。
该基准是在组合学的帮助下构建的。也就是说,要计算组合数和每个组合落空的概率。
 

我无法重复理论曲线的形状

如果取西格玛 3.2,我的高度会大致下降,但我不会跌落(在这种情况下为 +-12)。

如果取西格玛 5.8,我的高度会下降到(+-20),但高度不会下降。

在这两种情况下,所有 Y 的总和都等于 100000。

为了根据正态规律生成随机变量,我从标准库中提取了一个函数。

数学随机正态

显然,组合方法并不能生成符合正态规律的标准偏差变量。

.... 我想在不使用阶乘的情况下在 MQL 中重复这一过程。

 
Alexey Klenov:

无法复制理论曲线的形状

如果我取西格玛 3.2,我的高度大约会下降,但我不会跌落(在本例中为 +-12)。

如果取西格玛 5.8,我的高度会下降到(+-20),但我的高度不会下降

在这两种情况下,所有 Y 的总和都等于 100000。

为了根据正态规律生成随机变量,我从标准库中提取了一个函数。

数学随机正态

显然,组合方法并不能生成符合正态规律的标准偏差变量。

.... 我想在不使用阶乘的情况下在 MQL 中重复计算。

在图 6 中,我测量了随机游走的分布形状,我想是 100,000 个样本。白色直方图是随机游走。我想我在文章中附上了一个文件,应该叫 50% 或类似的名字。我在其中随机生成了 0 和 1,如果是 0,则是前一个值减去 1,如果是 1,则是前一个值加上 1。这就是随机游走图的构造过程。只需测量上面的西格玛参数即可使用。
 
Alexey Klenov:

为了根据正态规律 生成随机变量,我从标准库中提取了一个函数。

数学随机正态

显然,组合法并不能生成符合正态规律的标准偏差变量。

....I 希望在不使用阶乘的情况下在 MQL 中重复该方法。

正态分布 部分的例子?

Документация по MQL5: Стандартная библиотека / Математика / Статистика / Нормальное распределение
Документация по MQL5: Стандартная библиотека / Математика / Статистика / Нормальное распределение
  • www.mql5.com
//| Script program start function                                    | //|  Calculate frequencies for data set                              |                               //|  Calculates values for sequence generation                       |
 
Rashid Umarov:

正态分布 示例

基础就来自这个例子。

 
Maxim Romanov:
在图 6 中,我测量了 10 万个样本的随机漫步分布形状。白色直方图是随机漫步。我想我在文章中附上了一个文件,应该叫 50% 或类似的名字。我在其中随机生成了 0 和 1,如果是 0,则是前一个值减 1,如果是 1,则是前一个值加 1。这就是随机游走图的构造过程。只需测量上面的西格玛参数并加以使用即可。

据我所知,您可以对序列进行双重量化。

第一次量化 +1-1,第二次将这些 "renko 条 "量化为 40 条的图形。

也许你会得到这种形式的 "正态分布"。

如果像您那样,第一次将这些 "renko 柱 "切成 "renko 柱",然后再遵循方向反转的原则,不是更合乎逻辑吗?

例如您的图 1

+3 -1 -1 +2 -2 -2 +1 -4 +2 -2 -2 +4 等等。

因此,在 X 上的零点不会有任何值(尽管您可以将反转视为 x0 中的 +1)。

我们已经用这个数列进行了组合运算。

那么我们就可以把 MO 0 和 sigma 1 的正态分布作为参考。

虽然我还在考虑这个问题......

 
Alexey Klenov:

依据就来自这个例子。

给我看看代码

 
//+------------------------------------------------------------------+
//|testNormal.mq5
//|AlexKl ||
//|https://www.mql5.com | |
//+------------------------------------------------------------------+
#property copyright "AlexKl"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//+------------------------------------------------------------------+
//| 脚本程序启动功能|
//+------------------------------------------------------------------+
#include <Graphics\Graphic.mqh>
#include <Math\Stat\Normal.mqh>
#include <Math\Stat\Math.mqh>
input double mean_value=0;  // 数学期望值(平均值)
input double std_dev=1;     // 标准偏差(标准偏差)
void OnStart()
  {
   long chart=0;
   string name="GraphicNormal";
   double  dNormalRandom[];   // 随机浮点数
   int iNormalRandom[];       // 从数组中取整的数字 dNormalRandom
   int n=100000;       // 样本中的数值个数
   double x[];          // 直方图区间中心
   double y[];          // 样本中属于区间的数值个数
   double max,min;      // 样本中的最大值和最小值
// 根据正态规律生成随机变量数组
   MathRandomNormal(mean_value,std_dev,n,dNormalRandom);

   ArrayResize(iNormalRandom,ArraySize(dNormalRandom));
// 从 double 类型的随机数数组中填充舍入数数组
   for(int i=0; i<ArraySize(dNormalRandom); i++)
     {
      iNormalRandom[i]=(int)round(dNormalRandom[i]);
     }
   CalculateHistogramArrayItsMy(iNormalRandom,x,y);


//绘图
   CGraphic graphic;
   if(ObjectFind(chart,name)<0)
      graphic.Create(chart,name,0,0,0,780,580);
   else
      graphic.Attach(chart,name);
   graphic.BackgroundMain(StringFormat("Normal distribution mu=%G sigma=%G",mean_value,std_dev));
   graphic.BackgroundMainSize(16);
//--- 绘制所有曲线
//--- 现在我们来绘制理论分布密度曲线
   graphic.CurveAdd(x,y,CURVE_LINES,"Theory");

//--- 绘制所有曲线
   graphic.CurvePlotAll();
   graphic.Update();
   int summ=0;
   for(int i=0; i<ArraySize(y); i++)
     {
      summ+=y[i];
     }
   Print("Y 的总金额" + summ);
  }
//+------------------------------------------------------------------+
bool CalculateHistogramArrayItsMy(const int &data[],double &intervals[],double &frequency[])
  {

   double minv=data[ArrayMinimum(data)];
   double maxv=data[ArrayMaximum(data)];
   int range=maxv-minv;
   ArrayResize(intervals,range+1);
   ArrayResize(frequency,range+1);
   for(int i=0; i<range+1; i++)
     {
      intervals[i]=minv+i;
     }
   for(int i=0; i<ArraySize(data); i++)
     {
      int ii=(MathAbs(minv)+data[i]);
      frequency[ii]+=1.0;
     }
   return (true);
  }
//+------------------------------------------------------------------+